一些 MySQL 从站错误?

qua*_*nta 7 mysql replication mysql-5.5

  • 主版本:mysql-server-5.5.14-1.el5.remi
  • 从版本:Percona-XtraDB-Cluster-server-5.5.24-23.6.340
  • Binlog格式:基于ROW

我正在使用PRM为 MySQL 设置 HA。

有时,MySQL slave 因一些错误而停止:

Error executing row event: 'Table 'reportingdb.tvc_ads_tag_date' doesn't exist'
Run Code Online (Sandbox Code Playgroud)

[Warning] Slave SQL: Could not execute Update_rows event on table reportingdb.7k_banner_channel_tmp; Can't find record in '7k_banner_channel_tmp', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000854, end_log_pos 859094925, Error_code: 1032

120828 0:36:13 [Warning] Slave SQL: Could not execute Write_rows event on table reportingdb.7k_bookings_ver; Duplicate entry '1518' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.001022, end_log_pos 509479, Error_code: 1062

Error 'Error in list of partitions to DROP' on query. Default database: 'reportingdb'. Query: 'ALTER TABLE v3_ban_date_cpm7k DROP PARTITION pcurrent_201298'

并且mysql.sock缺少但 MySQL 进程仍然存在。由于以下错误,Pacemaker 无法重新启动:

InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
Run Code Online (Sandbox Code Playgroud)

我必须通过 TCP ( -h 127.0.0.1)登录并首先停止 MySQL,然后corosync再次启动 MySQL。

总之,问题是:

  1. 如何解决上述从站错误并防止将来发生?
  2. 为什么mysql.sock失踪了?如何让 Pacemaker 更好地处理这种情况?

小智 9

最好不要跳过数百个。只需一一循环:

until mysql -e "show slave status\G;" | grep -i "Slave_SQL_Running: Yes";do
  mysql -e "stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; start slave;";
  sleep 1;
done
Run Code Online (Sandbox Code Playgroud)


小智 4

只是停止奴隶使用

mysql> stop slave;
Run Code Online (Sandbox Code Playgroud)

然后将全局变量设置sql_slave_skip_counter1,例如:

mysql> set global sql_slave_skip_counter=1;
Run Code Online (Sandbox Code Playgroud)

然后启动从机:

mysql> start slave;
Run Code Online (Sandbox Code Playgroud)

然后检查从机是否工作:

mysql> show slave status \G;
Run Code Online (Sandbox Code Playgroud)

如果错误仍然存​​在,请设置更大的值,sql_slave_skip_counter例如:

mysql> set global sql_slave_skip_counter=1000;
Run Code Online (Sandbox Code Playgroud)

再次检查从站的状态。

如果您发现skip_sql从站状态中的值不为零,则再次停止从站并执行以下操作:

mysql> set global sql_slave_skip_counter=0;
mysql> start slave;
Run Code Online (Sandbox Code Playgroud)

  • 跳过从属计数器并不是一件可以掉以轻心的事情。只有当熟悉复制失败的语句的上下文并接受跳过它是从属设备上可接受的数据漂移时才可以使用它。但作为一般答案,这是破坏从属设备作为主设备的真实副本的完整性的一种方法 (6认同)