千家信息网

【MySQL】如何快速执行 binlog

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,【背景】维护mysql的时候,总会遇到数据库恢复的例子。如果把备份集恢复出来相对比较简单。然而如果遇到恢复到时间点的例子,把一个MySQL实例恢复出来之后,需要执行binlog做增量恢复。【方法一】常
千家信息网最后更新 2024年11月19日【MySQL】如何快速执行 binlog【背景】
维护mysql的时候,总会遇到数据库恢复的例子。如果把备份集恢复出来相对比较简单。然而如果遇到恢复到时间点的例子,把一个MySQL实例恢复出来之后,需要执行binlog做增量恢复。

【方法一】
常见的办法是用mysqlbinlog解析binlog,将解析出来的内容重定向到mysql命令行执行。
#start是mysql-bin后面的数字

点击(此处)折叠或打开

  1. i=start
  2. while [ $i -lt end ]
  3. do
  4. mysqlbinlog mysql-bin.$i | mysql -h 127.0.0.1 -P 4001 -uroot > 0550.log 2>&1
  5. done
这样做确实可以,而且row模式的binlog,也可以通过这种方式来执行。但是这样做有几个缺点
1. 如果解析出来的binlog在执行的过程中报错,如何处理?直接加 -f 强制执行吗?
2. 执行中途如何停下来,下次接着跑? 比如我想调整一下MySQL的参数(需要重启)后继续跑?
3. 只能单线程执行。而且mysqlbinlog解析再通过管道执行,有比较高的性能开销。

鉴于上面的缺点 下面隆重推出执行大量binlog的另外一种方法
【方法二】
我们都知道relay-log的内容和binlog的内容其实都是一样的,那么我是否能把binlog作为relay-log来执行呢?
答案是肯定的,屡试不爽。
详细的步骤:
0. 先把实例正常shutdown
1. 把binlog上传到mysql服务器本地磁盘,放到一个固定的目录,如/home/mysql/restore_1031
2. 如果是M-S 架构,则需要修改master.info,写入如下内容


点击(此处)折叠或打开

  1. cat > $BINLOG_DIR/master.info<
  2. 18
  3. dummy.binlog
  4. 0
  5. dummy.host
  6. repl
  7. repl
  8. 3306
  9. 60
  10. 0










  11. 0
  12. 0.000


  13. 0


  14. EOF
这里的内容需要符合规则,只要不指向slave 就好,避免应用slave的sql。
3. 修改slave-relay-log.info, 把$STAET, $START_BINLOG_POS替换成你需要开始执行的binlog的文件名和start-position

点击(此处)折叠或打开

  1. cat > $BINLOG_DIR/relay-log.info <<EOF
  2. /home/mysql/restore_1031/mysql-bin.$STAET
  3. $START_BINLOG_POS
  4. dummy-binlog.1
  5. 0
  6. EOF
4. 修改slave-relay-log.index, 把你需要执行的binlog列表都放进去。

点击(此处)折叠或打开

  1. #head slave-relay-log.index
  2. /home/mysql/restore_1031/mysql-bin.000588
  3. /home/mysql/restore_1031/mysql-bin.000589
  4. /home/mysql/restore_1031/mysql-bin.000590
  5. /home/mysql/restore_1031/mysql-bin.000591
  6. /home/mysql/restore_1031/mysql-bin.000592
5. 启动mysql实例,执行start slave sql_thread。

使用方法二的好处:
解决了上面用mysqlbinlog解析再管道给mysql执行的各个缺陷。
1 可以随时stop slave,调整一些参数,再start slave。
2 可以选择忽略一些slave执行报错。
3 如果你的mysql版本支持多线程复制,你还可以使用它 start slave multi_sql_thread 而且这么做性能更好,在一个数据恢复的场景中,

性能对比:
使用mysqlbinlog 加管道的方式,每秒只能执行3000不到IUD,
使用mysql原生slave执行的方式,每秒可以执行8000 IUD。
缺点:修改master.info slave-relay-log.info等文件,需要重启实例才会生效。

下一次,如果你需要恢复大量binlog,你会选择哪种方式?
内容 实例 方式 方法 性能 管道 缺点 例子 参数 数据 文件 线程 调整 选择 屡试不爽 中报 使用方法 到时 办法 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 花都软件开发商 网络安全法有修改吗 apex怎么看玩的什么服务器 我的世界如何制作服务器 数据库应用怎么创建 网络安全工程师和软件测试 石家庄商城软件开发价格 网络安全信息小组组长名单 服务器断电挂载磁盘错误 软件开发出来是卡磁带光盘吗 德惠品质网络技术咨询诚信合作 魔兽世界多少个服务器 计算机网络技术中专试卷 你眼中的软件开发 网络技术服务公司管理制度 特斯拉应用服务器中断原因 网络安全日志在哪看 信息指南数据库 百万钱包登陆显示服务器异常 投入品数据库 按键精如何搭建数据库 软件开发开公司技术培训 电子科技大学互联网暑期实践队 用友怎么用数据库账号登录 穿越火线指定服务器是什么意思 晋中软件开发价格多少 网络安全教育的 更换本地号码标记数据库什么意思 国内服务器试用 软件开发项目验收通知书
0