top
Loading...
13.6.2.8.STARTSLAVE語法
13.6.2.8. START SLAVE語法
START SLAVE [thread_type [, thread_type] ... ]
START SLAVE [SQL_THREAD] UNTIL
    MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
    RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos
 
thread_type: IO_THREAD | SQL_THREAD

不含選項的START SLAVE會同時啟動兩個從屬服務器線程。I/O線程從主服務器中讀取查詢,并把它們存儲在中繼日志中。SQL線程讀取中繼日志并執行查詢。START SLAVE要求SUPER權限。

如果START SLAVE成功地啟動了從屬服務器線程,則會返回,不會出現錯誤。但是,即使在此情況下,也有可能出現這樣的現象——服務器線程啟動了,然后又停止了(例如,因為它們沒有成功地連接到主服務器上,或者沒有能讀取二進制日志,或者出現了其它問題)。START SLAVE對此不會發出警告。您必須檢查從屬服務器的錯誤日志,查看是否有由從屬服務器線程產生的錯誤消息,或者使用SHOW SLAVE STATUS檢查它們是否運行正常。

您可以把IO_THREADSQL_THREAD選項添加到語句中,指明哪些線程將要啟動。

可以添加一個UNTIL子句,指定從屬服務器應啟動并運行,直到SQL線程達到主服務器二進制日志中的一個給定點為止。當SQL線程達到此點時,它會停止。如果在該語句中指定了SQL_THREAD選項,則它只會啟動SQL線程。否則,它會同時啟動兩個從屬服務器線程。如果SQL線程正在運行,則UNTIL子句被忽略,并發布一個警告。

對于一個UNTIL子句,您必須同時指定一個日志文件名和位置。不要把主服務器和中繼日志選項混合在一起。

UNTIL條件由一個后續的STOP SLAVE語句,或一個不包括UNTIL子句的START SLAVE語句,或一個服務器重啟命令重新設置。

UNTIL子句對于調試復制操作是有用的,或者可用于促使復制操作繼續,直到接近一個特定的點時為止,在此點,您想要避免讓從屬服務器復制一個語句。舉例說明,如果在主服務上執行了一個不明智的DROP TABLE語句,您可以使用UNTIL來告知從屬服務器,執行到此點就停止,不要再繼續了。要查找該事件是什么,需對主服務器日志或從屬中繼日志使用mysqlbinlog,或通過使用SHOW BINLOG EVENTS語句。

如果您正在使用UNTIL,讓從屬服務器成段地處理已復制的查詢,則建議您使用--skip-slave-start選項來啟動從屬服務器,以防止當從屬服務器啟動時,SQL線程運行。最好在一個選項文件中使用此選項,而不是在命令行中使用,這樣,如果發生了意料外的服務器重新啟動,它也不會被忘記。

SHOW SLAVE STATUS語句包括了輸出字段。這些字段顯示了UNTIL條件的當前值。

在以前版本的MySQL中,本語句被稱為SLAVE START。在MySQL 5.1中仍然接受這種用法,以便與以前版本兼容。但現在不贊成使用。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