赞
踩
今天我们学习MySQL5.7的主从同步设置。
首先我们用docker搭建三台MySQL的数据库,然后。我们在这三个数据库上搭建主从同步
三台MySQL的名字分别为db1(3307端口),db2(3308端口),db3(3309端口),其中db1充当master主库,另外两天充当从库。
我们首先在自己的目录下创建一个mysql目录,在mysql目录中创建db1,db2,db3三个目录,用来存储一会创建的三个mysql容器的文件。
然后我们在这三个目录中分别创建三个目录名为data,log,conf 。然后再conf目录中再创建一个conf.d目录和一个mysql.conf.d目录,这两个目录均为空即可。
命令如下:
mkdir mysql
cd mysql
# 创建第一个目录db1
mkdir db1
cd db1
mkdir log
mkdir data
mkdir conf
mkdir conf/conf.d
# db2,db3同理,结构完全一致,不再赘述
。。。
然后我们进入~/mysql/db1ml
cd ~/mysql/db1
在db1中创建第一个mysql容器的启动脚本
vim startdb1.sh
docker run -p 3307:3306 --name db1 --restart=always --privileged=true \
-v /home/toyflivver/mysql/db1/conf:/etc/mysql \
-v /home/toyflivver/mysql/db1/data:/var/lib/mysql \
-v /home/toyflivver/mysql/db1/log:/var/log/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
然后我们运行器第一个mysql
sudo ./startdb1.sh
其余两个mysql容器的启动方式同理,不再赘述,仅贴出启动脚本:
docker run -p 3308:3306 --name db2 --restart=always --privileged=true \
-v /home/toyflivver/mysql/db2/conf:/etc/mysql \
-v /home/toyflivver/mysql/db2/data:/var/lib/mysql \
-v /home/toyflivver/mysql/db2/log:/var/log/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3309:3306 --name db3 --restart=always --privileged=true \
-v /home/toyflivver/mysql/db3/conf:/etc/mysql \
-v /home/toyflivver/mysql/db3/data:/var/lib/mysql \
-v /home/toyflivver/mysql/db3/log:/var/log/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
好。三个mysql容器我们成功启动了,接下来就是开始配置主从同步。
首先。我们去db1(3307端口主库)的conf.d目录中找到或者创建my.cnf配置文件
[mysqld]
# 开启二进制日志
log-bin=mysql-bin# 设置库id
server-id=1
主从同步的配置主要就是的这两个配置项。然后我们在主库上创建一个用户,用来专门和从库同步数据用
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';
FLUSH PRIVILEGES;
然后我们重启主库
sudo docker restart db1
然后我们在db1(主库)上查询一下主库状态
SHOW MASTER STATUS;
在显示的结果中记下 :File列和Position列的值。比如我的是显示File:mysql-bin.000001,Position:1030。配置从库的时候要用到。
首先我们需要为所有的从库设置server-id.这里我们把对db2设置为2,db3设置为3
# db2 的conf.d/my.cnf中
[mysqld]
****
server-id=2
****
# db3 的conf.d/my.cnf中
[mysqld]
****
server-id=3
****
然后我们登录到db2数据库,运行一下命令来指定主库信息。
STOP SLAVE; #停止主从同步,第一次配置应该不用运行这一行
CHANGE MASTER TO
MASTER_HOST = '*.*.*.*',# 指定主库IP
MASTER_PORT = 3307, # 指定主库端口
MASTER_USER = 'slave', # 指定查询主库的用户名
MASTER_PASSWORD = 'slave', 指定密码
MASTER_LOG_FILE = 'mysql-bin.000001', #这里就对应了上一步主库中查到的File信息
MASTER_LOG_POS = 1030; #这里就对应了上一步主库中查到的Position信息START SLAVE;
然后在db2数据库上运行:
SHOW SLAVE STATUS;
如果看到slave_io_running为yes,slave_sql_running为yes,则说明主从同步成功。
db3数据库的配置是一样的。可以自行配置一下。
至此,一主两从的主从同步结构就假设完毕了。你可以在db1主库上创建表,增加数据等操作进行检测。主库的数据会自动同步到从库。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。