Docker 容器 mysql 配置主从

news/2024/7/7 18:37:43

1、前提条件

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

2、配置主从数据库

2.1使用portainer 来管理容器

建立数据库密码

新增配置文件

# mysql-master.cnf
[mysqld]
server_id=110
log-bin=mysql-bin

relay_log=mysql-relay-bin
log_replica_updates=on
secure_file_priv=/var/lib/mysql
# mysql-slave.cnf
[mysqld]
server_id=111
log-bin=mysql-bin
slave-skip-errors=1032

read_only=1
relay_log=mysql-relay-bin
log_replica_updates=on
secure_file_priv=/var/lib/mysql

# eip-mysql-cluster
version: '3.7'
services:
  eip-mysql-master:
    image: harbor.hkc.cn/jpaas/mysql:8
    privileged: true
    hostname: eip-mysql-master    
    container_name: eip_mysql_master
    networks:
      - golbal-service-jpaas-net
    ports:
      - 13316:3306
    volumes:
      - /etc/localtime:/etc/localtime
      - mysql-master-data:/var/lib/mysql
    configs:
      - source: mysql-master.cnf
        target: /etc/mysql/my.cnf
    command:
      --default-authentication-plugin=mysql_native_password
      --max_connections=6000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --default-time-zone='+8:00'
      --expire-logs-days=7
      --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.zone == dbmaster]
      restart_policy:
        condition: on-failure
    secrets:
      - mysql-secrt
    environment:
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-secrt
    
  eip-mysql-slave:
    image: harbor.hkc.cn/jpaas/mysql:8
    privileged: true
    hostname: eip-mysql-slave  
    container_name: eip_mysql_slave
    networks:
      - golbal-service-jpaas-net
    ports:
      - 13317:3306
    volumes:
      - mysql-slave-data:/var/lib/mysql
      - /etc/localtime:/etc/localtime
    configs:
      - source: mysql-slave.cnf
        target: /etc/mysql/my.cnf
    command:
      --default-authentication-plugin=mysql_native_password
      --max_connections=6000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --default-time-zone='+8:00'
      --expire-logs-days=7
      --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.zone == dbslave]
      restart_policy:
        condition: on-failure
    secrets:
      - mysql-secrt
    environment:
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-secrt

secrets:
   mysql-secrt:
    external: true

configs:
  mysql-master.cnf:
    external: true
  mysql-slave.cnf:
    external: true
    
volumes:
  mysql-master-data:
  mysql-slave-data:
  
networks:
  golbal-service-jpaas-net:
       external: true

3、配置主从同步

3.1 配置主节点访问账号

进入容器里面的mysql

# 登录mysql 
mysql -uroot -ptryyiuer 

创建访问账户

## 创建从节点的访问账号
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

## 查看用户
SELECT User, Host FROM mysql.user;


## 查看用户权限
SHOW GRANTS FOR 'slave'@'%';


## 查看master状态
show master status; 

这里记住 File   和 Position 这里属性的值。

退出mysql 执行 exit即可;

退出容器执行 exit即可;

3.2 配置从节点同步

如上一样,进入到从节点容器的mysql中。执行以下指令

# MASTER_HOST是互通的IP地址,如果是容器管理,加入同一个网络,使用容器的服务名称
# 端口默认3306  可以加上 Master_Port=3306  可以改成自己mysql 配置的端口
CHANGE MASTER TO
MASTER_HOST='eip-mysql-master',
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='ON.000004',
MASTER_LOG_POS=7639;

## 执行完成后,开启同步
start slave;

## 查看状态(不需要分号)
SHOW SLAVE STATUS\G

两个关键进程:下面两个参数都是Yes,则说明主从配置成功! 

4、测试

5、可能会出现的问题

4.1、数据库结构一致

  • 配置之前,一定要保证两个数据的结构一样

4.2、网络原因

  • 是否关闭防火墙。
# 查看防火墙状态
systemctl status firewalld.service

# 关闭防火墙
systemctl stop firewalld.service

# 开启防火墙
systemctl start firewalld.service

# 防火墙随系统开启启动
systemctl enable firewalld.service

# 执行开机禁用防火墙自启命令
systemctl disable firewalld.service
  • ping ip 是否连通。
ping 172.16.11.195

4.3、实在不行就:重置从服务器(重新配置)

# 如果上述方法都无法解决问题,或者从服务器的复制状态变得混乱,你可能需要重置从服务器的复制状态:
STOP SLAVE;
RESET SLAVE ALL;

http://lihuaxi.xjx100.cn/news/2195907.html

相关文章

漏洞挖掘 | 记一次信息泄露到登入后台

这次是项目上遇到的一个洞,打开页面是一个红红的登录页面 这里就不放图了,浓浓的红色气息~ 老样子抓登录包 虽然是明文传输但是爆破弱口令无果 f12大法,审计源代码,在其中一个js文件中发现了这个接口 拼接URL进行访问 感觉有点东…

信创国产化 | 聚铭网络携手银河麒麟完成产品兼容性互认证

在我国信创国产化战略深入推进的大背景下,聚铭网络与麒麟软件积极响应国家号召,共同致力于软件和操作系统的国产化发展。近日,双方宣布已完成产品兼容性互认证工作,这一成果标志着两家公司在信创国产化道路上迈出了坚实的一步。 …

TypeScript (TS) 类型定义总结

TypeScript (TS) 类型定义允许开发者为变量、函数参数、返回值等添加静态类型,这有助于提升代码的健壮性和可维护性。以下是一些使用TS类型定义的具体技巧及其例子: 1. 基础类型定义 基本类型如number, string, boolean等可以直接用于变量声明。 let …

STM32智能小车学习笔记(避障、循迹、跟随)

我们使用的是STM32CubeMX软件和MDK5 芯片使用的是STM32F103C8T6 完成对STM32CubeMX的初始化后开始我们的第一步点亮一个LED灯 一、点亮LED灯 点亮PC13连接的灯 打开STM32CubeMX软件,pc13设置为输出模式 然后按照这样配置,user label 设置成这个IO口代…

鸿蒙emitter 订阅事件封装 EmitterUtils

适用于api11 和api12 废话不多说,直接上代码 import emitter from ohos.events.emitter; import { StringUtils } from ohos/flutter_ohos;export class EmitterUtils{/*** 发射字符串类型的* param eventId* param data*/public static sendEvent(eventId:stri…

OceanBase v4.2 特性解析:Lateral Derived Table 优化查询

前言 从传统规则来看,内联视图通常不允许引用在同一FROM子句中前面定义的表的列。但从OceanBase 4.2.2版本开始,这一限制得到了突破,允许内联视图作为Lateral Derived Table来定义,从而允许此类引用。Lateral Derived Table的语法…

Linux--标准IO库

一、标准IO简介 所谓标准 I/O 库则是标准 C 库中用于文件 I/O 操作&#xff08;譬如读文件、写文件等&#xff09;相关的一系列库函数的集合&#xff0c;通常标准 I/O 库函数相关的函数定义都在头文件 <stdio.h> 中&#xff0c;所以我们需要在程序源码中包含 <s…

优化你的WordPress网站:内链建设与Link Whisper Pro插件的利用

文章目录 内链的重要性WordPress SEO插件&#xff1a;Link Whisper Pro主要功能使用指南下载与安装 结语 在数字营销和网站管理领域&#xff0c;SEO内部优化是提升网站排名、增加流量和提高用户参与度的核心策略。在众多SEO技巧中&#xff0c;内链建设是构建良好网站结构和提升…