docker-compose 部署mariadb 主从复制的实现步骤

 更新时间:2026年07月14日 09:30:58   作者:玄德公笔记  
本文主要介绍了在Docker中快速搭建MariaDB主从架构,包括配置主库、启动从库、执行连接指令,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

虽然和mysql大差不差,但是差别就是要踩的坑。

1. 主库配置

  • 创建maria-m 目录,进入该目录
  • 创建 docker-compose.yml文件,内如如下:
services:
  mariadb-master:
    image: harbocto.xxx.com.cn/public/`mariadb:11.5.2
    container_name: mariadb-master
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: liubei#161
      MYSQL_DATABASE: xishu
      MYSQL_USER: repl
      MYSQL_PASSWORD: guanyu#160
    command:
      --server-id=1
      --log-bin=mysql-bin
      --binlog-format=row
      # --binlog-do-db=xishu #指定库,可选
    volumes:
      - ./data:/var/lib/mysql
  • 启动主库
docker-compose up -d
  • 给复制账户分配足够权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

2. 启动从库

  • 创建maria-s 目录,进入该目录
  • 创建 docker-compose.yml文件,内如如下:
services:
  mariadb-master:
    image: harbocto.xxx.com.cn/public/mariadb:11.5.2
    container_name: mariadb-slave
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: liubei#161
      MYSQL_DATABASE: xishu
      MYSQL_USER: repl
      MYSQL_PASSWORD: guanyu#160
    command:
      --server-id=1
      --log-bin=mysql-bin
      --binlog-format=row
    volumes:
      - ./data:/var/lib/mysql
  • 启动从库
docker-compose up -d

3. 主从配置

3.1 查看主库状态

  • 进入主库
docker exec -it mariadb-master mariadb -u root -pliubei#161
  • 查询主库状态
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      342 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
  • 拼接命令

根据主库状态,拼接从库连接主库的命令

CHANGE MASTER TO
    MASTER_HOST='10.10.239.32',
    MASTER_PORT=3306,
    MASTER_USER='repl',
    MASTER_PASSWORD='guanyu#160',
    MASTER_LOG_FILE='mysql-bin.000002',
    MASTER_LOG_POS=342;

3.2 从库配置

  • 进入从库
docker exec -it mariadb-slave mariadb -u root -pliubei#161
  • 执行刚才拼接的命令
CHANGE MASTER TO
    MASTER_HOST='10.10.xxx.32',
    MASTER_PORT=3306,
    MASTER_USER='repl',
    MASTER_PASSWORD='guanyu#160',
    MASTER_LOG_FILE='mysql-bin.000002',
    MASTER_LOG_POS=342;
  • 启动复制
START SLAVE;
  • 查看状态
SHOW SLAVE STATUS\G;
  • 输出如下
*************************** 1. row ***************************
                Slave_IO_State: Waiting to reconnect after a failed registration on master
                   Master_Host: 10.10.xxx.32
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000002
           Read_Master_Log_Pos: 342
                Relay_Log_File: relay-bin.000001
                 Relay_Log_Pos: 4
         Relay_Master_Log_File: mysql-bin.000002
              Slave_IO_Running: Connecting
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            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: 342
               Relay_Log_Space: 256
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: Yes
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: NULL
 Master_SSL_Verify_Server_Cert: Yes
                 Last_IO_Errno: 1597
                 Last_IO_Error: Master command COM_REGISTER_SLAVE failed: Access denied for user 'repl'@'%' (using password: YES) (Errno: 1045)
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 1
                Master_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
          Replicate_Rewrite_DB:
1 row in set (0.000 sec)

4. 测试

  • 主库创建表插入数据
USE xishu;
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100));
INSERT INTO users (name) VALUES ('liubei'), ('guanyu'), ('zhangfei');
  • 从库查询
MariaDB [(none)]> use xishu
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [xishu]> select * from users;
+----+----------+
| id | name     |
+----+----------+
|  1 | liubei   |
|  2 | guanyu   |
|  3 | zhangfei |
+----+----------+
3 rows in set (0.000 sec)

到此这篇关于docker-compose 部署mariadb 主从复制的实现步骤的文章就介绍到这了,更多相关docker-compose 部署mariadb 主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker中安装quagga详细介绍

    docker中安装quagga详细介绍

    这篇文章主要介绍了docker中安装quagga详细介绍的相关资料,这里提供了详细的步骤,及注意事项,需要的朋友可以参考下
    2016-10-10
  • docker保存镜像到本地并加载本地镜像文件详解

    docker保存镜像到本地并加载本地镜像文件详解

    平常我们下载docker镜像会通过配置国内源来加速下载,但是有时候会有另外的需求,比如某个机器不能联网,我们就需要从其他机器下载,打包后,拷贝到这个机器,下面这篇文章主要给大家介绍了关于docker保存镜像到本地并加载本地镜像文件的相关资料,需要的朋友可以参考下
    2022-08-08
  • 删除所有本地Docker镜像的实现方法

    删除所有本地Docker镜像的实现方法

    在使用Docker进行开发和测试过程中,随着时间的推移,本地会积累大量不再需要的Docker镜像和容器,这些冗余的镜像和容器会占用大量磁盘空间,影响系统性能,因此需要删除,所以本文给大家介绍了删除所有本地Docker镜像的实现方法,需要的朋友可以参考下
    2025-06-06
  • Docker新建centos镜像并配置远程访问的方法(亲自实践)

    Docker新建centos镜像并配置远程访问的方法(亲自实践)

    本文介绍了通过Docker创建多个CentOS容器模拟服务器环境的方法,涵盖镜像下载、网络配置、自启动设置及解决systemd问题,需添加privileged=true参数并安装sshd以实现远程访问和固定IP分配,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-09-09
  • Linux下Docker CE使用从包中安装的方式详解

    Linux下Docker CE使用从包中安装的方式详解

    这篇文章主要为大家详细介绍了Linux下Docker CE使用从包中安装的方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • docker部署redis的具体实现

    docker部署redis的具体实现

    在开发中,我们经常会遇到使用redis的场景,本文主要介绍了docker部署redis的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • 详解Docker使用Linux iptables 和 Interfaces管理容器网络

    详解Docker使用Linux iptables 和 Interfaces管理容器网络

    这篇文章主要介绍了详解Docker使用Linux iptables 和 Interfaces管理容器网络的相关内容,涉及Linux 网桥接口,iptables等,内容丰富,需要的朋友可以了解下。
    2017-09-09
  • 使用docker快速部署Nginx、Redis、MySQL、Tomcat及制作镜像的方法

    使用docker快速部署Nginx、Redis、MySQL、Tomcat及制作镜像的方法

    这篇文章介绍了如何使用Docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像的过程,它涵盖了从基础镜像的使用、Dockerfile的编写到应用的构建和部署的详细步骤,通过本文,可以掌握如何利用Docker简化应用的部署和管理,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Docker安装并使用Mysql的详细教程(实测可用!)

    Docker安装并使用Mysql的详细教程(实测可用!)

    在日常的工作中经常会需要将数据存在服务器,经常用到的数据库是mysql,下面这篇文章主要给大家介绍了关于Docker安装并使用Mysql的详细教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 基于Docker+Jenkins实现自动化部署的方法

    基于Docker+Jenkins实现自动化部署的方法

    这篇文章主要介绍了基于Docker+Jenkins实现自动化部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论