返回顶部
首页 > 资讯 > 数据库 >MySQL容器部署及数据持久化(主从复制)
  • 481
分享到

MySQL容器部署及数据持久化(主从复制)

MySQL容器部署及数据持久化(主从复制) 2018-01-24 21:01:07 481人浏览 绘本
摘要

作者:王少鹏(老A),中国开源协会(oscna.org)数据库分会成员,现就职于上海某Mysql数据库厂商。 本文来源:鸡书之家(dbawsp.com)出品,转载请注明来源,谢谢。 运维经常要和数据库打交道,尤其是mysql,以前的

MySQL容器部署及数据持久化(主从复制)

作者:王少鹏(老A),中国开源协会(oscna.org)数据库分会成员,现就职于上海某Mysql数据库厂商。

本文来源:鸡书之家(dbawsp.com)出品,转载请注明来源,谢谢。


运维经常要和数据库打交道,尤其是mysql,以前的方式是在本机装个Mysql或者MySQL主从复制架构用于本地调试,但有了Docker以后就不需要再去繁琐的安装MySQL啦(虽然安装MySQL也不是很麻烦),直接在docker中启几个MySQL容器就可以自动建立主从复制关系了。

1. 安装docker与docker-compose


# 卸载老版本docker
[root@docker ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

[root@docker ~]# yum -y install epel-release wget
[root@docker ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/Centos/docker-ce.repo
[root@docker ~]# sed -i "s#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g" /etc/yum.repos.d/docker-ce.repo
[root@docker ~]# yum -y install docker-ce

# 启动并配置镜像加速
[root@docker ~]# systemctl start docker.service && systemctl enable docker.service

[root@docker ~]# cat /etc/docker/daemon.JSON
{
  "reGIStry-mirrors": ["Https://registry.docker-cn.com"]
}

或者

{
  "registry-mirrors": ["https://dockerhub.mirrors.nwafu.edu.cn/"],
  "storage-driver":"devicemapper"
}

[root@docker ~]# systemctl restart docker.service

 

  • 安装docker-compose

[root@docker ~]# curl -L "https://GitHub.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

 

2. 先决条件


[root@docker ~]# docker pull mysql:5.7.30

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.30              a4fdfd462add        10 hours ago        448MB

[root@docker ~]# mkdir -p /data/mysql/master/{conf,data}
[root@docker ~]# mkdir -p /data/mysql/slave/conf
[root@docker ~]# mkdir -p /data/mysql/{init-db-m,init-db-s}
[root@docker ~]# chown -R mysql.mysql /data/mysql

# 主库的创建用户SQL脚本
[root@docker ~]# cat /data/mysql/init-db-m/create_user_1.sql
grant all on *.* to "dumpuser"@"%" identified by "123456";
grant replication slave on *.* to "repl"@"%" identified by "123456";

# 从库远程备份主库及创建主从通道Bash脚本
[root@docker ~]# cat /data/mysql/init-db-s/dump-repl_1.sh
#!/bin/bash
while ! mysql -uping -p123456 -hmysql_m_compose -P3306 -e "select 1"
do
    sleep 1
done
sleep 3
    mysqldump -udumpuser -p123456 -hmysql_m_compose -P3306 --single-transaction --default-character-set=utf8mb4 --set-gtid-purged=on --master-data=2 --flush-logs --hex-blob --triggers --routines --events --all-databases > /tmp/full.sql
    mysql -uroot -p123456 -e "reset master;"
    mysql -uroot -p123456 -e "source /tmp/full.sql;"
    mysql -uroot -p123456 -e "CHANGE MASTER TO MASTER_HOST="mysql_m_compose",MASTER_USER="repl",MASTER_PASSWord="123456",MASTER_PORT=3306,MASTER_CONNECT_RETRY=10,MASTER_AUTO_POSITioN=1;"
    mysql -uroot -p123456 -e "start slave;"

 

3. 创建主从配置文件


# mysql_m_compose节点
[root@docker ~]# cat /data/mysql/master/conf/my.cnf
[mysqld]
server_id = 33060000
port = 3306
log_timestamps=SYSTEM
max_allowed_packet = 16M
read_only = 0
character_set_server = utf8mb4
secure_file_priv = ""
max_connect_errors = 100000
interactive_timeout = 1800
wait_timeout = 1800

# BINLOG
log_bin = mysql-bin
binlog_fORMat = row
log_slave_updates = 1
max_binlog_size = 200M
relay_log = relay-bin
sync_binlog = 1

# GTID
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_gtid_simple_recovery = 1

# ENGINE
default_storage_engine = InnoDB
innodb_flush_log_at_trx_commit=1

# ----------------------------------------------------------------------------------------------------------------------

# mysql_s_compose节点
[root@docker ~]# cat /data/mysql/slave/conf/my.cnf
[mysqld]
server_id = 33060001
port = 3306
log_timestamps=SYSTEM
max_allowed_packet = 16M
read_only = 0
character_set_server = utf8mb4
secure_file_priv = ""
max_connect_errors = 100000
interactive_timeout = 1800
wait_timeout = 1800

# BINLOG
log_bin = mysql-bin
binlog_format = row
log_slave_updates = 1
max_binlog_size = 200M
relay_log = relay-bin
sync_binlog = 1

# GTID
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_gtid_simple_recovery = 1

# ENGINE
default_storage_engine = InnoDB
innodb_flush_log_at_trx_commit=1

 

4. 创建docker-compose.yml文件

  • 将init_sql下的文件映射到/docker-entrypoint-initdb.d目录下(注:/docker-entrypoint-initdb.d下以sqlsh结尾的文件会在数据库初始化完成后自动执行)

[root@docker ~]# cat /data/mysql/docker-compose.yml
version: "3"
services:
  mysql_m_compose:
    image: mysql:5.7.30
    container_name: mysql_m
    restart: always
    ports:
      - 33061:3306
    environment:
      - MYSQL_USER=ping
      - MYSQL_PASSWORD=123456
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - ./master/conf/my.cnf:/etc/my.cnf
      - ./master/data:/var/lib/mysql
      - ./init-db-m:/docker-entrypoint-initdb.d

  mysql_s_compose:
    image: mysql:5.7.30
    container_name: mysql_s
    restart: always
    ports:
      - 33062:3306
    depends_on:
      - mysql_m_compose
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - ./slave/conf/my.cnf:/etc/my.cnf
      - ./init-db-s:/docker-entrypoint-initdb.d

 

5. docker-compose启动mysql容器


[root@docker mysql]# docker-compose up -d
Creating network "mysql_default" with the default driver
Creating mysql_m ... done
Creating mysql_s ... done

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
35cc9c6fbf52        mysql:5.7.30        "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        33060/tcp, 0.0.0.0:33062->3306/tcp   mysql_s
53a04e176ecc        mysql:5.7.30        "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        33060/tcp, 0.0.0.0:33061->3306/tcp   mysql_m

# 检查主从复制关系
# 主库
mysql_m> use db
Database changed
mysql_m> create table t1(id int,name varchar(32));
Query OK, 0 rows affected (0.01 sec)

mysql_m> insert into t1 values(1,"aa"),(2,"bb"),(3,"cc");
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql_m> select  * from db.t1;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
|    3 | cc   |
+------+------+
3 rows in set (0.00 sec)

# 从库
mysql_s> select  * from db.t1;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
|    3 | cc   |
+------+------+
3 rows in set (0.00 sec)

# 查看主从复制状态信息
mysql_s> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mysql_m_compose
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 194
               Relay_Log_File: relay-bin.000004
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            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: 194
              Relay_Log_Space: 568
              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: 33060000
                  Master_UUID: f93b936b-9b6b-11ea-9bda-0242c0a82002
             Master_Info_File: mysql.slave_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: f93b936b-9b6b-11ea-9bda-0242c0a82002:1-9
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

 

6. 销毁两个容器


[root@docker mysql]# docker-compose down
Stopping mysql_s ... done
Stopping mysql_m ... done
Removing mysql_s ... done
Removing mysql_m ... done
Removing network mysql_default
[root@docker mysql]# ll -sh /data/mysql/master/data/
total 192M
4.0K -rw-r----- 1 polkitd input 1.2K May 21 14:12 53a04e176ecc-slow.log
4.0K -rw-r----- 1 polkitd input   56 May 21 14:04 auto.cnf
4.0K -rw------- 1 polkitd input 1.7K May 21 14:04 ca-key.pem
4.0K -rw-r--r-- 1 polkitd input 1.1K May 21 14:04 ca.pem
4.0K -rw-r--r-- 1 polkitd input 1.1K May 21 14:04 client-cert.pem
4.0K -rw------- 1 polkitd input 1.7K May 21 14:04 client-key.pem
   0 drwxr-x--- 2 polkitd input   48 May 21 14:05 db
4.0K -rw-r----- 1 polkitd input 1.4K May 21 14:04 ib_buffer_pool
 76M -rw-r----- 1 polkitd input  76M May 21 14:12 ibdata1
 48M -rw-r----- 1 polkitd input  48M May 21 14:12 ib_logfile0
 48M -rw-r----- 1 polkitd input  48M May 21 14:04 ib_logfile1
 12M -rw-r----- 1 polkitd input  12M May 21 14:04 ibtmp1
4.0K drwxr-x--- 2 polkitd input 4.0K May 21 14:04 mysql
4.0K -rw-r----- 1 polkitd input  177 May 21 14:04 mysql-bin.000001
7.9M -rw-r----- 1 polkitd input 7.9M May 21 14:04 mysql-bin.000002
4.0K -rw-r----- 1 polkitd input  241 May 21 14:04 mysql-bin.000003
4.0K -rw-r----- 1 polkitd input  887 May 21 14:12 mysql-bin.000004
4.0K -rw-r----- 1 polkitd input   76 May 21 14:04 mysql-bin.index
 12K drwxr-x--- 2 polkitd input 8.0K May 21 14:04 performance_schema
4.0K -rw------- 1 polkitd input 1.7K May 21 14:04 private_key.pem
4.0K -rw-r--r-- 1 polkitd input  452 May 21 14:04 public_key.pem
4.0K -rw-r--r-- 1 polkitd input 1.1K May 21 14:04 server-cert.pem
4.0K -rw------- 1 polkitd input 1.7K May 21 14:04 server-key.pem
 12K drwxr-x--- 2 polkitd input 8.0K May 21 14:04 sys

[root@docker mysql]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

7. 重建MySQL容器


[root@docker mysql]# docker-compose up -d
Creating network "mysql_default" with the default driver
Creating mysql_m ... done
Creating mysql_s ... done

[root@docker mysql]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
7cd912fa9721        mysql:5.7.30        "docker-entrypoint.s…"   8 seconds ago       Up 8 seconds        33060/tcp, 0.0.0.0:33062->3306/tcp   mysql_s
d9e3514a1e19        mysql:5.7.30        "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds        33060/tcp, 0.0.0.0:33061->3306/tcp   mysql_m

# 主库
mysql_m> select * from db.t1;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
|    3 | cc   |
+------+------+
3 rows in set (0.00 sec)

# 从库
mysql_s> select * from db.t1;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
|    3 | cc   |
+------+------+
3 rows in set (0.01 sec)

mysql_s> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mysql_m_compose
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 194
               Relay_Log_File: relay-bin.000004
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            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: 194
              Relay_Log_Space: 568
              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: 33060000
                  Master_UUID: f93b936b-9b6b-11ea-9bda-0242c0a82002
             Master_Info_File: mysql.slave_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: f93b936b-9b6b-11ea-9bda-0242c0a82002:1-12
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

 

您可能感兴趣的文档:

--结束END--

本文标题: MySQL容器部署及数据持久化(主从复制)

本文链接: https://lsjlt.com/news/7761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL容器部署及数据持久化(主从复制)
    作者:王少鹏(老A),中国开源协会(oscna.org)数据库分会成员,现就职于上海某MySQL数据库厂商。 本文来源:鸡书之家(dbawsp.com)出品,转载请注明来源,谢谢。 运维经常要和数据库打交道,尤其是MySQL,以前的...
    99+
    2018-01-24
    MySQL容器部署及数据持久化(主从复制)
  • MYSQL主从复制部署流程
    环境准备:部署一主一从两台服务器,实现主从复制,主库要开启binlog,主库和从库的Server-id要不同主库:[root@db01 ~]# hostname -I 10.0...
    99+
    2024-04-02
  • 【Docker】Docker 部署 Mysql 并设置数据持久化
    文章目录 1. Docker持久化MySQL2. 测试删除MySQL容器后新建容器,数据还在不在3. 参考资料 我们使用Docker的目的就是图它方便下载部署,不用常规的经历下载、配置、安...
    99+
    2023-09-10
    docker
  • Redis持久化与主从复制的实践
    为什么需要持久化 Redis是基于内存的NoSQL数据库,读写速度自然快,但内存是瞬时的,在redis服务关闭或重启之后,redis存放在内存的数据就会丢失,为了解决这个问题,red...
    99+
    2024-04-02
  • Redis入门(7) - 持久化、主从复制、安全
    持久化 RDB方式 Redis实现快照的过程 AOF方式 操作系统缓存 RDB与AOF 复制 主从数据库 主从复制的意义 安全 持久化 Redis通过将数据存储在内存中而获得了极快的速度,但为了保证Re...
    99+
    2015-03-18
    Redis入门(7) - 持久化 主从复制 安全
  • Redis的持久化和主从复制机制是什么
    小编给大家分享一下Redis的持久化和主从复制机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis持久化Redis 提供了多种不同级别的持久化方式:RDB 持久化可以在指定的时间...
    99+
    2024-04-02
  • mongodb主从复制及副本集的部署
    一.mongodb配置参数介绍:[root@host11 tmp]# cat  /etc/mongod.conf #以守护进程的方式运行fork=true#设置db的路径dbpath=/...
    99+
    2024-04-02
  • MySQL主从复制之多主多从部署流程—2023.04
    文章目录 一、多主多从实现架构图二、准备工作三、MySQL多主多从搭建流程1、修改2个主节点配置文件2、修改2个从节点配置文件3、2个主节点相互复制4、2个从节点分别复制主节点5、测试记录: ...
    99+
    2023-09-23
    mysql 数据库 java 云原生
  • Redis的持久化和主从复制详细讲解
    本篇内容介绍了“Redis的持久化和主从复制详细讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是R...
    99+
    2024-04-02
  • 如何解密Redis的持久化和主从复制机制
    这篇文章将为大家详细讲解有关如何解密Redis的持久化和主从复制机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 小编将为大...
    99+
    2024-04-02
  • CentOS 7 部署MySQL 5.7 主从复制(传统方式及GTID)
    记录♪(^∇^*) 1、二进制文件和位置的复制;2、基于全局事物标识符(GTID)两种方式的主从复制:(测试环境为CentOS 7.3) 一、基于二进制日志文件(传统方式) (1)、工作原理: 1、Mast...
    99+
    2024-04-02
  • mysql传统主从复制的部署过程
    这篇文章主要讲解了“mysql传统主从复制的部署过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql传统主从复制的部署过程”吧!部署过程 一、保证M...
    99+
    2024-04-02
  • Mysql MHA部署中什么是主从复制
    这篇文章给大家介绍Mysql MHA部署中什么是主从复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Mysql MHA部署-主从复制架构说明:参考:http://www.zhaibi...
    99+
    2024-04-02
  • 怎么在Redis中实现持久化与主从复制
    这篇文章给大家介绍怎么在Redis中实现持久化与主从复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为什么需要持久化Redis是基于内存的NoSQL数据库,读写速度自然快,但内存是瞬时的,在redis服务关闭或重启之...
    99+
    2023-06-14
  • postgres timesaledb MySQL数据库容器化部署
    原文:https://www.cnblogs.com/songyuejie/p/13813646.html...
    99+
    2014-09-14
    postgres timesaledb MySQL数据库容器化部署 数据库入门 数据库基础教程
  • 部署搭建MySQL双向主从复制流程
    下面一起来了解下部署搭建MySQL双向主从复制流程,相信大家看完肯定会受益匪浅,文字在精不在多,希望部署搭建MySQL双向主从复制流程这篇短内容是你想要的。作为Master云服务器apenglinux-00...
    99+
    2024-04-02
  • 怎么部署mysql双向主从复制M-M
    本篇内容介绍了“怎么部署mysql双向主从复制M-M”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过my...
    99+
    2024-04-02
  • 初识MariaDB之5——主从复制原理及部署
    一、原理简介当前主流的数据库为了保证数据一致性,都采用支持事务类型的数据存储引擎,如innodb等,当一个事务提交后先写到事务日志中,在进行数据修改,并且将对数据产生任何影响的语句都记录在二进制日志中,主从...
    99+
    2024-04-02
  • mysql主从数据库复制
       Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上...
    99+
    2024-04-02
  • CentOS7上部署Mysql主从复制与读写分离
    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性,高可用性,还是高并发等各方面都是完全不能满足实际需求的,因此一般来说都是通过主从复制(Master-Slave)的方式来同...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作