mysql集群搭建-主从架构搭建

一、主从复制的原理

  我们根据一张主从复制的原理图来讲解,它们主要是通过binlog日志完成同步的:

  

  1. 主数据库更新、删除、插入数据时,将这些操作sql写入binlog日志;

  2. 当从数据库正常启动后,会连接到对应的主库中;

  3. 在主数据库中,有一个binlog dump thread线程会将binlog的内容发送给从库;

  4. 从数据库获取到主库发送过来的binlog内容后,会通过 I/O thread 将内容l写入到relay log文件中;

  5. 从数据库中有一个SQL thread线程会不停的读取relay log的内容,每次读取的位置是上一次执行的位置,如果有新的内容则开始执行,并记录下执行的位置。

  通过主从复制的原理可以知道,这种复制模式是一种异步操作,主库更新后的数据只负责发送,不会关心从库是否执行成功,也不会关心数据是否有效。

  但是这种复制的最大好处就是效率快,数据库能够立即响应用户的操作需求。

二、主从复制的搭建

  在这里我们主要以docker的方式进行搭建主从环境。

1.主库的搭建

  第一步:创建mysql配置的文件my.cnf

#创建主库的文件夹,在这里是自己创建的配置文件,也可以使用mysql自己的文件
mkdir /opt/mysql/master
cd /opt/mysql/master
#创建主库的配置文件文件夹,并授权
mkdir conf data
chmod 777 * -R

  第二步:在配置文件中开启二进制文件

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #服务id,不可重复
#严格sql
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  第三步:创建docker容器

#容器名称
docker create --name mysql-master
#挂载配置文件
-v /opt/mysql/master/data:/var/lib/mysql -v/opt/mysql/master/conf:/etc/my.cnf.d
#端口号
-p 3306:3306
#root的密码 -e MYSQL_ROOT_PASSWORD=123456 #mysql使用的版本
percona:
5.7.23

  第四步:启动容器

docker start mysql-master

  第五步:进入mysql,创建一个同步账户并授权

create user 'synchro'@'%' identified by 'synchro';
grant replication slave on *.* to 'synchro'@'%';
flush privileges;

  至此,主库的搭建完毕。

2.从库的搭建

  第一步:创建mysql配置的文件my.cnf

#创建从库的文件夹,在这里是自己创建的配置文件,也可以使用mysql自己的文件
mkdir /opt/mysql/slave
cd /opt/mysql/slave
#创建从库的配置文件文件夹,并授权
mkdir conf data
chmod 777 * -R

  第二步:修改从库的配置文件

[mysqld]
server-id=2 #服务id,不可重复
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

  第三步:创建docker容器

#容器名称
docker create --name mysql-slave
#挂载配置文件
-v /opt/mysql/slave/data:/var/lib/mysql 
-v/opt/mysql/slave/conf:/etc/my.cnf.d 
#端口号
-p 3307:3306 
#root的密码
-e MYSQL_ROOT_PASSWORD=123456
#mysql使用的版本
percona:5.7.23

  第四步:启动容器

docker start mysql-slave

  至此从库已经搭建完毕。

3.主从复制的配置

  第一步,打开mysql连接工具(本文使用的是navicat),连接到主库,查看主库的属性

show master status;

  输出的结果,我们主要使用的是File字段的值和position字段的值:

 

  第二步:打开mysql连接工具(本文使用的是navicat),连接到从库,输入主从配置的sql

CHANGE MASTER TO
#主库的地址
master_host='127.0.0.1',
#同步账户和密码
master_user='synchro',
master_password='synchro',
#主库的端口号
master_port=3306,
#这个是主库状态中的File字段的值
master_log_file='mysql-bin.000002',
#这个是主库状态中的Position字段的值
master_log_pos=648;

  第三步:启动主从复制

start slave;

  至此mysql的主从复制搭建完毕。

 

posted @ 2020-08-29 16:38  想去天空的猫  阅读(473)  评论(0编辑  收藏  举报