1.备份策略:
1)按天备份:
优点:恢复时间短,维护成本低
缺点:占用空间大,占用资源多(比如说老是要锁表)
2)按周备份:
优点:占用空间小,资源占用低
缺点:维护成本大
2.增量恢复的场景
1)数据库迁移,或者跨机房灾备。
2)增加从库。
3)认为操作失误,从库也没办法。
3.案例(可以停机,但是不能丢数据)
1)增量,全备开启
[root@db ~]# grep log-bin /etc/my.cnf
log-bin=mysql-bin
mysqldump -uroot -p111111 -A -B --single-transaction -F --master-data=2 --events|gzip >/backup/all.sql.gz
2)模拟误操作
mysql> drop database oldboy;
3)模拟误操作后的用户写入
insert into oldboy_utf8.test(name) values('dirty1'),('dirty2');
mysqladmin -uroot -p111111 flush-logs
insert into oldboy_utf8.test(name) values('dirty1'),('dirty2');
...
4)发现问题,根据问题时间段,定位出问题的binlog点。
[root@db ~]# ll /application/mysql/data/ |grep mysql-bin
-rw-rw----. 1 mysql mysql 544 11月 8 16:44 mysql-bin.000001
-rw-rw----. 1 mysql mysql 486 11月 11 21:32 mysql-bin.000035
-rw-rw----. 1 mysql mysql 126 11月 12 15:13 mysql-bin.000036
-rw-rw----. 1 mysql mysql 150 11月 12 16:29 mysql-bin.000037
-rw-rw----. 1 mysql mysql 2516 11月 12 16:53 mysql-bin.000038
-rw-rw----. 1 mysql mysql 1422 11月 12 16:57 mysql-bin.000039
-rw-rw----. 1 mysql mysql 998 11月 12 16:58 mysql-bin.000040
-rw-rw----. 1 mysql mysql 107 11月 12 16:58 mysql-bin.000041
-rw-rw----. 1 mysql mysql 779 11月 12 16:58 mysql-bin.index
mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000038|grep drop
drop database oldboy
5)准备全备和增量。
#准备全备
cd /backup
[root@db ~]# gunzip /backup/all.sql.gz
[root@db ~]# head -50 /backup/all.sql|grep -i "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000038', MASTER_LOG_POS=107;
#对外停止写,刷新binlog(不停的话要丢数据42,43等log)
配置防火墙,拒绝客户端连接(略)。
mysql> set global read_only = ON;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%read_only%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysqladmin -uroot -p111111 flush-logs
#准备增量
mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000038 --start-position=107 > /backup/bin.sql
mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000039 >> /backup/bin.sql
mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000040 >> /backup/bin.sql
mysqlbinlog --no-defaults /application/mysql/data/mysql-bin.000041 >> /backup/bin.sql
vim /backup/bin.sql 删除错误语句
6)开始恢复数据
mysql -uroot -p111111</backup/all.sql
mysql -uroot -p111111</backup/bin.sql
恢复对外写:
mysql> set global read_only = OFF;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%read_only%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only | OFF |
+---------------+-------+
1 row in set (0.00 sec)