1. 程式人生 > >CentOS7x64配置MYSQL5.7 Master Slave主從複製

CentOS7x64配置MYSQL5.7 Master Slave主從複製

@1首先修改mysql配置檔案  /etc/my.cnf

#ID 必須唯一
server-id=1 
#二進位制檔名稱字首,生成的檔案mysql-bin.000001,mysql-bin.000002
log-bin=mysql-bin 
#記錄目前有哪些mysql-bin檔案 SHOW MASTER STATUS;
log-bin-index=master-bin.index 
#有更新是否立即同步到日誌,效能會低,但不會丟資料。
innodb_flush_log_at_trx_commit=1 
sync_binlog=1
#二進位制日誌自動刪除的天數。預設值為0,表示“沒有自動刪除”
expire_logs_days=10
#二進位制檔案大小,操作大小生成新檔案儲存(最小4096byte最大1073741824(1G)預設
max_binlog_size=1073741824
#同步哪些資料庫
binlog-do-db=template 
#二進位制複製方式
binlog_format=ROW

#控制當伺服器無法寫入二進位制日誌時發生的情況,這可能導致主伺服器日誌變得不一致,從伺服器會失去同步。

#IGNORE_ERROR忽略錯誤繼續進行,ABORT_SERVER當發生錯誤不能寫入二進位制日誌時,停止日誌並關閉服務。

binlog_error_action=ABORT_SERVER

##下面配置不是必須的
#資料庫編碼
character-set-server=utf8
#忽略表明大小寫
lower_case_table_names=1
#開啟慢查詢日誌,超過10秒則記錄到日誌
slow_query_log=1
long_query_time=10.000000
#預設值:128M 專用MySQL伺服器設定的大小: 作業系統記憶體的70%-80%最佳。
#並不是設定的越大越好。設定的過大,會導致system的swap空間被佔用,導致作業系統變慢,從而減低sql查詢的效率。
innodb_buffer_pool_size=500M

@2在master上建立使用者,用於slave連線登入

mysql> CREATE USER 'repl'@'192.168.80.%' IDENTIFIED BY 'MyPWD123!@#';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.80.%';
repl使用者必須具有REPLICATION SLAVE許可權,除此之外沒有必要新增不必要的許可權,密碼為MyPWD123!@#。
192.168.80.%,這個配置是指明repl使用者所在伺服器,這裡%是萬用字元,表示192.168.80.0網段的Server都可以使用repl使用者登陸主伺服器,當然你也可以指定固定Ip。


@3在master上備份當前資料

mysqldump -u root -p --databases mytest --master-data > dbdump.db

--master-data 這個引數比較重要
1:首先在備份之前它會呼叫 FLUSH TABLES WITH READ LOCK 鎖住資料庫,資料庫就不能進行寫操作了。
2:它會在備份檔案最上面記錄 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154,紅色的可能與你測試的不一樣。
它記錄了master伺服器二進位制日誌的檔名與位置,也就是當前資料截止的位置,這樣當slave啟動以後,就從這個點開始複製資料。
3:然後備份資料到檔案。
4:最後釋放鎖 UNLOCK TABLES;

mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+
mysql > UNLOCK TABLES;
上訴命令可以檢視master當前日誌的名稱與位置,在啟動slave時需要用到。

@4把資料備份拷貝到slave

scp /var/lib/mysql/dbdump.db [email protected]:/home/mysqldata/

================MASTER配置完成===================

@5配置slave  /etc/my.cnf

#唯一ID
server-id=2
#中繼日誌
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
#二進位制日誌自動刪除的天數。預設值為0,表示“沒有自動刪除”
expire_logs_days=10
relay_log_recovery=ON
relay_log_info_repository=TABLE


@6在slave上恢復master當前的資料。

mysql -u root -p mytest < /home/mysqldata/dbdump.db 

然後執行命令:
CHANGE MASTER TO
MASTER_HOST='192.168.80.111',
MASTER_USER='repl',
MASTER_PASSWORD='Sql2008!@#',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=154;

MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154  注意這裡一定不能寫錯了,

這個內容可以在dbdump.db的開頭找到,記錄著master備份時當前二進位制檔案的位置,slave在恢復資料後就從這個點開始複製資料。

開啟slave同步

mysql> START SLAVE;


參考 

http://coolnull.com/154.html

http://blog.51yip.com/mysql/1042.html

http://blog.csdn.net/wyzxg/article/details/7412777

http://blog.csdn.net/JesseYoung/article/details/40979129 MySQL運維

http://www.ilanni.com/?p=7816 

http://www.ilanni.com/?p=7911 MySQL-binlog備份資料