一、mysql主從配置原理
1.master将操作記錄寫到二進制日志中(binary log)中;
2.slave IO 線程将master的binary log events讀寫到它的中繼日志(relay log);
3.slave SQL線程讀取中繼日志,将日志中事件進行重放再進而保持與master資料同步;
二、配置流程
配置要點:
1.主伺服器mysql必須打開二進制日志(bin-log)功能
2.從伺服器具備請求從主伺服器傳輸二進制日志檔案的權限
3.主從伺服器mysql版本保持一緻
4.主從伺服器在主從配置啟動之前資料保持一緻
配置環境:
節點 | IP | 作業系統 | mysql版本 |
---|---|---|---|
master | 192.168.1.197 | centos7.2 | 5.7.17 |
slave | 192.168.1.196 | centos7.2 | 5.7.17 |
配置步驟:
1.修改master配置
#vim /etc/my.cnf
[mysqld]下
log-bin=mysql-bin //【必須】啟用二進制日志
server-id=197 //【必須】伺服器唯一id,必須唯一,預設為1,這裡為IP最後一段
2.修改slave配置
#vim /etc/my.cnf
[mysqld]下
log-bin=mysql-bin //【非必須】啟用二進制日志
server-id=196 //【必須】master-id,必須唯一,預設為1,這裡為IP最後一段
3.重新開機兩台伺服器mysql
service mysqld restart
4.在master上建立賬号并賦予slave權限
a.master建立賬号
mysql> create user 'admin'@'%' identified by 'xxx';
b.在master上為slave授權
MySQL [(none)]> GRANT REPLICATION SLAVE ON *.* to 'admin'@'%' identified by 'xxx';
5.登陸master,檢視master狀态
show master status;
注:做完此步驟後不要再對master做任何操作,以防master狀态變化,記錄下目前master狀态
6.配置slave
mysql> change master to master_host='192.168.1.197',master_user='admin',master_password='xxx',master_log_file='mysql-bin.000004',master_log_pos=23907; //與master配置一緻
7.檢視slave狀态
mysql> show slave status \G
看到Slave_IO_Running:YES,Slave_SQL_Running:YES,說明slave配置成功
8.主伺服器測試
master中建立了同步測試資料庫sysn_test_db,其中有表sysn_test_db,可對表操作後去slave庫中檢視是否同步成功。
三、mysql從節點切換主節點
目前配置是一主節點一從節點,當主節點發生故障時,将從節點切換為主節點,同時舊的主節點切換為從節點。首先確定從節點上開啟了bin-log,操作流程如下;
1. 首先確定從節點已經執行了relay log 中的全部更新。在從庫中執行stop slave io_thread,停止IO線程,然後檢查show processlist的輸出,看到輸出中出現"Slave has read all log;waiting for the slave I/O thread to update it"代表更新完畢。
mysql> stop slave io_thread;
mysql> show processlist\G
*************************** 1. row ***************************
Id: 3
User: system user
Host:
db: NULL
Command: Connect
Time: 2601
State: Slave has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
*************************** 2. row ***************************
Id: 4
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
2 rows in set (0.00 sec)
2.停止從庫slave服務,并将其切換為master。并對舊master授權,使其能夠有權限連接配接新master.
mysql> stop slave;
mysql> reset master;
mysql> grant replication slave on *.* to 'admin'@'%' identified by 'JKcloud123';
3.檢視新master狀态,看到以下狀态說明切換成功
mysql> show processlist\G
*************************** 1. row ***************************
Id: 4
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 7
User: repl
Host: 192.168.0.100:60235
db: NULL
Command: Binlog Dump
Time: 184
State: Master has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
2 rows in set (0.00 sec)
4.按照二中的方法将舊master設定為slave.
5.為了避免新master重新開機後變成slave,删除新master上的master.info和relay-log.info檔案。