1. 在主节点注册一个账号,用于子节点访问主节点
#mysql 1主2从,先创建主节点 ,注意 \ 后面不要带空格
docker run --name mysql-m \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-d mysql:5.7
#开机自启
docker update mysql-m --restart=always
2. 开启二进制日志(mysql8 默认开启,我的是mysql5.7需要手动开启)
在挂载配置目录上创建一个配置文件 my.cnf
[mysqld]
# 随机数
server-id=1
# 日志格式化
binlog_format=STATEMENT
# 开启binlog
log-bin=/var/lib/mysql/mysql-bin
#修改完配置文件重启生效
docker restart mysql-m
3. 在主服务器为从服务器开通1个访问账号salve01
create user 'slave01'@'%';
# 为账号设置一个密码为'root'
alter user 'slave01'@'%' IDENTIFIED WITH mysql_native_password BY 'root';# 授予该账号可以复制主节点的所有库与所有表的权限(*.*)
grant REPLICATION SLAVE ON *.* TO 'slave01'@'%';# 刷新权限
flush PRIVILEGES;
# 进入mysql容器,登录mql 执行
show master status;
注意! 里面的信息随着master 数据修改而不断变化,后面配置主从关系时,一定要让master停止写操作,实际工作需要锁库(忽略。自己百度),因为我是自己测试环境,自己玩,没有写操作 binlog就不会发生变化
1.记住/复制/截图/主节点的binlog文件所在位置!后面从节点要读它 (可能会变动)
2.记住/复制/截图/主节点的binlog文件所在位置!后面从节点要读它 (可能会变动)
3.记住/复制/截图/主节点的binlog文件所在位置!后面从节点要读它 (可能会变动)
mysql-bin.000002 154
3. 准备2个从节点,注意 \ 后面不要带空格,根创建主节点一样的
sudo docker run --name mysql-s1 \
-v /usr/local/mysql-s1/data:/var/lib/mysql \
-v /usr/local/mysql-s1/conf:/etc/mysql/conf.d \
-v /usr/local/mysql-s1/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3307:3306 \
-d mysql:5.7
sudo docker run --name mysql-s2 \
-v /usr/local/mysql-s2/data:/var/lib/mysql \
-v /usr/local/mysql-s2/conf:/etc/mysql/conf.d \
-v /usr/local/mysql-s2/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3308:3306 \
-d mysql:5.7
#开机自启
docker update mysql-s1 --restart=always
docker update mysql-s2 --restart=always
!!!!!!!server-id 随意就是3个节点不能相同
sql-s2/my.cnf :
[mysqld]
server-id=2
sql-s2/my.cnf :
[mysqld]
server-id=3
docker restart mysql-s1
docker restart mysql-s2
# 两个从节点再分别执行一下,密码校验方式根主节点一样的(特别是 mysql8+)
alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
4. 配置主从关系,在从节点s1、s2 执行
# 红色是主节点的binlog位置,(记住/复制/截图/主节点的binlog文件所在位置!)
CHANGE MASTER TO
MASTER_HOST='192.168.208.131',MASTER_PORT=3306,
MASTER_USER='slave01',MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154
5. 从节点开始连接主节点同步数据
START SLAVE;
SHOW SLAVE STATUS\G
踩坑!!!!!原因是我删除了主库中从库没有的数据库demo
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
show slave status\G
回过头再看看主节点的binlog变化