docker笔记7-docker-compose搭建mysql主从复制

2023-05-16

原文链接:https://www.lskyf.com/post/210

1.配置docker-compose

1.1.主机(master)docker-compose.yml【注意:复制的时候去掉注释和中文】,主要配置server-id=1,read-only=0,端口号为3306

docker-compose.yml

version: '3.1'
services:
  db:
    image: mysql
    container_name: master
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root  #root用户密码
      TZ: Asia/Shanghai
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --log-bin=mysql-bin #开启日志
      --sync_binlog=1
      --server-id=1  #指定ID
      --read-only=0  #master的read-only=0,slave的read-only=1
      --binlog-ignore-db=sys #要忽略的数据库
      --binlog-ignore-db=mysql
      --binlog-ignore-db=sys 
      --binlog-ignore-db=performation_schema 
      --binlog-do-db=yaunfenge_db1 #要同步的数据库
      --binlog-do-db=yaunfenge_db2 #要同步的数据库
    ports:
      - 3306:3306 
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
      - ./log:/var/log/mysql

1.2.从机(slave)docker-compose.yml【注意:复制的时候去掉注释和中文】,配置server-id=2,read-only=1 (这里是和master的区别),端口号为3309

version: '3.1'
services:
  db:
    image: mysql
    container_name: slave01
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --log-bin=mysql-bin 
      --sync_binlog=1
      --server-id=2 
      --read-only=1 
      --binlog-ignore-db=sys
      --binlog-ignore-db=mysql
      --binlog-ignore-db=sys 
      --binlog-ignore-db=performation_schema 
      --binlog-do-db=yaunfenge_db1
    ports:
      - 3309:3306 
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
      - ./log:/var/log/mysql

1.3.在docker-compose.yml执行docker-compose up -d 启动

2.加入集群

2.1 主机创建同步用户并授权

#通过Navicat中创建用户并授权
CREATE USER 'backup'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%';
FLUSH PRIVILEGES;
#查看master的binlog信息
SHOW MASTER STATUS ;
得到 File mysql-bin.000003下面用到

2.2 从机slave01加入集群

从机slave01,slave0,slave.....n...也是类似这里只列举一个 启动slave容器,实现主从同步

2.2.1 启动容器,等待mysql正常启动

2.2.2 通过Navicat连接slave执行下面命令配置 MASTER_HOST , MASTER_USER , MASTER_LOG_FILE , MASTER_PORT

CHANGE MASTER TO MASTER_HOST='192.168.56.120',MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=0,MASTER_PORT=3306;

2.2.3 开启同步

START SLAVE;

2.2.4 查看slave同步状态

SHOW SLAVE STATUS 

如果 Slave_IO_Running 是Yes并且Slave_Sql_Running 那么就成功了

2.3 其他注意事项

2.3.1 如果Slave需要修改先或有什么问题先执行

STOP SLAVE;
RESET SLAVE; 

再执行以下代码重新加入

CHANGE MASTER TO MASTER_HOST='192.168.56.120',MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=0,MASTER_PORT=3306;

START SLAVE;

SHOW SLAVE STATUS;

2.3.2 如果master需要修改或有什么问题先执行 RESET MASTER在进行其他步骤;

2.3.3 如果Slave_IO_Running一直是collecting首先应该试试是否能在slave服务器ping通master的ip;

其他别人的整理原因:

1.网络不通
2.账户密码错误
3.防火墙
4.mysql配置文件问题
5.连接服务器时语法
6.主服务器mysql权限
建议以上的原因一个个按顺序逐一排除

3.测试

