从MySQL 8.0.27开始,复制副本服务器现在默认启用多线程。Source
在此之前,如果复制失败,我们可以在show replica status\G;
的结果中得到Last_Error
的确切错误。现在,查询被替换为“Anonymous”:
协调器已停止,因为工作进程中存在错误。最近的错误为:工作进程1无法在主日志mysql-bin.031116,end_log_pos 81744270处执行事务'ANONYMOUS'。有关此故障或其他故障(如果有)的详细信息,请参阅错误日志和/或performance_schema.replication_appler_status_by_worker表。
表performance_schema.replication_applier_status_by_worker
也不包含确切的错误:
mysql> select * from performance_schema.replication_applier_status_by_worker\G
*************************** 1. row ***************************
CHANNEL_NAME:
WORKER_ID: 1
THREAD_ID: 128
SERVICE_STATE: ON
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_APPLIED_TRANSACTION: ANONYMOUS
LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 2021-11-16 11:35:04.414021
LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 2021-11-16 11:35:04.414021
LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP: 2021-11-16 11:35:04.416898
LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP: 2021-11-16 11:35:04.420018
APPLYING_TRANSACTION:
APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
APPLYING_TRANSACTION_START_APPLY_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_APPLIED_TRANSACTION_RETRIES_COUNT: 0
LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER: 0
LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE:
LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
APPLYING_TRANSACTION_RETRIES_COUNT: 0
APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER: 0
APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE:
APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
-- <I've removed 3 other similar blocks>
我确实可以在MySQL错误日志中找到错误(eidogg. "Could not execute Write_rows event on table db.table; Duplicate entry '16737' for key 'table.PRIMARY'"
),但不再是从查询中找到的。
是否有其他查询会给予我最后一个错误消息?或者有一个特定的设置来记录它并在show replica status\G;
下显示它?
1条答案
按热度按时间mftmpeh81#
实际上,你是对的。根据文档,一旦你使用MTR(多线程复制),SQL线程就是工作线程的协调者。下面是文档对它的说明:
如果复制副本是多线程的,则SQL线程是工作线程的协调器。在这种情况下,
Last_SQL_Error
字段显示的正是性能方案replication_applier_status_by_coordinator
表中Last_Error_Message
列所显示的内容。修改该字段值以表明其他工作线程中可能存在更多故障,这可以在显示每个工作线程状态的replication_applier_status_by_worker
表中看到。如果该表不可用,则可以使用副本错误日志。还应使用该日志或replication_applier_status_by_worker
表了解有关SHOW SLAVE STATUS
或协调器表显示的故障的详细信息。在这种情况下,您可以检查
performance_schema.replication_applier_status_by_coordinator
,然后通过performance_schema.replication_applier_status_by_worker
了解更多信息。否则,可以使用错误日志。