MySQL是一個開源的關(guān)系型數(shù)據(jù)庫系統(tǒng),它的復(fù)制功能可以在多個服務(wù)器之間同步數(shù)據(jù)。在 MySQL 的復(fù)制過程中,通過 slave_sql_thread 和 slave_io_thread 兩個線程協(xié)作來實(shí)現(xiàn)數(shù)據(jù)的同步,slave_io_thread 負(fù)責(zé)將數(shù)據(jù)從 master 復(fù)制到 slave 上,而 slave_sql_thread 則在 slave 上執(zhí)行這些操作。然而在實(shí)際應(yīng)用中,有時候我們需要跳過一些已經(jīng)過期的從庫,這時候就要用到 skip slave 命令。
# 查看從庫狀態(tài) SHOW SLAVE STATUS\G; # 跳過從庫 STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
我們可以使用 SHOW SLAVE STATUS\G 命令來查看從庫的狀態(tài)。在該命令的輸出中,有兩個重要的狀態(tài)信息 - Slave_IO_Running 和 Slave_SQL_Running,分別表示 slave_io_thread 和 slave_sql_thread 是否在運(yùn)行中。我們可以查看這兩個狀態(tài)信息來判斷是否需要 skip slave,假如 Slave_SQL_Running 的值為 No,那么就需要跳過從庫,我們可以使用上述的 skip slave 命令來完成這個任務(wù)。該過程的原理是使用 SET GLOBAL SQL_SLAVE_SKIP_COUNTER 命令將需要跳過的操作計數(shù)器的值設(shè)為 1,然后重啟 slave_io_thread 和 slave_sql_thread,此時從庫將跳過該操作并繼續(xù)復(fù)制下一條操作。