一、简介
MySQL 主从复制是 MySQL 自带的一个功能,他是借助 bin-log日志文件里面的
SQL 命令实现主从复制,我们在 Master 端执行了一条命令,在 Salve 端
也会执行一遍,从而达到主从复制的效果,通过主从复制可以实现数据备份,
故障转移,MySQL集群,高可用,读写分离。
主从复制时,Master数据库会生成一个log dump线程,用来给Slave数据库I/O线程传递bin-log。Slave数据库会生成两个线程,一个是I/O线程,一个是SQL线程,I/O线程请求Master数据库的bin-log文件,将得到的bin-log日志写到relay-log(中继日志)文件,SQL线程会读取relay-log文件中的日志,并生成具体操作,从而实现主从复制。
二、基于 Docker 实现 MySQL 主从复制
1、安装 MySQL
运行 MySQL 容器,这里我们运行两个,一个是主(master)数据库,一个是从(slave) 数据库。
主数据库:
docker run --name master -e MYSQL_ROOT_PASSWORD=roof -p 3306:3306 -d mysql:5.7
从数据库:
docker run --name slave -e MYSQL_ROOT_PASSWORD=roof -p 3307:3306 -d mysql:5.7
2、配置主数据库 master
修改主数据库文件,进入容器内部
docker exec -it master /bin/bash
cd /etc/mysql
安装 vim,以便修改配置文件
apt-get update
apt-get install vim
进入 mysql 配置文件
vim my.cnf
添加以下配置
[mysqld]
# 设置同一局域网内唯一ID
server-id=100
# 开启二进制日志功能
log-bin=mysql-bin
重启 MySQL 服务
service mysql restart
启动 Docker 容器
docker start master
验证是否配置成功,执行以下 SQL 命令,查询配置中的 server_id
show VARIABLES like '%server_id%';
查询同步的文件和行数
SHOW MASTER status;
2、配置从数据库 slave
同理配置主数据库,添加以下配置,重启 MySQL 和 Docker 即可。
[mysqld]
# 设置同一局域网内唯一ID
server_id = 102
# 日志文件同步方式
log-bin = mysql-bin
在 Master 数据库执行以下命令
SHOW MASTER status;
我们可以看到 File 和 Position,然后在 Slave 数据库执行以下命令,使从节点同步主节点数据,File 和 Position 要和主节点相同。
change master to master_host='106.13.1.171',
master_user='root', master_password='roof',
master_port=3306, master_log_file='mysql-bin.000001',
master_log_pos= 154, master_connect_retry=30;
开始主从复制
START SLAVE;
查看效果
SHOW SLAVE STATUS;
如果需要停止主从复制
STOP SLAVE;
有两个 Yes 成功!我们可以在 Master 数据库创建一个数据库 test 进行测试, Slave 就会自动同步主数据库数据。
完
ABOUT
公众号:【星尘Pro】
github:https://github.com/huangliangyun