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每個日誌文件大小

配置後,重啓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每個日誌文件大小

從(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 '密碼';

開啓主從同步
主(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)

從(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)

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