2016-11-15 134 views
0

我在Red Hat Linux上託管MySQL Ver 14.14,Distrib 5.1.16的兩臺不同服務器上有一個master-to-master複製設置。當我重新啓動其中一臺服務器時,從站無法啓動。當我執行/ var/lib/mysql目錄的列表時,我注意到master.info文件被截斷爲零,導致MySQL認爲複製沒有設置。master.info文件不斷被截斷

這裏是服務器1的my.cnf:

[client] 
port = 3306 
socket = /var/lib/mysql/mysql.sock 

[mysqldump] 
quick 
max_allowed_packet = 16M 

[mysql] 
no-auto-rehash 

[isamchk] 
key_buffer = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M 

[myisamchk] 
key_buffer = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M 

[mysqlhotcopy] 
interactive-timeout 

[mysqld] 
port = 3306 
socket = /var/lib/mysql/mysql.sock 
key_buffer = 16M 
max_allowed_packet = 1M 
table_cache = 64 
sort_buffer_size = 512K 
net_buffer_length = 8K 
myisam_sort_buffer_size = 8M 
log-bin = mysql-bin 
relay-log = mysqld-relay-bin 
relay-log-index = mysqld-relay-bin.index 
server-id = 101 
binlog-format = STATEMENT 
replicate-do-db = foo 
replicate-do-db = bar 
binlog-do-db = foo 
binlog-do-db = bar 
auto_increment_increment = 2 
auto_increment_offset = 1 
master-connect-retry = 2 
sync_binlog = 1 
log-error = mysqld.log 
log-warnings = 2 
wait_timeout = 31536000 
expire_logs_days = 45 

這裏是服務器2 my.cnf中:

[client] 
port = 3306 
socket = /var/lib/mysql/mysql.sock 

[mysqldump] 
quick 
max_allowed_packet = 16M 

[mysql] 
no-auto-rehash 

[isamchk] 
key_buffer = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M 

[myisamchk] 
key_buffer = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M 

[mysqlhotcopy] 
interactive-timeout 

[mysqld] 
port = 3306 
socket = /var/lib/mysql/mysql.sock 
key_buffer = 16M 
max_allowed_packet = 1M 
table_cache = 64 
sort_buffer_size = 512K 
net_buffer_length = 8K 
myisam_sort_buffer_size = 8M 
log-bin = mysql-bin 
relay-log = mysqld-relay-bin 
relay-log-index = mysqld-relay-bin.index 
server-id = 102 
binlog-format = STATEMENT 
replicate-do-db = foo 
replicate-do-db = bar 
binlog-do-db = foo 
binlog-do-db = bar 
auto_increment_increment = 2 
auto_increment_offset = 2 
master-connect-retry = 2 
sync_binlog = 1 
log-error = mysqld.log 
log-warnings = 2 
wait_timeout = 31536000 
expire_logs_days = 45 

我的設置,像這樣每個服務器上的奴隸:

STOP SLAVE ; RESET SLAVE ; CHANGE MASTER TO MASTER_HOST='other_sys', MASTER_USER='repl', MASTER_PASSWORD='super_secret_password', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14048 ; 

MASTER_LOG_FILE和MASTER_LOG_POS在上例中是任意的。這樣做後,我得到了MySQL從狀態如下:

mysql> show slave status \G 
*************************** 1. row *************************** 
       Slave_IO_State: Waiting for master to send event 
        Master_Host: other_sys 
        Master_User: repl 
        Master_Port: 3306 
       Connect_Retry: 2 
       Master_Log_File: mysql-bin.000002 
      Read_Master_Log_Pos: 14048 
       Relay_Log_File: mysqld-relay-bin.000002 
       Relay_Log_Pos: 251 
     Relay_Master_Log_File: mysql-bin.000002 
      Slave_IO_Running: Yes 
      Slave_SQL_Running: Yes 
       Replicate_Do_DB: foo,bar 
      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: 14048 
       Relay_Log_Space: 407 
       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 
Master_SSL_Verify_Server_Cert: No 
       Last_IO_Errno: 0 
       Last_IO_Error: 
       Last_SQL_Errno: 0 
       Last_SQL_Error: 
1 row in set (0.00 sec) 

我然後執行使用命令reboot服務器的重新啓動。重新啓動後,MySQL從站有時會從停止的地方自動啓動。其他時候,MySQL從服務器根本無法啓動,我注意到show slave status \G返回一個空集,並且/var/lib/mysql/master.info文件被截斷爲零。就好像Linux在重啓時沒有將文件緩衝區刷新到inode,所以從屬信息不會被保存。

我在配置從站時錯過了什麼嗎?

回答

0

以防萬一有人想知道我是如何解決這個:

的問題是Linux的文件緩衝。我執行了上述相同的步驟,除了在撥打reboot之前我撥打sync,並且在10次嘗試中100%的時間內工作。沒有sync,在我的測試中10次失敗了9次。我不知道爲什麼Linux在關機時沒有同步文件緩存,但撥打sync或等待一分鐘後再發出reboot已解決問題。

+0

這是離奇的。 Unix上的shutdown腳本在35年前做了三次或四次「sync」。 – EJP

+0

事實證明,這對我們的生產系統來說是一個更大的問題。事實證明,它可以在我們的Linux系統上執行任何和所有文件。我在這個網站上發佈了這個問題,但它被移到了unix.stackexchange.com網站。也許有人會告訴我,我們的商店是否有一些配置可以打破這一點。 –