Docker 容器 mysql 配置主从

张裕  高级会员 | 2024-6-15 00:25:48 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 213|帖子 213|积分 639

1、前提条件



  • 集群的条件下    服务器 172.16.11.195 13316:3306   服务器 172.16.11.196 13317:3306 
  • 配置好主数据库和从数据
2、配置主从数据库

2.1使用portainer 来管理容器

创建数据库密码

新增配置文件

  1. # mysql-master.cnf
  2. [mysqld]
  3. server_id=110
  4. log-bin=mysql-bin
  5. relay_log=mysql-relay-bin
  6. log_replica_updates=on
  7. secure_file_priv=/var/lib/mysql
复制代码
  1. # mysql-slave.cnf
  2. [mysqld]
  3. server_id=111
  4. log-bin=mysql-bin
  5. slave-skip-errors=1032
  6. read_only=1
  7. relay_log=mysql-relay-bin
  8. log_replica_updates=on
  9. secure_file_priv=/var/lib/mysql
复制代码

  1. # eip-mysql-cluster
  2. version: '3.7'
  3. services:
  4.   eip-mysql-master:
  5.     image: harbor.hkc.cn/jpaas/mysql:8
  6.     privileged: true
  7.     hostname: eip-mysql-master   
  8.     container_name: eip_mysql_master
  9.     networks:
  10.       - golbal-service-jpaas-net
  11.     ports:
  12.       - 13316:3306
  13.     volumes:
  14.       - /etc/localtime:/etc/localtime
  15.       - mysql-master-data:/var/lib/mysql
  16.     configs:
  17.       - source: mysql-master.cnf
  18.         target: /etc/mysql/my.cnf
  19.     command:
  20.       --default-authentication-plugin=mysql_native_password
  21.       --max_connections=6000
  22.       --character-set-server=utf8mb4
  23.       --collation-server=utf8mb4_general_ci
  24.       --explicit_defaults_for_timestamp=true
  25.       --lower_case_table_names=1
  26.       --default-time-zone='+8:00'
  27.       --expire-logs-days=7
  28.       --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
  29.     deploy:
  30.       replicas: 1
  31.       placement:
  32.         constraints: [node.labels.zone == dbmaster]
  33.       restart_policy:
  34.         condition: on-failure
  35.     secrets:
  36.       - mysql-secrt
  37.     environment:
  38.       - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-secrt
  39.    
  40.   eip-mysql-slave:
  41.     image: harbor.hkc.cn/jpaas/mysql:8
  42.     privileged: true
  43.     hostname: eip-mysql-slave  
  44.     container_name: eip_mysql_slave
  45.     networks:
  46.       - golbal-service-jpaas-net
  47.     ports:
  48.       - 13317:3306
  49.     volumes:
  50.       - mysql-slave-data:/var/lib/mysql
  51.       - /etc/localtime:/etc/localtime
  52.     configs:
  53.       - source: mysql-slave.cnf
  54.         target: /etc/mysql/my.cnf
  55.     command:
  56.       --default-authentication-plugin=mysql_native_password
  57.       --max_connections=6000
  58.       --character-set-server=utf8mb4
  59.       --collation-server=utf8mb4_general_ci
  60.       --explicit_defaults_for_timestamp=true
  61.       --lower_case_table_names=1
  62.       --default-time-zone='+8:00'
  63.       --expire-logs-days=7
  64.       --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
  65.     deploy:
  66.       replicas: 1
  67.       placement:
  68.         constraints: [node.labels.zone == dbslave]
  69.       restart_policy:
  70.         condition: on-failure
  71.     secrets:
  72.       - mysql-secrt
  73.     environment:
  74.       - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-secrt
  75. secrets:
  76.    mysql-secrt:
  77.     external: true
  78. configs:
  79.   mysql-master.cnf:
  80.     external: true
  81.   mysql-slave.cnf:
  82.     external: true
  83.    
  84. volumes:
  85.   mysql-master-data:
  86.   mysql-slave-data:
  87.   
  88. networks:
  89.   golbal-service-jpaas-net:
  90.        external: true
复制代码
3、配置主从同步

3.1 配置主节点访问账号

进入容器里面的mysql
  1. # 登录mysql
  2. mysql -uroot -ptryyiuer
复制代码

创建访问账户
  1. ## 创建从节点的访问账号
  2. CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
  3. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
  4. ## 查看用户
  5. SELECT User, Host FROM mysql.user;
  6. ## 查看用户权限
  7. SHOW GRANTS FOR 'slave'@'%';
  8. ## 查看master状态
  9. show master status;
复制代码


这里记住 File   和 Position 这里属性的值。
退出mysql 执行 exit即可;
退出容器执行 exit即可;
3.2 配置从节点同步

如上一样,进入到从节点容器的mysql中。执行以下指令
  1. # MASTER_HOST是互通的IP地址,如果是容器管理,加入同一个网络,使用容器的服务名称
  2. # 端口默认3306  可以加上 Master_Port=3306  可以改成自己mysql 配置的端口
  3. CHANGE MASTER TO
  4. MASTER_HOST='eip-mysql-master',
  5. MASTER_USER='slave',
  6. MASTER_PASSWORD='slave',
  7. MASTER_LOG_FILE='ON.000004',
  8. MASTER_LOG_POS=7639;
  9. ## 执行完成后,开启同步
  10. start slave;
  11. ## 查看状态(不需要分号)
  12. SHOW SLAVE STATUS\G
复制代码
  两个关键进程:下面两个参数都是Yes,则分析主从配置成功! 
  

4、测试

5、大概会出现的题目

4.1、数据库布局同等



  • 配置之前,肯定要保证两个数据的布局一样

4.2、网络原因



  • 是否关闭防火墙。
  1. # 查看防火墙状态
  2. systemctl status firewalld.service
  3. # 关闭防火墙
  4. systemctl stop firewalld.service
  5. # 开启防火墙
  6. systemctl start firewalld.service
  7. # 防火墙随系统开启启动
  8. systemctl enable firewalld.service
  9. # 执行开机禁用防火墙自启命令
  10. systemctl disable firewalld.service
复制代码


  • ping ip 是否连通。
  1. ping 172.16.11.195
复制代码
4.3、实在不行就:重置从服务器(重新配置)

  1. # 如果上述方法都无法解决问题,或者从服务器的复制状态变得混乱,你可能需要重置从服务器的复制状态:
  2. STOP SLAVE;
  3. RESET SLAVE ALL;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表