一、相關mysql主從復制技術技巧概覽
1、登錄數據庫查看mysql線程同步狀態
主庫:
mysql> show processlist; +----+------+----------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+----------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ | 6 | rep | 10.0.0.7:35204 | NULL | Binlog Dump | 9189 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL | | 7 | root | localhost | NULL | Sleep | 8978 | | NULL | | 8 | root | localhost | NULL | Sleep | 1962 | | NULL | | 10 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+------+----------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ 4 rows in set (0.00 sec)
從庫:
mysql> show processlist; +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ | 2 | root | localhost | NULL | Sleep | 9054 | | NULL | | 3 | system user | | NULL | Connect | 9279 | Waiting for master to send event | NULL | | 4 | system user | | NULL | Connect | 9070 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | | 5 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 4 rows in set (0.03 sec)
2、主庫線程狀態(State)值
以下列表顯示了主從復制中主服務器的Binlog Dump線程的State列中可能看到的最常見狀態(SHOW PROCESSLIST)。如果Binlog Dump線程在主服務器上看不到,這意味着復制沒有運行,也就是說,目前沒有連接任何Slave主機。 Sending binlog event to slave 二進制日志由各種事件組成,一個事件通常為一個更新加一些其它信息。線程已經從二進制日志讀取了一個事件並且正將它發送到從服務器。 Finished reading one binlog; switching to next binlog 線程已經讀完二進制日志文件並且正打開下一個要發送到從服務器的日志文件。 Has sent all binlog to slave; waiting for binlog to be updated 線程已經從二進制日志讀取所有主要的更新並已經發送到了從服務器。線程現在正空閑,等待由主服務器上新的更新導致的出現在二進制日志中的新事件。 Waiting to finalize termination 線程停止時發生的一個很簡單的狀態。
3、從庫I/O線程狀態(State)值
Connecting to master 線程正試圖連接主服務器。 Checking master version 建立同主服務器之間的連接后立即臨時出現的狀態。 Registering slave on master 建立同主服務器之間的連接后立即臨時出現的狀態。 Requesting binlog dump 建立同主服務器之間的連接后立即臨時出現的狀態。線程向主服務器發送一條請求,索取從請求的二進制日志文件名和位置開始的二進制日志的內容。 Waiting to reconnect after a failed binlog dump request 如果二進制日志轉儲請求失敗(由於沒有連接),線程進入睡眠狀態,然后定期嘗試重新連接。可以使用–master-connect-retry選項指定重試之間的間隔。 Reconnecting after a failed binlog dump request 線程正嘗試重新連接主服務器。 Waiting for master to send event 線程已經連接上主服務器,正等待二進制日志事件到達。如果主服務器正空閑,會持續較長的時間。如果等待持續slave_read_timeout秒,則發生超時。此時,線程認為連接被中斷並企圖重新連接。 Queueing master event to the relay log 線程已經讀取一個事件,正將它復制到中繼日志供SQL線程來處理。 Waiting to reconnect after a failed master event read 讀取時(由於沒有連接)出現錯誤,線程企圖重新連接前將睡眠master-connect-retry秒。 Reconnecting after a failed master event read 線程正嘗試重新連接主服務器,當連接重新建立后,狀態變為Waiting for master to send event。 Waiting for the slave SQL thread to free enough relay log space 正使用一個非零relay_log_space_limit值,中繼日志已經增長到其組合大小超過該值。I/O線程正等待直到SQL線程處理中繼日志內容並刪除部分中繼日志文件來釋放足夠的空間。 Waiting for slave mutex on exit 線程停止時發生的一個很簡單的狀態。
4、從庫SQL線程狀態(State)值
Reading event from the relay log 線程已經從中繼日志讀取一個事件,可以對事件進行處理了。 Has read all relay log; waiting for the slave I/O thread to update it 線程已經處理了中繼日志文件中的所有事件,現在正等待I/O線程將新事件寫入中繼日志。 Waiting for slave mutex on exit 線程停止時發生的一個很簡單的狀態。
5、從庫連接線程狀態(State)值
這些線程狀態發生在復制從庫上,但與連接線程相關聯,而不與I/O或SQL線程相關聯。 Changing master 線程正在處理CHANGE MASTER TO語句。 Killing slave 線程正在處理STOP SLAVE語句。 Opening master dump table 此狀態發生在Creating table from master dump之后。 Reading master dump table data 此狀態發生在Opening master dump table之后。 Rebuilding the index on master dump table 此狀態發生在Reading master dump table data之后。
6、查看mysql線程同步狀態的用途
通過mysql線程同步狀態查看數據庫同步是否完成,用於主庫宕機或者人工數據庫主從切換遷移等。
主庫宕機選擇最快的從庫提升為主,就需要查看,當然也可以利用mysql的半同步功能選擇固定的庫提升為主。