部署環境
機器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)