mysql複製不工作
我有兩台伺服器 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 號航站樓:
- 使用命令行客戶端連接到MASTER上的 MySQL。
- 執行查詢
FLUSH TABLES WITH READ LOCK;
- 這將完全鎖定MASTER。
- 不要從 MYSQL 客戶端退出。
- 在 2 號航站樓:
mysqldump
在要複製的數據庫上執行 a 。- 確保數據庫轉儲在共享儲存上或複製到從站。
- 使用命令行客戶端連接到MASTER上的 MySQL。
- 執行查詢
SHOW MASTER STATUS;
- 記下文件和位置列。
- 在 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 號航站樓:
- 當查詢進入時,執行查詢
SHOW MASTER STATUS;
並記下File和Position列。
- 在 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 中配置,因此如果文件不存在,請查看配置文件。
發生損壞並且您禁用了複製後,您必須完成本文前面詳細介紹的全部內容才能重新啟用複制。
參考: