备份实战案例2

(1)特点

  1. 自动记录日志position位置
  2. 锁表机制

(2)语法

  1. 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 #备份触发器
  1. 帮助 // mysqldump --help

(2)备份实战

  1. 准备两套root密码
  • QianFeng@123
  • QianFeng@1234 // 备用
  1. 准备库1
  • 请清理掉之前的test库。实验后半部分,需要继续创建test库,避免混淆。
  • testdb1.t1
  1. 执行备份
  • [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 注释掉日

    志记录

  1. 观察备份细节
  • 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行

  1. 备份后的,数据变更行为
  • 在testdb2.t2 中插入数据1,2,3;
    创testdb3库
    切断二进制日志(重启数据库)

    在testdb2.t2 中插入数据4;
    删testdb3库
    在testdb2.t2 中插入数据5;

(3)恢复实战

  1. 备份二进制日志文件
  • cp /var/lib/mysql/bin ~
  1. 停止数据库
  • systemctl stop mysqld
  1. 清理环境
  • rm -rf /var/lib/mysql/*
  1. 启动数据库
  • systemctl start mysqld
  • grep ‘password’ /var/log/mysqld.log // 找密码,再改一下密码。请使用备用密码
  • mysqladmin -uroot -p’Kyzw;u2dq<mh’ password ‘QianFeng@1234’
  1. mysql恢复数据
  • mysql -p’QianFeng@1234’ < /backup/2016-12-08-04-mysql-all.sql
  • mysql -p’QianFeng@1234’ -e ‘flush privileges’
  1. 二进制日志恢复
  • 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’ //注意后续有多少日志,要跟多少日志名字。

  1. 观察数据
  • 是否完整
  1. 误删除的问题
  • 如何保留testdb3库

    [root@localhost ~]#mysqlbinlog localhost-bin.00004 …005…006… > 1.txt

    删除1.txt中不需要的at(比如test3库是误操作)

    cat 1.txt | mysql -p’QianFeng@123’

  1. 关于数据恢复时的多余日志
  • 方法一

    每次还原数据库都会增加日志的体积。但这些都是还原操作。恢复数据库的日志占用了存储空间。

    mysql> set sql_log_bin =0

    再mysql> source /backup/*.sql // 二进制日志并没有发生变化。

  • 方法2

    在备份文件中,加入关闭二进制日志。

©著作权归作者所有:来自51CTO博客作者青云文质的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 备份实战案例1
  2. DLC
  3. 【DB笔试面试482】如何查询SCHEDULER JOB的运行日志?
  4. 【等待事件】日志类 等待事件(4.4)--log buffer space(日志缓冲空间
  5. 【等待事件】日志类 等待事件(4.5)--log file sequential read
  6. elk7.4+filebeat收集日志
  7. 单个logstash文件收集多个filebeat日志
  8. ssh登录日志收集
  9. 【DG】怎么使用Data Pump备份物理备库

随机推荐

  1. 用原生js实现数字自相加
  2. 将对象值传递给指令而不是任何其他数据变
  3. 使用angularjs添加包含事件的新标记
  4. 使用倒计时进度条退出
  5. jQuery Slimbox没有正确请求文件
  6. 如何通过javascript显示隐藏的div?
  7. Javascript对象
  8. 在jQuery中使用css transform属性
  9. 根据用户时区显示当地时间 php+javascrip
  10. 从两个数组生成JSON