MySQL Replication Slave 使用 Bash Script 來忽略錯誤語法

MySQL Replication Slave 遇到 Duplicate entry ... 等等的錯誤,需要使用下述命令跳過:

  1. STOP SLAVE;
  2. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
  3. START SLAVE;

要寫成 Script 怎麼做呢?

閱讀全文〈MySQL Replication Slave 使用 Bash Script 來忽略錯誤語法〉

Nagios 加上 MySQL Slave Replication Status 檢查

MySQL Status (Monitor)是否異常可以靠自己寫程式檢查 + 解決,不過都已經架了一台 Nagios,就該把檢查的工作全部交給它,才不會東漏一隻、西漏一隻的。

註:此設定主要針對 MySQL 的 DB Slave

閱讀全文〈Nagios 加上 MySQL Slave Replication Status 檢查〉

MySQL Replication 遇到 Error 'You cannot 'ALTER' a log table 修復

MySQL Replication 遇到下述錯誤訊息: (mysql> show slave status \G # 簡化過的訊息如下)

Last_Errno: 1580
Last_Error: Error 'You cannot 'ALTER' a log table if logging is enabled' on query. Default database: 'mysql'. Query: 'ALTER
TABLE slow_log ...
Last_SQL_Errno: 1580
Last_SQL_Error: Error 'You cannot 'ALTER' a log table if logging is enabled' on query. Default database: 'mysql'. Query: 'ALTER TABLE slow_log ...

閱讀全文〈MySQL Replication 遇到 Error 'You cannot 'ALTER' a log table 修復〉

MySQL Replication 遇到 Got fatal error 1236 from master 修復

MySQL Replication 遇到 error 1236 就有點麻煩了~ 通常都是 binlog 出問題造成的~ (Master 或 Slave 的 binlog 壞掉都有可能造成此錯誤)

通常遇到這個狀況, 都是 Slave 的 binlog 壞掉, 就 Slave DB 的資料重倒來解決, 但是此次遇到是 Master 的 binlog 壞掉, 就有點苦了~

錯誤訊息如下:

  • Last_IO_Errno: 1236
  • Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.003583' at 45997491, the last event read from './mysql-bin.003583' at 4, the last byte read from './mysql-bin.003583' at 4.'

閱讀全文〈MySQL Replication 遇到 Got fatal error 1236 from master 修復〉

MySQL 砍不存在的 Table 造成 Replication 停擺解法

MySQL 於 Master 砍個不存在的 Table, Slave 沒有此 Table 的話, 就會造成 Replication 停擺, 會出現下述錯誤訊息: (有些不需要看到的訊息我先刪掉了)

Replicate_Wild_Ignore_Table:
Last_Errno: 1146
Last_Error: Error 'Table 'phpmyadmin.pma_table_info' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `phpmyadmin`.`pma_table_info` WHERE db_name  = 'test' AND table_name = 'item''
Skip_Counter: 1
Seconds_Behind_Master: NULL
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1146
Last_SQL_Error: Error 'Table 'phpmyadmin.pma_table_info' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `phpmyadmin`.`pma_table_info` WHERE db_name  = 'test' AND table_name = 'item''

上述發生的狀況是 Master 有 phpMyAdmin, Slave 沒有(所以 Slave 一開始同步也沒去建立 phpMyAdmin DB), 但是 phpMyAdmin 新版會建立自己的 DB, 於 phpMyAdmin 頁面上砍 Table 時, 他也要從自己的 pma_table_info 砍資料, 於是就造成 Replication 停擺, 就出現上述錯誤訊息.

閱讀全文〈MySQL 砍不存在的 Table 造成 Replication 停擺解法〉

MySQL 出現 Could not initialize master info structure 修復

於 MySQL 設定同步 Replication, 將下述命令拆成兩組輸入, 如下述:

  1. mysql> CHANGE MASTER TO MASTER_HOST='master.example.com', MASTER_USER='repl', MASTER_PASSWORD='repl_password';
  2. mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;

設定 Replication 完成後, start slave 無法啟動, 出現下述錯誤訊息:

Could not initialize master info structure, more error messages can be found in the MySQL error log

要怎麼解決呢?

閱讀全文〈MySQL 出現 Could not initialize master info structure 修復〉

MySQL 多台機器的多重 Replication 設定

MySQL 要設定 Replication 可以參考此篇: MySQL 設定 Replication (Master - Slave)

但是要設定多台機器一直持續(一層一層) Replication 下去, 預設是有無法達到的.

註:

  • Replication 從 A -> B 照上面設定即可.
  • 但是 Replication 要設定 A -> B -> C, 會發現到, A -> B 是可以動的, B -> C 也是可以動, 但是 A -> B -> C 不會動.(A -> C 的指令, 不會被傳過去)

閱讀全文〈MySQL 多台機器的多重 Replication 設定〉