Mysql数据库相关

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

2020-06-08  本文已影响0人  wwqGrowing

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恢复数据详细例子
上一篇下一篇

猜你喜欢

热点阅读