web-dev-qa-db-ja.com

いくつかのMySQLスレーブエラー?

  • マスターバージョン:mysql-server-5.5.14-1.el5.remi
  • スレーブバージョン:Percona-XtraDB-Cluster-server-5.5.24-23.6.340
  • Binlog形式:行ベース

MySQLのHAをセットアップするために [〜#〜] prm [〜#〜] を使用しています。

時々、MySQLスレーブはいくつかのエラーで停止しました:

Error executing row event: 'Table 'reportingdb.tvc_ads_tag_date' doesn't exist'

[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.

TCP(-h 127.0.0.1)MySQLを最初に停止してから、corosyncにMySQLを再起動させます。

要約すると、問題は次のとおりです。

  1. 上記のスレーブエラーを解決して、将来発生しないようにするにはどうすればよいですか?
  2. なぜmysql.sock行方不明ですか? Pacemakerでこの状況をより適切に処理するにはどうすればよいですか?
5
quanta

何百も飛ばさない方がいい。 1つずつループするだけです。

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
8
Zaur

使用しているスレーブを停止するだけです

mysql> stop slave;

次に、グローバル変数sql_slave_skip_counter1に設定します。次に例を示します。

mysql> set global sql_slave_skip_counter=1;

次に、スレーブを起動します。

mysql> start slave;

次に、スレーブが機能しているかどうかを確認します。

mysql> show slave status \G;

それでもエラーが解決しない場合は、sql_slave_skip_counterに次のように大きな値を設定します。

mysql> set global sql_slave_skip_counter=1000;

もう一度、スレーブのステータスを確認します。

スレーブステータスでskip_sqlの値がゼロ以外であることがわかった場合は、スレーブを再度停止して次のようにします。

mysql> set global sql_slave_skip_counter=0;
mysql> start slave;
4
vijay