Mysql

mysql複製不工作

  • February 4, 2013

我有兩台伺服器 A 和 BI 試圖在兩台伺服器之間為固定 dbs DBA 和 DBB 設置複製,但它不起作用我的配置表沒有得到更新,為什麼?

Master:(/etc/my.cnf)
server-id=4233865
log-bin=mysqld-bin
log-error=mysql-bin.err
relay-log=mysqld-relay-bin

Slave:(/etc/my.cnf)
symbolic-links=0
server-id=1359390567
relay-log-index = slave-relay-bin.index
relay-log   = slave-relay-bin
replicate-do-db=DBA,DBB

顯示從站狀態

Slave_IO_State  Waiting for master to send event
Master_Host     10.0.0.163
Master_User     repl
Master_Port     3306
Connect_Retry   60
Master_Log_File     mysqld-bin.000007
Read_Master_Log_Pos     770800
Relay_Log_File  slave-relay-bin.000017
Relay_Log_Pos   770947
Relay_Master_Log_File   mysqld-bin.000007
Slave_IO_Running    Yes
Slave_SQL_Running   Yes
Replicate_Do_DB     DBA,DBB
Replicate_Ignore_DB     
Replicate_Do_Table  
Replicate_Ignore_Table  
Replicate_Wild_Do_Table     
Replicate_Wild_Ignore_Table     
Last_Errno  0
Last_Error  
Skip_Counter    0
Exec_Master_Log_Pos     770800
Relay_Log_Space     1134838
Until_Condition     None
Until_Log_File  
Until_Log_Pos   0
Master_SSL_Allowed  No
Master_SSL_CA_File  
Master_SSL_CA_Path  
Master_SSL_Cert     
Master_SSL_Cipher   
Master_SSL_Key  
Seconds_Behind_Master   0

主狀態

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000007 |   608837 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

而且我可以使用我在 Master from Slave 中創建的複制使用者登錄。對於我給的使用者REPLICATION_SLAVE on % PERMISSIONS

我錯過了什麼嗎。No Error in Logs

更新

程序 ID 使用者主機 數據庫 命令時間 狀態 SQL 查詢

(Kill) (2) (system user) (None) (Connect) (149410) (Waiting for master to send event) (—)

殺死 1 個系統使用者 無 連接 -38185 從站已讀取所有中繼日誌;等待從 I/O 執行緒更新它 —

如您所見,SQL 查詢總是 — 為什麼?

出於調試目的,我將在從站上使用具有完全權限的使用者。事情成功複製後,我會嘗試重置複製使用者權限。

我看到的主要事情是從伺服器期望主伺服器的日誌位置為770800,但主伺服器的實際位置是608837。奴隸永遠不應該領先於主人。

您需要“重新開始”複製配置過程,如停止從屬,鎖定主控,轉儲主控,在從屬上恢復主控,在兩者上設置複製,然後解鎖從屬。每次複製中斷時,我都必須這樣做。:(

更新1:

這是我不久前對 MySQL 複製所做的一些筆記。

啟用複制:

不幸的是,如果不完全鎖定 MASTER 數據庫以獲取二進制日誌中的靜態位置供 SLAVE 啟動,就無法配置 MySQL 複製。

此配置演練的範圍是在正確配置 /etc/my.cnf 文件並在 MASTER 和 SLAVE 伺服器上設置適當的帳戶之後配置 MASTER 和 SLAVE。

為了配置 MySQL 複製,您需要在 MASTER 上打開兩個終端會話,在 SLAVE 上打開一個終端會話。終端 1 和 2 將指在 MASTER 上打開的兩個會話。終端 3 將參考 SLAVE 會話。

  1. 在 1 號航站樓:
  • 使用命令行客戶端連接到MASTER上的 MySQL。
  • 執行查詢FLUSH TABLES WITH READ LOCK;
  • 這將完全鎖定MASTER
  • 不要從 MYSQL 客戶端退出。
  1. 在 2 號航站樓:
  • mysqldump在要複製的數據庫上執行 a 。
  • 確保數據庫轉儲在共享儲存上或複製到從站。
  • 使用命令行客戶端連接到MASTER上的 MySQL。
  • 執行查詢SHOW MASTER STATUS;
  • 記下文件位置列。
  1. 在 3 號航站樓:
  • 恢復您剛剛從 MASTER 獲取的數據庫轉儲。
  • 使用命令行客戶端連接到SLAVE上的 MySQL。
  • 執行查詢CHANGE MASTER TO MASTER_HOST='<master host>', MASTER_USER='<replication user>', MASTER_PASSWORD='<replication password>', MASTER_LOG_FILE='<Filename obtained from Terminal 2>', MASTER_LOG_POS=<Position obtained from Terminal 2>;​
  • 現在應該啟用複制;但是,日誌位置不應遞增。
  • 如果複製沒有正確啟動,請確保檢查 mysqld 日誌文件。
  • 執行SHOW SLAVE STATUS;
  • 驗證Master_Log_File和列是否與終端 2 中記錄的文件位置Read_Master_Log_Pos列相匹配。
  1. 在 1 號航站樓:
  • 當查詢進入時,執行查詢SHOW MASTER STATUS;並記下FilePosition列。
  1. 在 3 號航站樓:
  • HOW MASTER STATUS;在終端 1 上執行後,立即執行和SHOW SLAVE STATUS;比較終端 1上的文件位置Master_Log_File``Read_Master_Log_Pos

重複步驟 4 和 5 幾次。如果文件和位置緊密匹配,則您已成功啟用複制。恭喜。

禁用複制: 要禁用MASTER上的複制,您必須編輯/etc/my.cnf並註釋掉相應的行(有關適用行的更多資訊,請參閱參考資料)。

要禁用 SLAVE 上的複制,您必須執行查詢STOP SLAVE;

要重新啟用從屬伺服器的複制,您必須執行查詢START SLAVE;

複製故障排除:

有時,複製會中斷。這通常是由 UPDATE 查詢激增引起的。當複制中斷時,主從上的二進制日誌開始以指數速度增長。如果查詢激增的根本原因沒有被立即確定並消除,那麼 MySQL 伺服器的磁碟空間通常會在不到 10 小時內被完全消耗完。

確保儲存不會耗盡的最快方法是完全禁用 MASTER 上的 MySQL 複製並關閉 SLAVE 上的 MySQL。

如果您的儲存已開始填滿,則在您禁用主伺服器和從伺服器上的複制後,請隨意刪除主伺服器和從伺服器上的所有 mysql-bin 和 mysqld-relay-bin 文件。當使用基於 RPM 的 MySQL 發行版時,這些文件通常位於 /var/lib/mysql 中。二進制日誌文件的名稱可在全域 my.cnf 中配置,因此如果文件不存在,請查看配置文件。

發生損壞並且您禁用了複製後,您必須完成本文前面詳細介紹的全部內容才能重新啟用複制。

參考:

引用自:https://unix.stackexchange.com/questions/63461