1.全量备份和增量备份
1.1全量备份
就是对现有的数据进行全部备份,之前做的备份均可舍弃,以最新的全备为基点。
a.全备所有数据库
Innodb引擎:
[root@leader mysql]#mysqldump -uroot -proot -F -A -B --events --single-transaction --master-data=1|gzip>/data/backup/mysql_backup_$(date +%F).sql.gz
Myisam引擎:
[root@leader mysql]#mysqldump -uroot -proot -F -A -B --events --lock-all-tables --master-data=1|gzip >/data/backup/mysql_backup_$(date +%F).sql.gz
参数说明:
-F参数:刷新binlog
-A参数:备份所有库
-B参数:备份数据的时候添加建库建表等语句
--events参数相当于-E:在输出中包含转储数据库的事件调度器事件
--master-data参数:如果参数值等于1,在备份文件中添加change master语句在主从同步change master的时候就不用制定binlog日志文件以及更新的位置,如果等于2则不会添加change master语句。
--single-transaction参数:用于Inode引擎的备份
--lock-all-tables参数:锁表,它针对于MyIsam引擎的备份。在这种情况下日志之刷新一次因为所有的表的都是锁着的(允许并发插入数据)。如果想让你的转储和日志刷新发生在同一时刻,应该将--lock-all-tables参数、--master-data参数和flush-logs(即-F参数)一起使用,对于Innode这样的事务表,单事务表市更好的选择,以为它根本不用锁表。
b.备份指定数据库
Innodb引擎:
[root@leader mysql]mysqldump -uroot -proot -F -B --events --single-transaction --master-data=1 test|gzip >/data/backup/mysql_backup_$(date +%F).sql.gz
Myisam引擎:
[root@leader mysql]mysqldump -uroot -proot -F -B --events --lock-all-tables --master-data=1 test|gzip >/data/backup/mysql_backup_$(date +%F).sql.gz
1.2 增量备份
增量备份的数据是从上次全量备份之后更新的数据,对mysql来说binlog日志文件存储着增量备份的数据。增量备份可以按天备份,第二天做全备了,理论上前一天的备份就没用了。一般我们主服务器的binlog日志文件保持七天(受my.cnf配置文件中expire_logs_days控制),备份服务器上增量备份一般保持180天。全量被份和增量备份分为两种情况,第一种情况就是按天备份一天做一次全量备份,每天零点之前做增量备份,零点之后做全量备份;第二种情况就是按天全备也可以按周全备,一周做一次全备每天做一次增量备份。
按天全备的优点:恢复时间短、维护成本低
缺点:占用空间多,占用系统资源多,经常锁表影响用户体验。
按周全备的优点:占用空间少,占用系统资源少用户体验好一些。
缺点:恢复麻烦维护正本高,时间长。
企业场景全备和增量的频率是怎么做的呢?
(1)中小公司,全量一般是每天一次,业务流量低谷执行全备,执行前需要锁表。
(2)单台数据库没有做主从同步,如何增量?用rsync(配合定时任务频率大点,或者inotify和主从复制)把所有binlog备份到远程服务器,尽量做主从复制。
rsync –avz /data/3306/mysql-bin.000* rsync_backup@192.168.1.116::backup –-password-file=/etc/rsync.password
(3)大公司周备,每周六00点一次全量,下周日-下周六00点前都是增量。
优点:节省备份时间,减小备份压力,缺点:增量的binlog文件副本太多,还原会很麻烦。
(4)一主多从,会有一个从库做备份,延迟同步。
Mysql的mysqldump备份什么时候派上用场?
(1)迁移或者升级数据库时。
(2)增加从库的时候,因为硬件或特殊异常情况,主库或从库宕机,主从可以切换,无需备份。把其中一个同步最快的切换为主库即可。
(3)人为的DDL、DML语句,主从库没办法了,所有库都会执行,此时需要备份。
(4)跨机房灾备,需备份拷贝走数据。
2.MySQL增量恢复必备条件
主库和从库开启binlog
[root@leader mysql]# egrep "\[mysqld]|log-bin" /etc/my.cnf
[mysqld]
log-bin = /var/log/mysql/mysql-bin.log
小结:增量恢复的条件:
存在一份全备数据和全备之后的某一时刻到出问题时刻的所有增量binlog文件备份。
3.全备即增量备份数据恢复思想
恢复思想就是先找到发生故障的原因,谁在什么时候做了什么操作,检查是不是这个操作导致数据库故障。之后尽量停止数据库对外访问,先备份0:00到十点更新的数据binlog日志文件,刷新binlog。第一步先恢复全备,第二步增量恢复0:00到10:00这个时间段的数据。