天天看点

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文件。