在主流的关系数据库里,备份方式按照备份时数据库的状态还有备份的方式可以化分为热备 冷备 逻辑备份 物理备份

逻辑备份:一定是热备(也叫半热备,因为会锁库)的,也就是数据库灾备份时是开着的,使用mysqldump的命令

物理备份:分为热备和冷备,这两个其实本质上没有差别,都是通过对数据文件的拷贝实现

物—热:采用xtrabackup这个第三方的软件实现

物-冷:关闭数据库,然后使用cp命令

Mysql5.7的全库导入之后,需要刷新权限表,也就是flush privileges, 不然数据库记录的还是原来的账号和密码

Mysql的二进制日志格式为row,statement,mixed三种,5.7默认是row,5.6默认是statement,主从建议采用row

Row记录的格式变化的块,如果想看到原始的sql语句,可以这样转换日志


逻辑备份:

–半热备 mysqldump

备份全库

mysqldump -uroot -predhat-S /var/tmp/mysql.sock --all-databases> /var/tmp/all.sql

恢复

mysql -uroot -predhat < /var/tmp/all.sql

备份多个库

mysqldump -uroot -predhat-S /var/tmp/mysql.sock --databases db01 db02 db03 > /var/tmp/db01-03.sql

mysql -uroot -predhat </var/tmp/db01-03.sql

mysqldump --databases discuz >/var/tmp/discuz.sql

mysqldump --databases ucenter >/var/tmp/ucenter.sql

备份多张表

mysqldump -uroot -predhat -S/var/tmp/mysql.sock db01 t1 t2 t3 >/var/tmp/db01.t1-2.sql

mysql -uroot -predhat db01 </var/tmp/db01.t1-2.sql

–完全备份(mysqldump)+增量备份(binlog)

1、数据总量不大,一般在几百M的数据可以使用这种方法

2、如果数据量大太,每次备份锁表的时间会比较长,这样就可能影响上层应用正常使用

完全备份(mysqldump) — 先完整备份,然后在截断日志(锁表)并查出当前的bin-log日志以及起始偏移量

–flush logs --截断日志

–master-data --锁表之后记录bin-log日志与起始偏移量=2

1.完整全库全表

2.截断日志

3.锁表之后记录bin-log日志与起始偏移量

mysqldump
–start-position
–stop-position
–start-datetime
–stop-dateteime
mysqldump -uroot -predhat -S/var/tmp/mysql.sock --flush-logs --master-data=2 --all-databases >/var/tmp/all-new2.sql
vim /var/tmp/all-new2.sql

– CHANGE MASTER TO MASTER_LOG_FILE=‘mysqld.000028’,MASTER_LOG_POS=107; 表之后记录bin-log日志与起始偏移量

丢失增量备份的数据 —记录一个故障点的时间戳 ,然后通过查询完备中记录bin-log日志与起始偏移量文件

vim /var/tmp/all-new2.sql

– CHANGE MASTER TOMASTER_LOG_FILE=‘mysqld.000029’, MASTER_LOG_POS=107;

然后通过起始偏移量与结束时间戳来恢复

mysqlbinlog/mysql/logs/mysqld.000029 --start-position=107 --stop-datetime=“2015-03-19 14:22:01” | mysql -uroot -predhat

物理备份:

1首先安装xtrabackup软件

2全备

innobackupex --user=root–password=mysqldabao -S /ssd_data/dabaoji.data/mysql.sock --parallel=3–basedir=/usr/local/mysql --datadir=/ssd_data/dabaoji.data /ssd_data/backup/

3还原

先把备份集的redo日志应用到备份集的数据文件中去

innobackupex --apply-log /ssd_data/backup/2017-09-07_11-11-04

再还原innobackupex–defaults-file=/ssd_data/my.cnf --copy-back/ssd_data/backup/2017-09-07_11-11-04/ 其中这个my.cnf文件是告诉这个工具,要把数据文件还原到哪个目录,所以这个配置文件里面的内容可以只有[mysqld] 和datadir = 目录 这两行就可以

4改变还原后的数据目录的属组属主 chown -Rmysql:mysql 路径

5打开数据库(完成了)

6如果原来的数据库有新增的数据,可以通过应用二进制日志来实现数据一致

首先关了数据库的二进制日志功能,再开启数据库

然后查看xtrabackup备份集里的xtrabackup_info这个文件,找到结束的二进制日志点,然后从这个点应用二进制日志

/usr/local/mysql/bin/mysqlbinlog–start-position=20891 /ssd_data/backup/binlog/mysql-bin.000011|/usr/local/mysql/bin/mysql -uroot -pmysqldabao -S/ssd_data/dabaoji.data/mysql.sock

应用二进制日志可以根据时间,可以根据某个二进制日志的记录点,不指定其实时间,就从头开始,不指定结束位置,就全部应用完

指定点的格式:–start-position–stop-position

mysqlbinlog–start-position=1 --stop-position=3 /ssd_data/backup/binlog/mysql-bin.000011|/usr/local/mysql/bin/mysql -uroot -pmysqldabao -S/ssd_data/dabaoji.data/mysql.sock

指定时间的格式:–start-datetime–stop-datetime

/usr/bin/mysqlbinlog–start-datetime=“2016-09-25 21:57:19”–stop-datetime=“2016-09-25 21:58:41” /var/lib/mysql/mysql-bin.000003 | /usr/bin/mysql -uroot -p123456

增量备份(有两种,一种就是每次增备都是从全备开始 另一种是从上一次的增备开始,这个一般是生产环境所选择的)

现在结合全备和增备结合(注意/etc/my.cnf的影响:

1首先进行一次全备 innobackupex–user=root --password=mysqldabao -S /ssd_data/dabaoji.data/mysql.sock–parallel=3 --basedir=/usr/local/mysql–datadir=/ssd_data/dabaoji.data /ssd_data/backup/

2跟着进行第一次增备(第一次增备从全备开始增备)innobackupex --user=root --password=mysqldabao -S /ssd_data/dabaoji.data/mysql.sock–incremental /ssd_data/backup/–incremental-basedir=/ssd_data/backup/2017-09-08_12-32-45/

3然后进行第二次增备(这个从第一次增备后开始增备)innobackupex --user=root --password=mysqldabao -S/ssd_data/dabaoji.data/mysql.sock --incremental /ssd_data/backup/ --incremental-basedir=/ssd_data/backup/2017-09-08_12-33-57/

4还原:首先对全备进行一次prepare,这个的prepare要加一个–read-only的参数

innobackupex --apply-log --redo-only/ssd_data/backup/2017-09-08_12-32-45/

5对第一次增备进行prepare并合并到第一次全备中去

innobackupex --apply-log --redo-only/ssd_data/backup/2017-09-08_12-32-45/–incremental-dir=/ssd_data/backup/2017-09-08_12-33-57/

6对第二次增备进行prepare并合并到刚刚已经把第一次增备合并了的全备中去

innobackupex --apply-log --redo-only/ssd_data/backup/2017-09-08_12-32-45/–incremental-dir=/ssd_data/backup/2017-09-08_12-38-01/

7把这个合并了第一次第二次增备了的全备复制回数据目录

innobackupex–defaults-file=/ssd_data/my.cnf --copy-back/ssd_data/backup/2017-09-08_12-32-45/

8修改这个数据目录的属组属主

9启动数据库

物-冷 这个没什么好说的,就是直接关了数据库,然后对数据库文件整个用cp命令拷贝