Mysql
損壞的從站(MySQL 複製)
昨晚,一位開發人員在主機上執行了錯誤的 mySQL 語句(查詢插入具有重複主鍵的行)。突然,複製到它的從屬伺服器停止了。從站開始將其寫入 mysql_relay_logs,在我們監控和修復它之前,磁碟空間不足。
Master 被配置為保存最近 3 天的 bin_logs,所以我們仍然沒有完全失去複製。現在有人可以幫我解決這個爛攤子。
我的大師狀態:
mysql> SHOW MASTER STATUS\G *************************** 1. row *************************** File: mysql-bin.000017 Position: 30844254 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec)
從屬狀態:mysql
> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Master_Host: 192.168.140.110 Master_User: replication_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000014 Read_Master_Log_Pos: 61132382 Relay_Log_File: mysqld-relay-bin.000037 Relay_Log_Pos: 1405976 Relay_Master_Log_File: mysql-bin.000014 Slave_IO_Running: No Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1062 Last_Error: Error 'Duplicate entry '13676-1-2' for key 1' on query. Default database: 'XXX'. Query: 'YYY' Skip_Counter: 0 Exec_Master_Log_Pos: 1405839 Relay_Log_Space: 8974037551 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: NULL 1 row in set (0.00 sec)
有人可以給我確切的命令以使一切恢復正常嗎?正如我所說,我確信我們已經失去了從伺服器上的數據,因為它用完了磁碟,但我們必須在主伺服器上有數據。
我的下一個問題是:如何確保這種情況不再發生。
非常感謝 Sparsh Gupta
直接的做法是清除從伺服器上的數據,並從主伺服器的新副本重新開始。可以使用 mysqldump 或通過 rsync 之類的東西複製 master。根據您的數據庫有多大,您可能會遇到停機時間。這將始終有效。
如果您從從驅動器上清除空間,則有可能通過使用(從 mysql 內部)從發生錯誤的位置開始複製:
start slave
如果 master 的 bin.log 文件就位,則複製有可能立即啟動。我沒有太多的經驗發生這種情況。
我最後一次這樣做是當開發人員向數據庫添加一個新表時,並沒有先在從屬伺服器上創建它。我創建了表,並且不得不使用 sql_slave_skip_counter 來跳過 bin.log 中失去的位。然後我手動插入了我跳過的 20 行數據。