冷备份(OFF, 慢, 时间点上恢复)
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最快和最安全的方法。
冷备份的优点:
1.是非常快速的备份方法(只需拷贝文件)
2.容易归档(简单拷贝即可)
3.容易恢复到某个时间点上(只需将文件再拷贝回去)
4.能与归档方法相结合,作数据库“最新状态”的恢复。
5.低度维护,高度安全。
冷备份的缺点:
1.单独使用时,只能提供到“某一时间点上”的恢复。
2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
4.不能按表或按用户恢复。
值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的 。而且在恢复后一定要把数据库文件的属组和属主改为mysql。
热备份 (ON,快)
热备份是在数据库运行的情况下,备份数据库操作的sql语句,当数据库发生问题时,可以重新执行一遍备份的sql语句。
热备份的优点:
1.可在表空间或数据文件级备份,备份时间短。
2.备份时数据库仍可使用。
3.可达到秒级恢复(恢复到某一时间点上)。
4.可对几乎所有数据库实体作恢复。
5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的缺点:
1.不能出错,否则后果严重。
2.若热备份不成功,所得结果不可用于时间点的恢复。
3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
逻辑备份:
–半热备 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软件(https://blog.csdn.net/mr_tia/article/details/81979689)
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命令拷贝