在主流的关系数据库里,备份方式按照备份时数据库的状态还有备份的方式可以化分为热备 冷备 逻辑备份 物理备份
逻辑备份:一定是热备(也叫半热备,因为会锁库)的,也就是数据库灾备份时是开着的,使用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命令拷贝