#MySQL實戰–主主複製
1 開啓二進制複製
- 關閉MySQL服務
service mysqld stop
- 添加配置
vi /etc/my.cnf
添加以下內容:
log-bin=mysql-bin1 # 二進制文件名
server-id=1 # 服務器id,唯一
binlog-format=mixed #二進制日誌格式,有row、statement、mixed三種格式,
#row指的是把改變的內容複製過去,而不是把命令在從服務器上執行一遍,
#statement指的是在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。
#MySQL默認採用基於語句的複製,效率比較高。mixed指的是默認採用基於語句
#的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。
binlog-do-db=database #同步的數據庫名稱
另一臺
log-bin=mysql-bin2
server-id=2
binlog-format=mixed
binlog-do-db=database
######注:
######1. server-id必須是唯一的,每臺機器不同。
######2. 如果你不設置server_id(或者顯式地將其設置爲默認值0),主服務器將拒絕從從節點獲得任何連接。
######3. 在複製設置中獲得最大的持久性和一致性,對於事務請使用InnoDB,您應該使用innodb_flush_log_at_trx_commit=1和sync_binlog=1在主節點my.cnf文件中設置。
######4. 確保您的複製母版上沒有啓用skip_networking系統變量。如果網絡已被禁用,則從服務器無法與主服務器通信,並且複製失敗。
2 創建用於複製的用戶
創建一個僅用於複製進程的用戶,官方示例:
mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
實戰使用:
mysql> CREATE USER 'repl'@'從節點ip' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'從節點ip';
3 執行初始化腳本
- 建庫
- 建表
######注:使用這種方式最簡單,否則還要使用其他備份策略進行操作,提高了運維工作量。請按自己的情況使用。
4 查看主節點當前日誌位置
查看複製起點,在主節點上查看:
mysql> FLUSH TABLES WITH READ LOCK; # 鎖住表,保證同步期間不會出現數據修改
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin1.000001 | 619 | test | manual,mysql |
+------------------+----------+--------------+------------------+
######注:如果能夠保證執行執行同步時,不會有客戶端進行寫操作,可以不用鎖(不建議)。
5 設置複製(從)
得到的日誌座標,寫在下面命令的master_log_pos屬性上。
mysql> CHANGE MASTER TO
-> master_host='主IP',
-> master_port=3306,
-> master_user='repl',
-> master_password='password',
-> master_log_file='mysql-bin1.000001',
-> master_log_pos=619;
6 啓動和檢查(從)
mysql> start slave;
mysql> show slave status\G; # Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 即成功
7 主節點釋放鎖
mysql> unlock tables;
8 測試
往主節點中修改數據,去從節點中查詢修改後的數據,驗證主備是否真正成功。