我是按照下面部落格中的步驟來的,最後成功了。##問題
這裡我主要說一下,如果揍瞎了,怎麼重新開始。
在主伺服器上的操作沒什麼大問題。
在從伺服器上操作的時候,很容易出問題:
1.開始在主伺服器上建立資料庫,删除資料庫,建立表,删除表、、進行了很多的操作,從伺服器就是不好使,檢視mysql.log發現,日志沒有讀取全,是從一個删除資料庫的語句開始的,由于這時候從伺服器上沒有這個資料庫,從伺服器再執行這條sql語句的時候,就報錯了,然後就不往下執行了。
2.于是我就删除了從伺服器上/var/lib/mysql/目錄下的relay開頭的檔案,開始隻删除的從主伺服器上讀取的日志檔案,也就是檔案名類似relay-bin.000002這種格式的檔案,發現不好使,而且從伺服器上執行start slave的時候,報下面的錯誤
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
很顯然是mysql繼續讀之前删除的檔案,但是沒找到。
在/var/lib/mysql/目錄下還有relay-log.info和relay-bin.index這兩個檔案,都幹掉,然後重新開機mysql,就跟一個新的slave差不多了,可以啟動了。
##原理
這裡簡單描述一下主從複制的原理,友善配置的時候找原因。
基本原理就是,從伺服器上有兩個線程,一個IO線程,一個SQL線程,
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.232.132
Master_User: userbyslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 316
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
上邊的Slave_IO_Running和Slave_SQL_Running就是這兩個線程的狀态了,IO線程負責從主伺服器上拉取日志,SQL線程負責解析執行日志中的内容。
我們是在執行下面的指令的時候,讓從伺服器連上主伺服器的:
CHANGE MASTER TO
MASTER_HOST='192.168.31.84',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=154;
- 配置主伺服器
- 配置從伺服器
- 在主伺服器上給從伺服器開一個賬号
- 配置從伺服器用主伺服器上開的賬号連接配接上主伺服器