docker 搭建mysql集群一主一从,两台机器

一、准备两条机器,分别为IP1和IP2,其中IP1为主,IP2为从

二、在两台机器上分别拉取mysql镜像

复制代码
docker pull mysql:8.0.29

三、在home目录下新建目录,分别为/home/mysql/data,/home/mysql/conf

1、在IP1主机下的/home/mysql/conf目录下新建my.cnf文件,内容为

复制代码
[mysqld]
server-id=1
 
#binlog_format=STATEMENT
 
#这里需要注意,因为STATEMENT 性能是最好的,但是我们需要使用canal,所以这里需要使用row格式,如果不需要使用可以使用STATEMENT
binlog_format=row

2、在IP2从机的/home/mysql/conf目录下新建my.cnf文件,内容为

复制代码
[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=2
# 中继日志名,默认xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

四、在主机目录下执行如下操作:

1、运行生产docker容器:

复制代码
docker run -d \
-p 3306:3306 \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=xxxxxx \
--name mysql-master \
mysql:8.0.29

2、进入容器

复制代码
docker exec -it mysql-master /bin/bash 

docker exec -it mysql-master /bin/bash 

mysql - uroot - pxxxxxx

3、在主机中创建slave用户

复制代码
-- 创建slave用户
CREATE USER 'mytest'@'%';
-- 设置密码
ALTER USER 'mytest'@'%' IDENTIFIED WITH mysql_native_password BY 'zzzzzzz';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'mytest'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

4、主机中查询master状态,一定要记住,仓库配置时需要

复制代码
SHOW MASTER STATUS;

五、在从机执行如下:

1、运行容器

复制代码
docker run -d \
-p 3306:3306 \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=xxxxxx \
--name mysql-slave \
mysql:8.0.29

2、进入容器

复制代码
docker exec -it mysql-slave /bin/bash

mysql -uroot -ptcdri123

3、在从机上配置主从关系

复制代码
CHANGE MASTER TO MASTER_HOST='IP1', 
MASTER_USER='mytest',MASTER_PASSWORD='zzzzzz', MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=1054;

注:此处的用户为在主机中创建的slave用户名和密码

4、启动主从同步并查看状态

复制代码
START SLAVE;

SHOW SLAVE STATUS\G

五、至此基本上就配置完成了,使用如下验证

复制代码
CREATE DATABASE db_user;
USE db_user;
CREATE TABLE t_user (
 id BIGINT AUTO_INCREMENT,
 uname VARCHAR(30),
 PRIMARY KEY (id)
);

在主库创建完成以后,会发现从库中也生成了对应的表,主库插入用户在从库也会生成对应的用户。

六、停止和重置

需要的时候,可以使用如下SQL语句

复制代码
-- 在从机上执行。功能说明:停止I/O 线程和SQL线程的操作。
stop slave; 
 
-- 在从机上执行。功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件。
reset slave;
 
-- 在主机上执行。功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。
-- 用于第一次进行搭建主从库时,进行主库binlog初始化工作;
reset master;
相关推荐
我是黄骨鱼4 分钟前
【零基础学数据库|第二篇】MySql启动!!!
数据库·mysql
Dxy123931021632 分钟前
MySQL删除表语句详解
数据库·mysql
uoKent41 分钟前
MySQL常见命令梳理大纲
数据库·mysql
予枫的编程笔记1 小时前
【MySQL筑基篇】从排名统计到非结构化存储:MySQL窗口函数与JSON实战教程
mysql·数据处理·窗口函数·后端开发·json数据类型·数据库进阶·mysql高级特性
Android系统攻城狮1 小时前
Android tinyalsa深度解析之pcm_close调用流程与实战(一百零四)
android·pcm·tinyalsa·音频进阶·音频性能实战·android hal
weixin_411191841 小时前
LifecycleEventObserver和DefaultLifecycleObserver使用
android
YIN_尹2 小时前
【MySQL】数据分析双剑客:聚合函数 与 group by子句的完美搭配
mysql·性能优化·数据分析
、BeYourself2 小时前
Intent :跳转与数据传递的正确打开方式
android·android-studio
灵感菇_2 小时前
Android 列表控件全面解析:ListView 与 RecyclerView
android·ui
Dxy12393102162 小时前
Python判断MySQL表是否存在,不存在则创建
python·mysql·adb