• mysql备份恢复(一)


     

    mysqldump备份所有库

    mysqldump -uroot -p -A -R --single-transaction >dump.sql

    mysqldump备份指定库

    mysqldump -uroot -p -B zhh -R --single-transaction >zhh.sql

    恢复数据库

    mysql -uroot  -p    < zhh.sql

    或者

    mysql> source /root/zhh.sql

    mysqldump 不支持增量备份,若要实现增量备份 需要开启binlog。binlog会记录 所有对数据库更改的操作。

    mysql开启binglog

    vim /etc/my.cnf

    server-id = 1
    log-bin = mysql-bin
    binlog_format = ROW

    完整备份

    mysqldump -uroot -p -R --single-transaction --flush-logs --master-data=2  -B  zhh > zhh.sql

    -R   导出存储过程和自定义函数--routines

    --single-transaction  保证导出的一致性

    --flush-logs     关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1

    --master-data   将当前服务器的binlog的位置和文件名追加到输出文件 相当于执行 show master status,状态(file,position)的值。

                             等于1 输出change master 命令   等于2  输出change master命令 并在前面加注释

    vim zhh.sql

    ......
    
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
    
    ......
    
    ...

    模拟备份完后新 更改一些数据

    打开一张表查看现有数据

    删除一条数据

    新增一些数据

    现在模拟数据库出现故障

    mysqldump 做了完整备份 zhh.sql。但备份之后更新的数据需要通过binlog 做增量恢复

    1  恢复完整备份

    [root@zhh73 mysql]# mysql -uroot -p < zhh.sql 
    Enter password: 

    查看rt_airport_device表

     没有新增的数据

    2 通过 binlog 恢复数据

    查看binlog的内容

    binlog 会对存储的内容进行base64编码的处理  ,通过base64解码  来查看binlog内容

    [root@zhh73 mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000002 > b.sql

     binlog会存储具体的sql语句  传入的参数通过@ 进行存储

    在binlog里 找到最后的删除库的语句位置,和最近的position位置

     

    基于二进制日志恢复 可以通过时间点 和position位置 两种方式

    1)通过position位置来恢复

    离 drop database zhh 最近的两个position是1669 和1580 。我们需要的是drop database zhh 语句 之前的所有操作。 所以 positon点里如果包含了drop database zhh 相当于通过这个点还原的数据 已经删除了zhh库

    所以查看这两个点的sql语句,不含drop语句的 才是我们需要还原的位置。

    root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1669 >> bb.sql
    [root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1580 >> cc.sql
    [root@zhh73 mysql]# grep "drop database zhh" bb.sql cc.sql 
    bb.sql:drop database zhh

    bb.sql里含有drop语句  说明我们要还原的positon点是1580

    还原数据

    [root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1580 |mysql -uroot -p
    Enter password: 

    再查看rt_airport_device表 数据已增量恢复

    2)通过时间点来恢复

    [root@zhh73 mysql]# mysqlbinlog --stop-datetime='2021-10-21 19:19:59' /var/lib/mysql/mysql-bin.000002 |mysql -uroot -p
    Enter password: 

    查看binlog日志   show binary  logs;

    查看binlog文件内容  show binlog events in 'mysql-bin-000002' G

    参考 https://www.cnblogs.com/chenmh/p/5300370.html

  • 相关阅读:
    oracle数据表批量插入查询到的数据
    Eclipse EXCEPTION_ACCESS_VIOLATION 崩溃解决办法
    js获取当前URL、主机端口、网络协议、请求参数
    java.util.ConcurrentModificationException异常分析
    Java跨平台调接口同时更新同一条数据发生阻塞
    centos7+mariadb+防火墙,允许远程
    centos7安装JDK
    centos7安装python3
    VMware 中安装KVM,模块不加载
    C++程序结构.1
  • 原文地址:https://www.cnblogs.com/xihuxiangri/p/15433590.html
Copyright © 2020-2023  润新知