美文网首页Mysql数据库相关
mysql 开启binlog,并恢复数据操作

mysql 开启binlog,并恢复数据操作

作者: wwqGrowing | 来源:发表于2020-06-08 11:15 被阅读0次

    binlog是二进制日志文件,用于记录mysql的数据变更,数据在恢复的时候binlog日志能起到很大的作用。mysql的主从复制就是利用的binlog原理

    本文目录

    一、开启binlog
    二、测试数据恢复

    一、开启binlog

    1、登录mysql之后使用下面的命令查看是否开启binlog

    show variables like 'log_%';
    

    2、编辑配置文件

    vi /etc/my.cnf
    

    3、在mysqld下面加入以下内容

    `server_id=2`
    `log_bin = mysql-bin`
    `binlog_format = ROW`
    `expire_logs_days = 30`
    
    

    4、重启mysql服务

    systemctl restart mysqld
    

    5、再次使用命令show variables like 'log_%';进行查看,为ON表明binlog开启

    image

    6、binlog日志文件存放路径为

    /var/lib/mysql

    7、再该路径下会生成mysql-bin.000001 mysql-bin.000002这样的文件

    二、测试数据恢复

    1、准备测试数据


    模拟数据库的备份

    查看现在的binlog的日志
    show master status;

    数据库会在每天凌晨4点进行一次完全备份的定时计划任务。这里手动执行下,将数据库备份。备份到/home/wg/下
    sudo mysqldump -uroot -p -B -F -R -x --master-data=2 my_test | gzip > ./bak_$(date +%F).sql.gz
    注意 date后面的空格。
    参数说明:
    -B:指定数据库
    -F:刷新日志
    -R:备份存储过程等
    -x:锁表
    --master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

    删除数据库表

    drop table test1;

    查看binlog日志,在/var/lib/mysql目录下,如下命令查看:

    show binlog events in 'mysql-bin.000001';
    

    通过分析,造成数据库破坏的pos点区间是介于 387--1393 之间(这是按照日志区间的pos节点算的)。所以只要恢复到1328就可以了 后面的1393是操作drop的时间节点
    恢复语法
    恢复命令的语法格式:
    mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
    常用参数选项解释:
    --start-position=387 起始pos点
    --stop-position=1393 结束pos点
    --start-datetime="2020-06-01 12:04:08" 起始时间点
    --stop-datetime="2020-06-01 12:49:46" 结束时间点
    --database=my_test 指定只恢复my_test数据库(一台主机上往往有多个数据库,只限本地log日志)

    我们只需要从创建表节点387,恢复到drop之前就好了,完整的命令如下:

    sudo mysqlbinlog mysql-bin.000001 --start-position 387  --stop-position 1393 | sudo mysql -uroot -p my_test
    

    到此,恢复完成

    参考:

    1.利用binlog日志恢复mysql数据

    1. mysql利用binlog恢复数据详细例子

    相关文章

      网友评论

        本文标题:mysql 开启binlog,并恢复数据操作

        本文链接:https://www.haomeiwen.com/subject/mnxnzhtx.html