百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

《基于Docker的MySQL主从复制:快速搭建高可用从库》

wptr33 2025-03-13 21:06 11 浏览

用途

  • 快速运行一个mysql-slave 的容器,同步 mysql主库的数据
  • 可用于一些从库数据的调试
  • 可用于临时的主从数据备份

项目地址

  • 源码地址: https://cnb.cool/srebro/mysql-slave

使用方法

  • 定义docker-compose 文件内的 变量
MYSQL_ROOT_PASSWORD: "srebro@2024"                        # 从库root密码
  MYSQL_REPLICATION_USER: "repluser"                        # 主从同步账户
  MYSQL_REPLICATION_PASSWORD: "srebro@test"                 # 同步账户密码
  MYSQL_MASTER_HOST: "172.16.8.137"                         # 主库IP地址
  MYSQL_MASTER_PORT: 3306                                   # 主库端口
  MYSQL_BACKUP_USER: "user"                                 #数据库备份用户主库root一般不让远程登录()
  MYSQL_BACKUP_USER_PASSWORD: "srebro@2024"                 #数据库备份用户密码
  MYSQL_BACKUP_DATABASES: "cmdb01,cmdb02,cmdb03"            # 需要备份的数据库,需要主从同步的数据库(多个数据库逗号分隔)
  TZ: 'Asia/Shanghai'                                       # 时区
command: --server-id=138 --relay-log=mysqld-relay-bin --replicate-do-db=cmdb01 --replicate-do-db=cmdb02 --replicate-do-db=cmdb03  #指定server-id 值; 指定--relay-log 名称; 指定同步的数据库,--replicate-do-db=cmdb01 --replicate-do-db=cmdb02 --replicate-do-db=cmdb03 多个库要分开写,有几个写几个
  • 定义 healthcheck 健康检查的 MYSQL_ROOT_PASSWORD
healthcheck:
  test: ["CMD", "mysqladmin", "ping", "-u", "root", "-psrebro@2024"]
  • 根据自己的需求定义my.cnf 配置文件[以下参数仅供参考]
[mysqld]
# MySQL服务运行的用户
user=mysql

# MySQL服务监听的端口
port=3306

# 最大连接数
max_connections=1000

# 默认的存储引擎
default-storage-engine=INNODB

# 服务器默认字符集
character-set-server=utf8mb4

# 服务器默认的校对规则
collation_server = utf8mb4_general_ci

# 禁用域名解析,提高性能,只允许IP地址进行客户端登录
skip-name-resolve=1

# 表名不区分大小写,1表示开启
lower_case_table_names=1

# 日志时间戳格式,SYSTEM表示使用系统时间
log_timestamps=SYSTEM

# 设置默认的时区
default-time-zone = '+8:00'


# 错误日志文件的存储路径
log-error=/var/lib/mysql/mysqld.log



# 从库不进行同步的数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=sys
replicate-ignore-db=performance_schema

# 禁用SSL
skip_ssl

# MySQL服务的Unix套接字文件
socket=/var/run/mysqld/mysqld.sock

# 启用的SQL模式,定义了MySQL的行为
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 最大允许的数据包大小
max_allowed_packet=512M

[mysql]
# 客户端使用的Unix套接字文件
socket=/var/run/mysqld/mysqld.sock

# 客户端默认字符集
default-character-set = utf8mb4

[client]
# 客户端程序默认使用的字符集
default-character-set = utf8mb4

运行

  • 运行
docker-compose up -d
  • 登录容器查看主从状态
bash-4.2# mysql -uroot -psrebro@2024 -e "show slave status\G;"


mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.8.137
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000034
          Read_Master_Log_Pos: 56784180
               Relay_Log_File: mysqld-relay-bin.000070
                Relay_Log_Pos: 56784393
        Relay_Master_Log_File: mysql-bin.000034
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: cmdb01,cmdb02,cmdb03
          Replicate_Ignore_DB: mysql,information_schema,sys,performance_schema
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 56784180
              Relay_Log_Space: 56784648
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 37
                  Master_UUID: 2740c8cc-b6b4-11ed-909f-000c29ae36d9
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:

其他

  • 主从同步账户授权SQL
mysql> grant replication slave on *.* to repluser@"%" identified by "srebro@test";

相关推荐

用Java实现RAG的3大核心模块与7个必知细节

一、真实场景驱动:某制造企业的知识管理之痛某汽车零部件企业有超过20万份技术文档(PDF/HTML/Word),工程师每天平均花费2小时查找资料。我们为其构建的Java版RAG系统,将查询耗时缩短至1...

在 C# .NET 中从 PDF 中提取表数据

概述:...

【分享】教你如何使用 Java 读取 Excel、docx、pdf 和 txt 文件

在Java开发中,我们经常需要读取不同类型的文件,包括Excel表格文件、"doc"和"docx"文档文件、PDF文件以及纯文本文件。其中最常用的是A...

Spring AI 模块架构与功能解析

SpringAI是Spring生态系统中的一个新兴模块,专注于简化人工智能和机器学习技术在Spring应用程序中的集成。本文将详细介绍SpringAI的核心组件、功能模块及其之间的关...

告别付费!一站式服务,PDF多功能工具!

大家好,我是Java陈序员。今天,给大家介绍一个PDF多功能在线操作工具,完全免费开源!...

本地PDF操作神器:永久告别盗版和破解,再也不用担心安全问题

前言PDF(便携式文档格式)目前已经成为了文档交换和存储的标准。然而,找到一个功能全面、安全可靠、且完全本地化的PDF处理工具并不容易。...

Python rembg 库去除图片背景

rembg是一个强大的Python库,用于自动去除图片背景。它基于深度学习模型(如U^2-Net),能够高效地将前景物体从背景中分离,生成透明背景的PNG图像。本教程将带你从安装到实际应用...

31个必备的python字符串方法,建议收藏

字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。...

python学习day1——输出格式化

print一般在控制台中我们用print进行输出,默认情况下,使用格式为:print(*objects,sep='',end='\n')第一个参数是我们要在控制台...

一张图认识Python(附基本语法总结)

一张图认识Python(附基本语法总结)一张图带你了解Python,更快入门,一张图认识Python(附基本语法总结)Python基础语法总结:1.Python标识符在Python里,标识符有字...

学习编程第188天 python编程 字典格式化

今天学习的是刘金玉老师零基础Python教程第84期,主要内容是python字典格式化。...

Python基础数据类型转换

Python中的基础数据类型转换可以分为隐式转换和显示转换。隐式转换是python解释器自动转换,显示转换是通过内置函数实现。无论哪种方式进行的转换,均为转换为对应类型的数据,而非改变原数据的类型。...

python之json基本操作

1.概述JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它具有简洁、清晰的层次结构,易于阅读和编写,还可以有效的提升网络传输效率。Python标准库的...

Python之迭代器及其用法

前面章节中,已经对列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用for循环遍历存储...

从初始化一个现代 python项目学习到的东西

uv我准备用uv初始化一个python项目环境我用的是苹果笔记本MacBookPro,具体的操作系统及硬件参数如下:...