2、备份实战案例2
(1)特点
- 自动记录日志position位置
- 锁表机制
(2)语法
- mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql // -h可以不输入
- -A, --all-databases 所有库
- school 数据库名
- school stu_info t1 是指school数据库的表stu_info、t1
- -B, --databases bbs test mysql 多个数据库
- --single-transaction #InnoDB 一致性 服务可用性?
- --master-data=1|2 #该选项将会记录binlog的日志位置与文件名并追加到文件中,或添加注释
- --opt #同时启动各种高级选项
- -R, --routines #备份存储过程和存储函数
- -F, --flush-logs #备份之前刷新日志,截断日志。备份之后新binlog。
- --triggers #备份触发器
- 帮助 // mysqldump --help
(2)备份实战
- 准备两套root密码
- QianFeng@123
- QianFeng@1234 // 备用
- 准备库1
- 请清理掉之前的test库。实验后半部分,需要继续创建test库,避免混淆。
- testdb1.t1
- 执行备份
-
[root@localhost ~]# mysqldump -p'QianFeng@123' \
--all-databases --single-transaction \
--master-data=2 \
--flush-logs \
(>)/backup/
date +%F-%H
-mysql-all.sql --- 括号无用 // master-data=2 注释掉日志记录
- 观察备份细节
-
vim /backup/2016-11-25-14-mysql-all.sql
-
LOCK TABLES
user
WRITE; // 观察各种锁机制,用来保证数据一致性22 CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000004', MASTER_LOG_POS=154; // 二进制日志截断位置。第22行
- 备份后的,数据变更行为
-
在testdb2.t2 中插入数据1,2,3; 创testdb3库 切断二进制日志(重启数据库)
在testdb2.t2 中插入数据4; 删testdb3库 在testdb2.t2 中插入数据5;
(3)恢复实战
- 备份二进制日志文件
- cp /var/lib/mysql/bin ~
- 停止数据库
- systemctl stop mysqld
- 清理环境
- rm -rf /var/lib/mysql/*
- 启动数据库
- systemctl start mysqld
- grep 'password' /var/log/mysqld.log // 找密码,再改一下密码。请使用备用密码
- mysqladmin -uroot -p'Kyzw;u2dq<mh' password 'QianFeng@1234'
- mysql恢复数据
- mysql -p'QianFeng@1234' < /backup/2016-12-08-04-mysql-all.sql
- mysql -p'QianFeng@1234' -e 'flush privileges'
- 二进制日志恢复
-
vim /backup/2016-11-25-14-mysql-all.sql
-
CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.0000010', MASTER_LOG_POS=154; // 语法
-
mysqlbinlog localhost-bin.000002 localhost-bin.000003 --start-position=154 | mysql -p'QianFeng@123' //注意后续有多少日志,要跟多少日志名字。
- 观察数据
- 是否完整
- 误删除的问题
-
如何保留testdb3库
[root@localhost ~]#mysqlbinlog localhost-bin.00004 ......005.....006...... > 1.txt
删除1.txt中不需要的at(比如test3库是误操作)
cat 1.txt | mysql -p'QianFeng@123'
- 关于数据恢复时的多余日志
-
方法一
每次还原数据库都会增加日志的体积。但这些都是还原操作。恢复数据库的日志占用了存储空间。
mysql> set sql_log_bin =0
再mysql> source /backup/*.sql // 二进制日志并没有发生变化。
-
方法2
在备份文件中,加入关闭二进制日志。