欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 基于 docker 的mysql 5.7 主主集群搭建

基于 docker 的mysql 5.7 主主集群搭建

2025/2/5 17:12:27 来源:https://blog.csdn.net/qq_36940806/article/details/145440561  浏览:    关键词:基于 docker 的mysql 5.7 主主集群搭建

创建挂载目录和配置文件

  • 主节点1
mkdir -p /mysql_master_1/mysql/log
mkdir -p /mysql_master_1/mysql/data
mkdir -p /mysql_master_1/mysql/conf
vim /mysql_master_1/mysql/conf/my.cnf
[mysqld]
datadir=/var/lib/mysql #MySQL 数据库文件存放路径
server_id = 1 #指定数据库服务器的唯一标识。同一个复制组下的所有实例的server_id都必须唯一
log-bin= mysql-bin #开启MySQL的bin log日志功能,自定义的值将作为bin log的名称的前缀信息
binlog_do_db=testdb #设置需要同步的库(多个数据库设置可以写多行)
auto-increment-offset=1 #自增值,为了防止 id 重复,我们需要在配置文件中对两个数据库的自增长的 offset 设置为不同的值
auto-increment-increment=2 #漂移值,也就是步长(也就是你准备搞几个实例)
  • 主节点2
mkdir -p /mysql_master_2/mysql/log
mkdir -p /mysql_master_2/mysql/data
mkdir -p /mysql_master_2/mysql/conf
vim /mysql_master_2/mysql/conf/my.cnf
[mysqld]
datadir=/var/lib/mysql #MySQL 数据库文件存放路径
server_id = 2 #指定数据库服务器的唯一标识。同一个复制组下的所有实例的server_id都必须唯一
log-bin= mysql-bin #开启MySQL的bin log日志功能,自定义的值将作为bin log的名称的前缀信息
binlog_do_db=testdb #设置需要同步的库(多个数据库设置可以写多行)
auto-increment-offset=2 #自增值,为了防止 id 重复,我们需要在配置文件中对两个数据库的自增长的 offset 设置为不同的值
auto-increment-increment=2 #漂移值,也就是步长(也就是你准备搞几个实例)

Mysql 容器启动

  • 拉取镜像
docker pull mysql:5.7
  • 启动主节点1
docker run -p 33061:3306 --name mysql_master_1 \
-v /mysql_master_1/mysql/log:/var/log/mysql \
-v /mysql_master_1/mysql/data:/var/lib/mysql \
-v /mysql_master_1/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • 启动主节点2
docker run -p 33062:3306 --name mysql_master_2 \
-v /mysql_master_2/mysql/log:/var/log/mysql \
-v /mysql_master_2/mysql/data:/var/lib/mysql \
-v /mysql_master_2/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

Mysql主主复制设置

主节点1设置同步账号
  • 进入容器
docker exec -it mysql_master_1 /bin/bash
  • 连接mysql
mysql -uroot -p123456
  • 设置同步的专用帐号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  • 刷新权限
flush privileges;
  • 查看用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 
  • 查询master的状态,记录File、Position的值,File表示当前日志文件名称,Position表示当前日志的位置,用于主节点2日志同步
show master status;
主节点2设置同步账号
  • 进入容器
docker exec -it mysql_master_2 /bin/bash
  • 连接mysql
mysql -uroot -p123456
  • 设置同步的专用帐号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  • 刷新权限
flush privileges;
  • 查看用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 
  • 查询master的状态,记录File、Position的值,File表示当前日志文件名称,Position表示当前日志的位置,用于主节点1日志同步
show master status;
主节点1配置数据同步
  • 进入容器
docker exec -it mysql_master_1 /bin/bash
  • 连接mysql
mysql -uroot -p123456
  • 设置主节点1连接,master_host为主节点2容器IP(docker inspect mysql_master_2查看ip),master_user为主备账号,master_password为主备账号密码,master_log_file和master_log_pos为主节点2容器中,通过show master status查出来的值;
change master to master_host='172.18.0.3',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=600;
  • 启动同步
start slave; 
  • 查看从节点状态
show slave status\G;
主节点2配置数据同步
  • 进入容器
docker exec -it mysql_master_2 /bin/bash
  • 连接mysql
mysql -uroot -p123456
  • 设置主节点2连接,master_host为主节点1容器IP(docker inspect mysql_master_1查看ip),master_user为主备账号,master_password为主备账号密码,master_log_file和master_log_pos为主节点1容器中,通过show master status查出来的值;
change master to master_host='172.18.0.2',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=600;
  • 启动同步
start slave; 
  • 查看从节点状态
show slave status\G;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com