10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.5 kb
手册页(Zip)- 372.6 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

17.5.4处理复制故障

如果您已经按照说明操作了,但是复制设置没有工作,那么首先要做的是检查错误日志中的消息.许多用户在遇到问题后没有尽快这样做,从而浪费了时间。

如果您无法从错误日志中判断出问题是什么,请尝试以下技术:

  • 命令来验证源是否启用了二进制日志记录显示主机状态声明。默认情况下启用二进制日志记录。如果启用了二进制日志记录,位置是零。如果没有启用二进制日志记录,请验证您没有使用任何禁用二进制日志记录的设置运行源代码,例如——skip-log-bin选择。

  • 验证server_id在源和副本上启动时都设置了system变量,并且ID值在每个服务器上都是唯一的。

  • 验证副本是否正在运行。使用显示副本状态检查是否Replica_IO_Running而且Replica_SQL_Running值都是是的.如果不是,请验证启动副本服务器时使用的选项。例如,——skip-slave-start命令行选项,或者在MySQL 8.0.24中使用skip_slave_start系统变量,将阻止复制线程启动,直到您发出开始复制声明。

  • 如果副本正在运行,请检查副本是否与源端建立连接。使用显示PROCESSLIST,找到I/O(接收者)和SQL(应用程序)线程并检查它们状态列以查看它们显示的内容。看到17.2.3节,“复制线程”.如果接收线程状态为连接到主机,检查以下内容:

    • 验证源上复制用户的权限。

    • 检查源的主机名是否正确,并且使用了正确的端口连接到源。用于复制的端口与用于客户端网络通信的端口相同(默认为3306).对于主机名,请确保主机名解析为正确的IP地址。

    • 检查配置文件skip_networking源或副本上已启用系统变量以禁用组网。如果是,评论设置或删除它。

    • 如果源有防火墙或IP过滤配置,请确保用于MySQL的网口没有被过滤。

    • 检查您是否可以通过使用到达源traceroute/路径跟踪程序到达宿主。

  • 如果副本之前正在运行但已经停止,原因通常是某些在源上成功的语句在副本上失败了。如果您已经对源进行了适当的快照,并且从未在复制线程之外修改副本上的数据,那么这种情况就不会发生。如果副本意外停止,则是错误或您遇到了中描述的已知复制限制之一17.5.1节“复制特性和问题”.如果是bug,请看第17.5.5节,“如何报告复制错误或问题”,以了解如何举报。

  • 如果在源上成功的语句拒绝在副本上运行,如果通过删除副本的数据库并从源上复制一个新快照来进行完全的数据库重新同步是不可行的,那么尝试以下步骤:

    1. 确定副本上受影响的表是否与源表不同。试着理解这是怎么发生的。然后使副本的表与源的表相同并运行开始复制

    2. 如果前面的步骤不起作用或不适用,请尝试了解手动进行更新(如果需要)是否安全,然后忽略来自源的下一条语句。

    3. 如果你决定副本可以跳过源的下一个语句,发出以下语句:

      mysql> SET GLOBAL sql_slave_skip_counter =N;mysql> START SLAVE;或者从MySQL 8.0.26: MySQL > SET GLOBAL sql_replica_skip_counter =N;mysql>启动副本

      的价值N如果源的下一个语句不使用,应该是1吗AUTO_INCREMENTLAST_INSERT_ID ().否则,该值应为2。对于使用。的语句使用值2的原因AUTO_INCREMENTLAST_INSERT_ID ()就是在源的二进制日志中记录两个事件。

      另请参阅SET GLOBAL sql_slave_skip_counter语句

    4. 如果您确信副本开始时与源完全同步,并且没有人在复制线程之外更新所涉及的表,那么这种差异可能是错误的结果。如果您正在运行MySQL的最新版本,请报告该问题。如果您正在运行旧版本,请尝试升级到最新的生产版本,以确定问题是否仍然存在。