当前位置:首页 > 程序&理念 >

MYSQL的binlog如何恢复?

时间:2023-06-04 23:43:53浏览:994 转载

MySQL的二进制binlog对于生产环境非常重要,主要用于两种场合,一种是主从复制,另外一种是数据恢复。通过语句show variables like 'log_bin';可以查看是否开启:


要先登陆才能执行
登陆办法:

cd /www/server/mysql/bin

mysql -h127.0.0.1 -uroot -p123456  123456要替换成真实MYSQL的root密码


通过show binary logs;命令可以查看MySQL服务器上的binlog文件:


一般bin-log日志文件不能打开查看的,需要用到mysql的工具进行。


当需要恢复数据时,为了防止恢复数据后影响最新业务,需要执行flush logs,产生一个新的binlog文件,此时旧的binlog文件不会再有写入;

查看binlog可以使用 mysql> show binlog events in 'mysql-bin.000346'\G; 查看
打开是类似这样的

但是测试发现文件一般比较大,都看不完整

所以通过mysqlbinlog将binlog转为sql,以方便查询具体位置

直接在ssh里执行,不需要登录到mysql下执行

/www/server/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v /www/server/data/mysql-bin.000346  --database=testdb > /www/testdb.sql;

>实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;

>也可以换成--result-file=

即下面这样:

/www/server/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v /www/server/data/mysql-bin.000346  --database=testdb --result-file=/www/testdb.sql;

因为数据库表中有些记录里面可能存在字段值被base64编码过,所以需要加上 --base64-output=DECODE-ROWS -v  否则,含base64编码过的字段的sql都会被解析成类似乱码的东西

--database是只输出某一个库的记录,因为一般来说一个服务器不止一个库

为了更精确的只输出,还可以指定时间范围

--start-datetime="2023-6-4 16:00:00" 起始时间点
--stop-datetime="2023-6-4 18:00:00" 结束时间点

/www/server/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v --start-datetime="2023-06-04 16:00:00" --stop-datetime="2023-06-04 18:00:00" /www/server/data/mysql-bin.000346  --database=testdb --result-file=/www/testdb.sql;


或者你能知道pos点,通过show binlog events in 'mysql-bin.000346'\G; 看到了需要恢复的pos点,还可以指定pos的开始和结束

--start-position=18000 起始pos点
--stop-position=18067 结束pos点


恢复命令的语法格式:mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名


-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
--read-from-remote-server 从某个MySQL服务器上读取binlog日志


mysqlbinlog -v /www/server/data/mysql-bin.000346 --start-position=18000 --stop-position=18067 | mysql -uroot -p123456


/www/server/data/mysql-bin.000346 要操作binlog文件
--start-position=18000                      数据恢复的起始位置
--stop-position=18067 数据恢复的结束位置
mysql -uroot -p123456                 数据恢复需要登录数据库


参考连接:

https://blog.csdn.net/DreamEhome/article/details/130010601
https://blog.csdn.net/m0_58016522/article/details/121602138
https://www.fengnayun.com/news/content/238133.html
https://www.mryunwei.com/131146.html
https://www.freesion.com/article/6670568901/
https://www.cnblogs.com/junyi-bk/p/12059750.html
https://blog.csdn.net/weixin_49472648/article/details/125824697



上一篇:MySQL binlog最大编号是多少?
下一篇:利用html标签限制搜索引擎对网站的抓取收录

发表评论

昵称:  验证码:

关于博主

博主

博主:BlueCode

职业:web程序

简介:2002年开始一直从事Web制作,网站运营,会PHP+MYSQL ASP+MSSQL,微信开发