MySQL主主數據同步

環境

操作系統版本:CentOS7 64位
MySQL版本:mysql5.6.39
節點1IP:192.168.1.205
節點2IP:192.168.1.206
MySQL 主從複製官方文檔:http://dev.mysql.com/doc/refman/5.6/en/replication.html

注意:
1> 主從服務器操作系統版本和位數要保持一致
2> Master和Slave數據庫的版本要一致
3> Master和Slave數據庫中的數據要一致
4>防火牆要關閉(或開放權限端口)

配置
1.Master節點配置,主機1和主機2都配置(server_id要唯一)

執行 vi /etc/my.cnf  

在[mysqld]中增加以下配置項:

# 服務器的ID,必須唯一,一般設置自己的IP
server_id=205
# 複製過濾:不需要備份的數據庫(MySQL庫一般不同步)
binlog-ignore-db=mysql
# 開啓二進制日誌功能,名字可以隨便取,最好有含義(比如項目名)
log-bin=edu-mysql-bin
# 爲每個 session 分配的內存,在事務過程中用來存儲二進制日誌的緩存
binlog_cache_size=1M
# 主從複製的格式(mixed,statement,row,默認格式是 statement)
binlog_format=mixed
# 二進制日誌自動刪除/過期的天數。默認值爲 0,表示不自動刪除。
expire_logs_days=7
## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免 slave 端複製中斷。 
## 如:1062 錯誤是指一些主鍵重複,1032 錯誤是因爲主從數據庫數據不一致
slave_skip_errors=1062
# 作爲從服務器時的中繼日誌
relay_log=edu-mysql-relay-bin
# log_slave_updates 表示 slave 將複製事件寫進自己的二進制日誌
log_slave_updates=1
# 主鍵自增規則,避免主從同步ID重複的問題
auto_increment_increment=2  # 自增因子(每次加2)
auto_increment_offset=1     # 自增偏移(從1開始),單數

配置完後

# 先重啓一下服務
service mysqld restart  
# 登錄到mysql
mysql -uroot -p 
# 創建數據庫同步用戶,並授予相應的權限(192.168.1.206 爲另一臺機的ip地址)
mysql> grant replication slave, replication client on *.* to 'repl'@'192.168.1.206' identified by 'root123456';
# 刷新授權表信息
mysql> flush privileges;
# 查看binlog文件的position(偏移)和File(日誌文件)的值,從機上需要用到
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| edu-mysql-bin.000001 |      120 |              | mysql            |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.Slave配置,主機1和主機2都配置

mysql> change master to master_host='192.168.1.206',master_user='repl', master_password='root123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=439, master_connect_retry=30;
# master_user和master_password:在另一臺機上grant replication slave...創建的用戶和密碼
# master_log_file和master_log_pos:在另一臺機上運行show master status;命令執行結果對應File和Position字段的值
# 查看作爲從節點的狀態信息
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 192.168.1.206
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: edu-mysql-bin.000001
          Read_Master_Log_Pos: 439
               Relay_Log_File: edu-mysql-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: edu-mysql-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: No
          # 省略其它配置。。。

# 由於此時從節點還沒有啓動,Slave_IO_State的值爲空,Slave_IO_Running和Slave_SQL_Running線程爲No表示也沒有運行。啓動從節點,開始工作接收主節點發送事件(數據庫數據變更的所有事件)
mysql> start slave;
# 此時再查看slave節點的狀態
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event(或提示已經連接master)
                  Master_Host: 192.168.1.206
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: edu-mysql-bin.000001
          Read_Master_Log_Pos: 439
               Relay_Log_File: edu-mysql-relay-bin.000002
                Relay_Log_Pos: 287
        Relay_Master_Log_File: edu-mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
            # ...省略其它配置

最後測試。
文章來源參考

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