MYSQL的binlog如何恢复?
时间:2023-06-04 23:43:53浏览:1620
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标签限制搜索引擎对网站的抓取收录
- Linux文章
- PHP文章
- 随机文章
- Linux中的find(-atime...
- mysql的expire_logs_...
- PHP 扩展 libsodium s...
- Linux下利用find和cp实现筛...
- 使用mysqldump命令导出备份m...
- Linux系统如何设置开机自动运行脚...
- Linux上实现秒级执行的定时任务
- shell echo -e 颜色输出
- Linux下通过grep查找指定的进...
- 解决执行脚本报syntax erro...
发表评论
昵称: 验证码: