1. 程式人生 > >一、MySQL主從同步(binlog方式)

一、MySQL主從同步(binlog方式)

部署環境

機器A:192.168.2.63(主) 
機器B:192.168.2.94(從) 
mysql-5.6.23

主(master)配置

修改mysql安裝目錄下my.ini配置檔案

log_bin=mysql-bin-1 #檔名mysql-bin-1
server_id=1 #服務ID,用於區分服務,範圍1~2^32-1

#MySQL 磁碟寫入策略以及資料安全性
#每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去
innodb_flush_log_at_trx_commit=1 

#當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進位制日誌binary log時,會使用fdatasync()函式將它的寫二進位制日誌binary log同步到磁碟中去。sync_binlog 的預設值是0,像作業系統刷其他檔案的機制一樣,MySQL不會同步到磁碟中去而是依賴作業系統來重新整理binary log。
sync_binlog=1 binlog-do-db=db1 #同步資料庫 binlog-do-db=db2 #mysql複製模式,三種:SBR(基於sql語句複製),RBR(基於行的複製),MBR(混合模式複製) binlog_format=MIXED #混合模式複製 expire_logs_days=7 #binlog過期清理時間 max_binlog_size=20M #binlog每個日誌檔案大小
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

配置後,重啟mysql服務。

從(slave)配置

修改mysql安裝目錄下my.ini配置檔案

log_bin=mysql-bin-2 #檔名mysql-bin-2
server_id=2 #服務ID,用於區分服務,範圍1~2^32-1 #MySQL 磁碟寫入策略以及資料安全性 #每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去 innodb_flush_log_at_trx_commit=1 #當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進位制日誌binary log時,會使用fdatasync()函式將它的寫二進位制日誌binary log同步到磁碟中去。sync_binlog 的預設值是0,像作業系統刷其他檔案的機制一樣,MySQL不會同步到磁碟中去而是依賴作業系統來重新整理binary log。
sync_binlog=1 binlog-do-db=db1 #同步資料庫 binlog-do-db=db2 #mysql複製模式,三種:SBR(基於sql語句複製),RBR(基於行的複製),MBR(混合模式複製) binlog_format=MIXED #混合模式複製 expire_logs_days=7 #binlog過期清理時間 max_binlog_size=20M #binlog每個日誌檔案大小
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

從(slave)配置跟主配置類似,server-id需要區別開來。重啟mysql服務。

slave上同樣配置了log_bin以及磁碟寫入策略等,目的是為了主從切換,下一章會講解。

建立同步賬號

主(master)建立repl賬號,從(slave)通過此賬號訪問主(master)同步資料:

mysql> grant replication slave on *.* to 'repl'@'%' identified by 'repl';

# 格式:mysql> GRANT REPLICATION SLAVE ON *.* TO '帳號'@'從伺服器IP或主機名' IDENTIFIED BY '密碼';
  • 1
  • 2
  • 3

開啟主從同步

主(master)上檢視binlog日誌檔案,以及座標。

mysql> show master status;
+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin-1.000001 |    70 | db1,db2   |     |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

從(master)配置訪問資訊,開啟同步。

mysql> change master to
    -> master_host='192.168.2.63',
    -> master_port=3306,
    -> master_user='repl',
    -> master_password='repl',
    -> master_log_file='mysql-bin-1.000001',
    -> master_log_pos=76;
Query OK, 0 rows affected, 2 warnings (0.34 sec)

mysql> start slave;
Query OK, 0 rows affected (0.04 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.63
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin-1.000001
          ...........
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          ...........
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O
          ...........
1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28