设为首页 加入收藏

TOP

关于MySQL数据库的备份方案(一)
2018-08-24 09:22:08 】 浏览:165
Tags:关于 MySQL 数据库 备份 方案

分享点自己近4年来接触MySQL数据备份这一块的小经验。数据是一个互联网公司的命脉,数据库的安全以及备案的完整性是至关重要的,所以我们需要在工作中要很熟练的掌握数据的备份与恢复,这也是一个合格的运维DBA必须具有的职业技能。


我这里简单总结MySQL的备份分为3种
分为冷备份,逻辑备份,热备份


1、冷备份:


一般主要用于非核心业务,这类业务一般都是允许业务中断的,冷备份的特点就是数度快,恢复时也最为简单。通常直接复物理文件来实现冷备份


1.1备份过程:


第一关闭mysql服务
第二步就是把datas数据目录(包含ibdata1)和日志目录(包含ib_logfile0,ib_logfile1,ib_logfile2)复制到磁盘,或者本地的另一块磁盘里


1.2恢复过程:


第一使用复制的数据目录和日志目录替换原有的目录
第二就是启动mysql


2、逻辑备份MySQLdump


生产场景备份的命令:
生产场景不同引擎mysqldump备份命令
myisam引擎企业生产备份命令(适合所有引擎或混合引擎):


mysqldump -uroot -p123456 -A -B -F -R --master-data=2 -x --events|gzip >/opt/all.sql.gz


提示:-F也可以不用,与--master-data有些重复。
innodb引擎企业生产备份命令:推荐使用的


mysqldump -uroot -p123456 -A -B -F -R --master-data=2  --default-character-set=utf8  --events --single-transaction |gzip >/opt/all.sql.gz


提示:-F也可以不用。与--master-data有些重复。
--default-character-set=utf8 指定备份出的sql数据的字符集为utf8,当然,这个要提前知道线上的mysql库全部采用的字符集都是utf8,否则在恢复到线上的库会出现字符集不一致的问题出现乱码


提示:逻辑备份一般是数据迁移或者数据量很小时采用,逻辑备份采用的是数据导出的方式


2.1mysqldump库表等备份说明:


全备:


Mysqldump –uroot –p  -q –single-transaction –A >>all.sql


导出多个数据库:


Mysqldump –uroot –p  -q –single-transaction –B  test01 wjw01 test02 >test01_wjw01_test02.sql


导出一个test库的某张wjw01表:


Mysqldump –uroot –p  -q –single-transaction –b  test  wjw01>>test_wjw01.sql


只导出表结构:


Mysqldump –uroot –q –d  --skip-triggers


只需要导出储存过程时:


Mysqldump –uroot –q -Rtdn  --skip-triggers


只需要导出触发器:


Mysqldump –uroot –p –q –tdn –triggers


只需要导出事件:


Mysqldump –uroot –p –q –Etdn –skip-triggers


只需要导出数据:


Mysqldump –uroot –p –q  --skip-transaction --skip-triggers –t


要想在线上建立一台新的slave,则在master上执行如下命令:


Mysqldump –uroot –p –q –single-transaction –master-data=2 -A >>all.sql


提示:在mysql5.5里增加了一个新的参数:--dump-slave,使用该参数可在slave端dump数据,建立新的slave,其目的是为了防止对主库造成过大的压力。


在slave上执行以下命令:


Mysqldump  -uroot –p  -A –dump-slave=2 –q –single-transaction >/tmp/all.sql
查看alls.sql 里面会记录slave上的那个点。


注意:--dump-slave用于在slave上dump数据,建立新的slave


2.2Mysqldump优缺点以及使用场景


优点:
1、恢复简单,可以使用管道将他们输入到mysql
2、与存储引擎无关,因为是从MySQL服务器中提取数据而生成的,所以消除了底层数据存储的不同
3、有助于避免数据损坏。若磁盘驱动器有故障而要复制原始文件时,此时将得到一个损坏的备份
缺点:
1、 必须有数据库服务器完成逻辑工作,需要更多地cpu周期
2、 逻辑备份还原速度慢:需要MySQL加载和解释语句、转化存储格式、重建引擎


使用场景:对于MySQL数据库数据量不是很大的场景,建议使用。因为备份方便,简单灵活,易操作
当数据库特别的时候,比如30G以上时,备份MySQL数据时,也就建议不要采用mysqldump了,因为备份的时间以及恢复数据库的时间太长了,会对库表造成锁,对线上的业务影响还是比较大的


2.3简单介绍下MySQL全量备份+增量备份binlog


注意:生产上强烈建议MySQL开启Row格式来记录binlog,尽管这样对磁盘的IO以及磁盘的空间的消耗是比较大,但是和数据的安全性、完整性相比,磁盘资源那都是小事


全量备份脚本内容:


#!/bin/bash
#mysql全量备份脚本建议在slave从库上运行,从库slave上建议开启参数log_slave_updates=1
mkdir /backup
cd /backup
dateDIR=$(date +"%Y-%m-%d")
mkdir -p $dateDIR/data
path=/data/mysql/data
for n in `mysql -uroot -p123456 -e "show databases"|grep -v "Database"`
do
mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B $n|gzip >/backup/$dateDIR/data/${n}_$dateDIR.sql.gz
done
binlog_rm=$(tail -n 1 $path/mysql-bin.index|sed 's/.\///')
mysql -uroot -p123456 -e "purge binary logs to '$binlog_rm'"
说明:这个全量备份脚本,会在导出的时候锁住全局表,并且此时刷新产生一个新的bin-log,期间会产生写操作的等待,直到导出结束后才会写入新产生的bin-log文件,然后旧的bin-log 文件会被删除删除掉,一般在晚上2:00业务低峰期执行操作


进行本地bin-log增量备份


在执行完全量备份脚本后,就可以执行增量备份脚本了.
增量备份脚本思路很简单:


先mysqladmin -uroot -p123456 flush-logs 刷新新的binlog文件,此时mysq

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇xtrabackup热备和恢复MySQL 下一篇redis源码剖析之异步事件驱动框架

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目