天天看點

mysql主從配置流程一、mysql主從配置原理二、配置流程三、mysql從節點切換主節點

一、mysql主從配置原理

1.master将操作記錄寫到二進制日志中(binary log)中;

2.slave IO 線程将master的binary log events讀寫到它的中繼日志(relay log);

3.slave SQL線程讀取中繼日志,将日志中事件進行重放再進而保持與master資料同步;

mysql主從配置流程一、mysql主從配置原理二、配置流程三、mysql從節點切換主節點

二、配置流程

配置要點:

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;

mysql主從配置流程一、mysql主從配置原理二、配置流程三、mysql從節點切換主節點

注:做完此步驟後不要再對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
           
mysql主從配置流程一、mysql主從配置原理二、配置流程三、mysql從節點切換主節點

看到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檔案。