MySQL支援單向、非同步複製,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進位日誌文件,並維護日誌文件的一個索引以追蹤日誌循環。當一個從伺服器連接到主伺服器時,它會通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知下一次更新。
為什麼要使用主從複製?
1.主伺服器/從伺服器設定增加了健全性。當主伺服器出現問題時,你可以切換到從伺服器作為備份。
2.透過在主伺服器和從伺服器之間切分處理客戶查詢的負荷,可以得到更好的客戶回應時間。但是不要同時在主從伺服器上進行更新,這樣可能會引起衝突。
3.使用複製的另一個好處是可以使用一個從伺服器執行備份,而不會幹擾主伺服器。在備份過程中主伺服器可以繼續處理更新。
MySQL使用3個執行緒來執行複製功能(其中1個在主伺服器上,另兩個在從伺服器上。當發出START SLAVE時,從伺服器建立一個I/O執行緒,以連接主伺服器並讓主伺服器發送二進位日誌。 ,即中繼日誌。資訊
。追蹤中繼日誌索引檔案來識別目前正使用的中繼日誌。日誌與二進位日誌的格式相同,並且可以用mysqlbinlog讀取
。 --master.info和relay-log.info。
日誌,以及處理自己
的
中繼日誌的
程度。
複製
設定一個連接帳戶
。
@'%.yourdomain.com' IDENTIFIED BY 'slavepass';
3、執行FLUSH TABLES WITH READ LOCK語句清空所有資料表和區塊寫入語句:
mysql> FLUSH TABLES WITH READ LOCK;
保持mysql 用戶端程序另不要退出。一個終端機對主伺服器資料目錄做快照。
shell> cd /usr/local/mysql/
shell> tar -cvf /tmp/mysql-snapshot.tar ./data
如果從伺服器的使用者帳號與主伺服器的不同,你可能不想複製mysql資料庫。在這種情況下,應從歸檔中排除該資料庫。你也不需要在歸檔中包含任何日誌檔案或master.info或relay-log.info檔案。
當FLUSH TABLES WITH READ LOCK所置讀鎖定有效時(即mysql客戶端程式不退出),讀取主伺服器上目前的二進位日誌名和偏移量值:
mysql > SHOW MASTER STATUS;
+------ ---------+----------+--------------+-------------- ----+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+-------- ------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+-------- -------+----------+--------------+---------------- --+
File列顯示日誌名,而Position顯示偏移量。在這個例子中,二進位日誌值為mysql-bin.003,偏移量為73。記錄該值。以後設定從伺服器時需要使用這些值。它們表示複製座標,從伺服器應從該點開始從主伺服器進行新的更新。
如果主伺服器執行時沒有啟用--logs-bin,SHOW MASTER STATUS顯示的日誌名稱和位置值為空。在這種情況下,當以後指定從伺服器的日誌檔案和位置時需要使用的值為空字串('')和4.
取得快照並記錄日誌名稱和偏移量後,回到前一中端重新啟用寫入活動:
mysql> UNLOCK TABLES;
4、確保主伺服器主機上my.cnf檔案的[mysqld]部分包含一個log-bin選項。該部分也應有一個server-id=Master_id選項,其中master_id必須為1到232–1之間的一個正整數值。例如:
[mysqld]
log-bin
server-id=1
如果沒有提供那些選項,應新增它們並重新啟動伺服器。
5.停止從伺服器上的mysqld服務並在其my.cnf檔案中加入下面的行:
[mysqld]
server-id=2
slave_id值同Master_id值一樣,必須為1到232–1之間的一個正整數值。並且,從伺服器的ID必須與主伺服器的ID不相同。
6、將資料備據目錄中。確保對這些檔案和目錄的權限正確。伺服器MySQL運作的使用者必須能夠讀寫文件,如同在主伺服器上一樣。
Shell> chown -R mysql:mysql /usr/local/mysql/data
7、啟動從伺服器。在從伺服器上執行下面的語句,用你的系統的實際值取代選項值:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password'replication_user_name', -> MASTER_PASSWORD='replication_password',
- > MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
8、啟動從伺服器執行緒:
mysql> START SLAVE;
執行這些程式後,從伺服器應連接主伺服器,並補充自快照以來發生的任何更新快照。
9.如果出現複製錯誤,從伺服器的錯誤日誌(HOSTNAME.err)也會出現錯誤訊息。
10.從伺服器複製時,會在其資料目錄中發現檔案master.info和HOSTNAME-relay-log.info。從伺服器使用這兩個檔案追蹤已經處理了多少主伺服器的二進位日誌。不要移除或編輯這些文件,除非你確切知你正在做什麼並完全理解其意義。即使這樣,最好是使用CHANGE MASTER TO語句。