个人随笔
目录
MySQL5.7主从复制环境搭建
2020-06-13 22:59:30

有时候我们的业务需要数据库的读写分离,但是读写分离是基于MySQL的主从复制的基础上实现的,并且MySQL的主从复制可以实现将数据从一台数据库服务器(master)复制到一台或多台数据库服务器(slave)上,进而可以保证数据有多份冗余,这篇文章就简单的实现以下MySQL的主从复制搭建流程。

一、环境

Linux version 3.10.0-957.el7.x86_64
mysql-5.7.30-linux-glibc2.12-x86_64.tar

首先我们需要准备两台服务器,安装好MySQL数据库,大家可以用docker或者直接安装即可,可以参考我这篇教程:Linux安装MySQL5.7完整版流程

注意:若是第二台服务器是直接copy第一台的话,需要去删除数据存放目录下的auto.cnf文件,因为auto.cnf文件里保存的是每个数据库实例的UUID信息,代表数据库的唯一标识,直接复制的话会冲突。

我这里准备的是两台机,如下:

角色 ip user passed
master(主) 192.168.157.6 root 123456
slave(备) 192.168.157.7 root 123456

二、MySQL主从复制原理

1、 主节点 log dump 线程

当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。

2、从节点I/O线程

当从节点上执行start slave命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。

3、从节点SQL线程

SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。

这里不展开说明,后续用一个专门的章节来分析原理。


三、Master搭建

master需要开启二进制日志

1、修改MySQL配置文件

  1. vi /etc/my/cnf

加入如下配置即可:

  1. [mysqld]
  2. server-id=1
  3. log_bin=mysql-bin
  • server-id: 服务器唯一标识。
  • log_bin: 启动MySQL二进制日志,即数据同步语句,从数据库会一条一条的执行这些语句。
  • binlog_do_db: 指定记录二进制日志的数据库,即需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可,若是不设置,则默认同步所有数据库,这里未配置。
  • binlog_ignore_db: 指定不记录二进制日志的数据库,即不需要复制的数据库名,如果有多个数据库,重复设置这个选项即可。
  • 其中需要注意的是,binlog_do_db和binlog_ignore_db为互斥选项,一般只需要一个即可

2、重启MySQL

  1. service mysql restart

3、创建从服务器权限

登录

  1. ./mysql -u root -p #在mysql的bin目录下执行。

创建从数据库的masterbackup用户和权限

  1. grant replication slave on *.* to masterbackup@'192.168.157.%' identified by '123456';

192.168.157.%通配符,表示0-255的IP都可访问主服务器,正式环境请配置指定从服务器IP
若将 192.168.157.% 改为 %,则任何ip均可作为其从数据库来访问主服务器

刷新系统权限

  1. flush privileges;

记录日志文件名字和pos 位置

  1. show master status;

这里是mysql-bin.000001和601


四、Slave搭建

slave需要开启中继日志

1、修改MySQL配置文件

  1. vi /etc/my/cnf

加入如下配置即可:

  1. [mysqld]
  2. server-id=2
  3. relay-log=slave-relay-bin

2、重启MySQL

  1. service mysql restart

3、启动同步

登录

  1. ./mysql -u root -p #在mysql的bin目录下执行

从站设置

  1. change master to master_host='192.168.157.6',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=601;

开启从线程

  1. start slave;

查看状态是否正常

  1. show slave status\G; #加上\G显示会比较友好。

可以看到Slave_IO_Running和Slave_SQL_Running都是YES,假如我们关闭从线程。

  1. stop slave;

那么将都会变成NO.


五、测试主从复制

1、登录Master,建立数据库,表,插入数据。

  1. ./mysql -u root -p #登录
  2. create database test; #建库
  3. use test;#使用库
  4. create table user(name varchar(50),passwd varchar(20)); #建表
  5. insert into user(name,passwd) values('suibibk.com','123456'); #插入数据
  6. select * from user; #查询结果
  7. +-------------+--------+
  8. | name | passwd |
  9. +-------------+--------+
  10. | suibibk.com | 123456 |
  11. +-------------+--------+

2、登录从库,发现test库已存在,user表也已存在,数据也已存在。

  1. mysql> select * from user;
  2. +-------------+--------+
  3. | name | passwd |
  4. +-------------+--------+
  5. | suibibk.com | 123456 |
  6. +-------------+--------+

3、Master修改数据

  1. update user set passwd='23456';

4、查看Slave记录

  1. mysql> select * from user;
  2. +-------------+--------+
  3. | name | passwd |
  4. +-------------+--------+
  5. | suibibk.com | 23456 |
  6. +-------------+--------+

到这里,主从搭建成功。

 463

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2