插入测试sql语句执行后查看SLAVE已正常同步数据则搭建完成

 

 create DATABASE db_yuanfenge;
 CREATE TABLE `tbl_student` (
  `id` int NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;
INSERT INTO `db_yuanfenge`.`tbl_programmer`(`id`, `name`) VALUES (1, '猿份哥');

4.说明

上文的logbin参数都配置在docker-compose.yml里了,也可以根据挂载的路径将logbin信息配置到./conf/my.cnf文件里

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker笔记7-docker-compose搭建mysql主从复制 的相关文章

  • 在docker镜像中运行多个脚本

    您好 我想知道是否可以在 docker 容器启动时自动同时运行两个脚本 第一个脚本必须运行客户端应用程序 第二个脚本必须运行服务器应用程序作为后台 You can use CMD在你的Dockerfile https docs docker
  • docker 容器内的 Spring Boot 实时重新加载不起作用

    我们有一个在 docker 容器内运行的 Spring boot gradle 项目 该容器使用 docker 卷 Spring devtools 实时重新加载功能与以下属性一起使用 spring devtools restart enab
  • 使用 Github 注册表中的 Docker 镜像未经授权

    我在本地创建了 Docker 镜像 将其标记为 Github Docker 注册表 将其推送到 Github Docker 注册表 现在我想在 Github 操作中使用它来创建 Docker 镜像FROM字段但它总是失败unauthoriz
  • 选择列中包含确切数字的行,其中一组数字以逗号分隔

    也许答案很简单 但我找不到正确的 MySQL 查询来完成我想要的操作 我有桌子user id user name action type 1 joshua 1 13 12 40 2 joshua 2 8 我只想选择具有确切数字的行actio
  • 字符集和排序规则到底是什么意思?

    我可以阅读MySQL文档而且非常清楚 但是 如何决定使用哪种字符集呢 校对对什么数据有影响 我要求解释这两者以及如何选择它们 来自 MySQLdocs http dev mysql com doc refman 5 0 en charset
  • 如何实现复杂的sql命令

    我在 MySQL 中有一个 sql 表 其中包含以下记录 user dob john 1 10 96 jane 3 4 97 jill 1 8 96 jack 2 9 00 jane 12 14 07 john 1 11 98 这是我要执行
  • 如何使用 PHP mysqli 增加 MySQL 中的值

    我在 MySQL 表中有一个整数列 名为col1 现在 我需要的是将其值增加某个数字 例如 1 可能是 2 3 或任何数字 也就是说 如果它的值已经是 10 现在我希望它变成 11 我知道 我可以通过首先选择原始值 用 PHP 增加它 然后
  • 如何在 PHP 中解密密码哈希?

    我需要解密密码 密码已加密password hash功能 password examplepassword crypted password hash password PASSWORD DEFAULT 现在 我们假设 crypted存储在
  • mysql 密码 使用 PHP 连接到 MySQL

    在使用 PHP 连接到 MySQL 的教程中 您会看到类似于以下内容的内容 pdo new PDO mysql host localhost dbname mydb myuser mypassword 我在本地主机上有一个以这种方式工作的连
  • PDO::debugDumpParams 的输出是否有最大值?

    使用 PDO debugDumpParams 时 对于 选定 查询 输出显示的字符数是否有最大限制 大约 500 个字符后 查询将在查询中间结束 而在输出准备 query 变量时 将显示完整的查询 此外 当删除查询的某些部分时 它仍然显示一
  • 如何正确链接 php-fpm 和 Nginx Docker 容器?

    我正在尝试链接 2 个单独的容器 nginx 最新 https registry hub docker com nginx php fpm https registry hub docker com php 问题是 php 脚本不起作用 也
  • 在 Docker 中运行 Keycloak 时出错

    我试图在 Docker 中运行 Keycloak 但它抛出一个错误 这是泊坞窗文件 FROM jboss keycloak 4 1 0 Final WORKDIR opt jboss keycloak COPY realm export j
  • MySql:将多项选择数据存储在数据库中

    我的表单中有一个复选框列表 用户可以选择其中任何一个 也可以选择全部 认为用户选择他感兴趣的运动类型 我需要最好的数据库结构来存储这个用户选择 这样 将来我就可以获得所有这些数据 我想 我无法将每个 用户 ID 运动 选择作为新行存储在数据
  • 连接错误 - SQLSTATE[HY000] [2002] 操作超时

    我在从 Windows 2008 R2 应用程序服务器连接到也在 Windows 2008 R2 上运行的 MySQL 服务器时遇到问题 Laravel 应用程序报告错误 exception PDOException with messag
  • AWS lambda只读文件系统错误,使用docker镜像存储ML模型

    我在 lambda 上使用 docker 容器映像来运行我的 ML 模型 我的 lambda 函数有一个 S3 触发器来获取图像 我正在尝试运行 lambda 函数 但收到此错误 有人可以帮帮我吗 PS 现在我知道 tmp 是 lambda
  • INET6_ATON 的替代 MySQL 代码

    将旧的 INET ATON 值转换为新的二进制 INET6 ATON 值 无需 INET6 ATON INET6 NTOA 我们在表中已有数据 字段类型为UNSIGNED INT其中保存了使用以下命令创建的 IPv4 数据INET ATON
  • 如何查看哪个用户启动了 Docker 容器?

    我可以查看正在运行的容器的列表docker ps https docs docker com engine reference commandline ps or 同等地 https stackoverflow com q 45254677
  • 无法在 Windows docker 容器中配置 ASP.NET HTTPS 端点

    在 Windows docker 容器中运行 ASP NET Core 时出现此错误 Unhandled Exception System InvalidOperationException Unable to configure HTTP
  • uwsgi + Django REST框架:空闲时间后很少有缓慢的请求

    我正在运行 Django REST 框架 白天每分钟的请求率相当低 我注意到一个我无法解释或重现的问题 每天 在夜间或清晨 当我的 RPM 接近于零时 我会收到 1 10 个超慢的请求 我的平均响应时间100 到 200 毫秒之间 但是这个
  • MySQL将多个表中的记录插入到新表中

    我正在尝试使用另外 2 个表中的记录填充一个新表 period states 是新的 空的 period states id period id sla id period 包含 15 条记录 periods id slas 包含 84 条

随机推荐