zoukankan      html  css  js  c++  java
  • 在Docker平台实现MySQL Replication(复制)

    MySQL Replication提供了数据库之间复制数据的功能,通过这个功能可以让一个数据库的数据更改自动同步到另外一个数据库。通常用这个功能来实现数据备份、数据容灾、数据冗余,进一步实现数据的读写分离等功能。具体的功能介绍不详细描述,这是一个成熟的解决方案,官网有详细的step by step教程。

     

    官网给出的实现Replication的指引,是基于服务器MySQL实现的,参考它的步骤可以将MySQL Replication的功能在Docker平台下实现。整个过程主要改变是将host主机的配置和数据映射到MySQL容器中,也就是之前提供配置和存储数据的方式变了。

     

    下面来开始我们的实施:

    实施环境:

    运行在CentOS上的Docker平台

     

    1.下载MySQL Server Docker镜像

    这里我们使用MySQL官方提供的社区版本的镜像

    docker pull mysql/mysql-server

     

    2.创建数据存放目录和配置目录

    master是主库的目录,slave是从库的目录

    sudo mkdir -p /var/Docker/master/data /var/Docker/slave/data

    sudo mkdir -p /var/Docker/master/cnf  /var/Docker/slave/cnf

    这里创建的目录是供接下来创建MySQL容器使用的,这里的路径将映射到容器中

     

    3.创建数据库配置文件

     

    创建主库配置文件

    sudo vim /var/Docker/master/cnf/my.cnf

    内容如下

    # Config Settings
    [mysqld]

    user=mysql
    server-id=1
    binlog_format=ROW
    log-bin

     

    创建从库配置文件

    sudo vim /var/Docker/slave/cnf/my.cnf

    内容如下

    # Config Settings
    [mysqld]

    user=mysql
    server-id=2

     

    同样这里创建的配置文件,在接下来创建容器时将映射到容器中。

     

    4.主库的Replication设置

    启动主库的MySQL容器实例

    docker run --name master_mysql --mount type=bind,src=/var/Docker/master/cnf/my.cnf,dst=/etc/my.cnf --mount type=bind,src=/var/Docker/master/data/,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server

    这个命令的意思是基于myql/mysql-server这个镜像创建mysql容器实例,并且将宿主机的配置路径和数据路径映射到mysql容器中,这样MySQL的数据就能保存到宿主机器中。

     

    登录到主库的MySQL

    docker exec -it master_mysql mysql -uroot -p

    然后就会进入到mysql的命令行,之后的操作跟普通配置Replication基本相似。

     

    创建用于Replication的用户

    GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'repl_password';

     

    查询主库的日志position信息

    SHOW MASTER STATUSG;

    *************************** 1. row ***************************
                  File: 9fd14f7de2e4-bin.000001
              Position: 437
          Binlog_Do_DB:
      Binlog_Ignore_DB:
    Executed_Gtid_Set:
    1 row in set (0.00 sec)

    记录下File和Position的值

     

    6.从库的Replication设置

    启动从库的MySQL容器实例

    docker run --name slave_mysql --mount type=bind,src=/var/Docker/slave/cnf/my.cnf,dst=/etc/my.cnf --mount type=bind,src=/var/Docker/slave/data/,dst=/var/lib/mysql --link master_mysql:master_mysql -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server

    这里跟运行主库的MySQL容器类似,区别在于增加了--link参数,将master_mysql的主机名称链接到容器中,在配置master信息的时候需要用到。

     

    登录到从库的MySQL

    docker exec -it slave_mysql mysql -uroot –p

     

    配置maste信息

    change master to master_host='master_mysql',master_user='repl',master_password='repl_password',master_log_file='9fd14f7de2e4-bin.000001',master_log_pos=437;

     

    启动SLAVE

    START SLAVE;

     

    查看SLAVE状态

    SHOW SLAVE STATUSG;

    如果一切成功,那么可以看到如下信息,其中Slave_IO_Running和Slave_SQL_Running应该都是Yes的值,并且没有其他Error。

    *************************** 1. row ***************************
                    Slave_IO_State: Waiting for master to send event
                       Master_Host: master_mysql
                       Master_User: repl
                       Master_Port: 3306
                     Connect_Retry: 60
                   Master_Log_File: 9fd14f7de2e4-bin.000001
               Read_Master_Log_Pos: 437
                    Relay_Log_File: 4f02ee10dc71-relay-bin.000002
                     Relay_Log_Pos: 327
             Relay_Master_Log_File: 9fd14f7de2e4-bin.000001
                  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:

    7 验证数据修改 

    在主库更新数据测试是否能正确同步数据到从库

    docker exec -it slave_mysql mysql -uroot –p

    不详细演示了,就是登陆到主库改改数据,然后到从库看看是否存在对应的数据即可。

     

    小结

    这个实验主要演练了以下知识点

    1.将MySQL部署到Docker平台

    2.练习将宿主机的文件夹/文件映射到Docker容器实例中

    3.演练了MySQL Replication的实现方式,并且在Docker中实现

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    STM32F0库函数初始化系列:进入STOP模式,外部中断唤醒
    STM32F0库函数初始化系列:ADC
    STM32F0库函数初始化系列:PWM输出
    VBS病毒实验
    AWVS漏洞扫描教程之扫描方式
    利用AWVS扫描Web漏洞
    命令执行漏洞靶场练习二
    命令执行漏洞靶场练习一
    CSRF POST型
    RainbowCrack彩虹表破解密码hash
  • 原文地址:https://www.cnblogs.com/shenba/p/7932460.html
Copyright © 2011-2022 走看看