mysql 主從複製-配置

配置複製 - 全新的開始

配置master

  • master 開啓二進制日誌
  • 全局唯一的服務器ID
  • 在 master 創建一個擁有複製權限的複製用戶

配置文件加入以下配置項:

...
[mysqld]
...
...
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1 #此id最好做好規劃
...
...

關於 log-bin 的文件名, 其默認值是 hostname-bin. 如果系統的主機名改了, 那麼log-bin的名稱也會隨着改變(但是
mysql 依然可以通過 log-bin-index 索引文件獲取正確的二進制日誌文件). 但是最好還是這是一個與服務器無關的唯一
文件名, 防止該來該去很混亂.

在 master 上創建一個複製用戶:

master>
CREATE USER repl_user;
master>
GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'xyzzy';

重啓 master 使配置生效

配置slave

  • slave 開啓中繼日誌
  • 全家唯一的服務器ID

配置文件加入以下配置項:

...
[mysqld]
...
...
server-id = 2 #此id最好做好規劃
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
...
...

關於 relay-log 的文件名, 基本與 log-bin 文件名規則一致. 但是 ** 如果主機名改變了, mysql 將無法
找到中繼日誌索引文件, 而認爲中繼日誌爲空. **

重啓 slave 使配置生效

鏈接 master 和 slave

slave>
CHANGE MASTER TO
MASTER_HOST = 'master-1',
MASTER_PORT = 3306,
MASTER_USER = 'repl_user,
MASTER_PASSWORD = 'xyzzy';
slave>
START SLAVE;

清空, 重新開始

-- 清空 slave 上相關表 --
STOP SLAVE;
RESET SLAVE;
-- 清空 master 上相關表 --
RESET MASTER;

* RESET MASTER *: 刪除所有二進制日誌文件並清空二進制日誌索引文件.
* RESET SLAVE *: 刪除 slave 複製所用的文件.

注意:
* 在執行 RESET MASTER 時, 確保沒有任何 slave 鏈接到 master 上.
* 在執行 RESET SLAVE 時, 先執行 STOP SLAVE 命令, 確保 slave 上沒有活動的複製.

配置複製 – 中途複製

如果沒有開啓二進制日誌, 先開啓二進制日誌.
並給所有表加鎖. (數據完整, 防止在備份期間有新數據寫入.)

master > FLUSH TABLES WITH READ LOCK;

鎖定表後, 找出當前正在使用的二進制日誌文件及其binlog位置.

master > SHOW MASTER STATUS;

記錄下下一個事件的位置: File: master-bin.000042, Position: 456552 .這就是複製的起點,
這個位置點之前的數據都在備份裏.
接下來就是創建備份了.

mysqldump --all-databases --host=master-1 > backup.sql

備份完成後, 釋放鎖.

master > UNLOCK TABLES;

然後在 slave 上恢復備份的數據.

mysql --host=slave-1 < backup.sql

然後啓動 slave 服務, 並配置複製信息.

slave >
CHANGE MASTER TO
MASTER_HOST = 'master-1',
MASTER_PORT = 3306,
MASTER_USER = 'slave-1',
MASTER_PASSWORD = 'xyzzy',
MASTER_LOG_FILE = 'master-bin.000042',
MASTER_LOG_POS = 456552;

開啓複製

slave > START SLAVE;

tips:

mysqldump 命令
–master-data = 1 / 2:
= 1: 導出文件裏會有 CHANGE MASTER TO …語句 .
= 2: 導出文件裏會有 CHANGE MASTER TO …語句, 但是被寫成了一個 SQL 註釋, 提供信息.
默認值是 1.
–single-transaction
在開始dump備份的時候開啓一個事務, 並設置事務隔離級別爲可重複讀.
但是不影響其他數據的寫入更新刪除等操作.但是修改表結構的語句不能執行,
如 ALTER TABLE, DROP TABLE 等語句.
此參數對支持事務的存儲引擎有用.

配置複製 – 從已有的 slave 上備份數據, 配置新的 slave

停止 slave

slave-1 > STOP SLAVE;

查看當前 slave 的狀態

slave-1 > SHOW SLAVE STATUS;

拿到當前 slave 同步的 master 的 log file, 和 position.
Relay_Master_Log_File: master-bin.000042
Exec_Master_Log_Pos: 546632
備份當前 slave(slave-1) 上的數據.
在新的 slave(slave-2) 上恢復備份的數據.
在新的 slave 上配置複製信息:

slave-2 >
CHANGE MASTER TO
MASTER_HOST = 'master-1',
MASTER_PORT = 3306,
MASTER_USER = 'slave-1',
MASTER_PASSWORD = 'xyzzy',
MASTER_LOG_FILE = 'master-bin.000042',
MASTER_LOG_POS = 546632;

開啓複製

slave-2 > START SLAVE;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章