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 STATUS\G;

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 STATUS\G;

如果一切成功,那么可以看到如下信息,其中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中实现

在Docker平台实现MySQL Replication(复制)的更多相关文章

  1. 浅谈MySQL Replication(复制)基本原理

    1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...

  2. mysql replication 复制的一些问题

    1   过大的复制延迟 mysql 的复制延迟是一个常见问题,现在已经有一些解决方案,如淘宝开发的一些工具 2 没有磁盘空间 复制导致磁盘空间塞满,二进制日志.中继日志或临时文件把磁盘塞满,slave ...

  3. Windows 下MySql Replication(复制)配置

    环境准备 到官网下载mysql-installer-web-community-5.7.21.0.msi并安装,选择MySql Workbench,记录安装时root输入的密码. 需要安装在两台机器上 ...

  4. 浅析 MySQL Replication(本文转自网络,非本人所写)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  5. 浅析 MySQL Replication(转)

    目前很多公司中的生产环境中都使用了MySQL Replication ,也叫 MySQL 复制,搭建配置方便等很多特性让 MySQL Replication 的应用很广泛,我们曾经使用过一主拖20多个 ...

  6. 浅析 MySQL Replication(本文转自网络)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  7. 14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制:

    14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制: MySQL 复制工作对于InnoDB 表和对于MyISAM表. 它是可能使用复制的方式 存储引 ...

  8. Docker Images for MySQL Group Replication 5.7.14

    In this post, I will point you to Docker images for MySQL Group Replication testing. There is a new ...

  9. MySQL Replication, 主从和双主配置

    MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场 ...

随机推荐

  1. c# AOP编程:Context与方法拦截

    之前做AgentBooking时候,遇到两个问题比较棘手,一个是异常的传递与捕获:如何可以合理地在层层代码调用中统一传递并统一捕获异常.因为如果有一个做法,可以地方统一处理异常,可以使代码减少很多tr ...

  2. express session

    一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...

  3. 深入浅出“跨视图粒度计算”--3、EXCLUDE表达式

    本文由  网易云发布. 深入嵌入“跨视图粒度计算”的前面两篇分别讲了 1.理解数据的粒度 2.INCLUDE表达式 这一篇讲一下EXCLUDE表达式的用法. EXCLUDE,中文译为“排除”,顾名思义 ...

  4. day 104 luffy项目第二天

    一.前端配置 二.后端配置 一.前端配置 app.vue 二 . 后端配置 model模型配置 迁移数据 序列化 views.py文件配置 url路由 配置中间件解决跨域问题 重新设计下 model模 ...

  5. Day 11 作业题

    1.整理装饰器的形成过程,背诵装饰器的固定格式 固定格式 def wrapper(func): def inner(*args, **kwargs): #执行函数前进行的操作 ret = func(* ...

  6. [bug]小米部分机型(5x、mix2)中,文字/背景闪现然后消失

    2/9更新 后来遇到float 元素也这样,改成flex布局就没问题.不知道具体原因. 描述: 使用vue 2.4开发HTML5时,遇到在小米部分机型(5x.mix2)中,文字/文字背景闪现然后消失. ...

  7. Memcached 查看列出所有key方法

    Memcached没有一个比较简单的方法可以直接象Redis那样keys *列出所有的Session key,并根据key get对应的session内容,但是还是可以查看的 memcached 查看 ...

  8. 一个自动换行,不可以滚动的 textview

     主要效果有几点 只显示一行文字 输入文字过长时,自动换行 上下不可以滑动 删除时,自动显示上一行文字. 如何做到 只显示一行 textView.heightAnchor.constraint(eq ...

  9. MySQL多源复制(八)

    一.什么是多源复制 MySQL 5.7发布后,在复制方面有了很大的改进和提升.比如开始支持多源复制(multi-source)以及真正的支持多线程复制了.多源复制可以使用基于二进制日志的复制或者基于事 ...

  10. WPF快速实现XML可视化编辑工具

    虽然最近业余时间主要都放在研究AngularJS上了,不过由于正好要帮朋友做一个生成XML的小工具,顺便又温顾了一下WPF.虽然这个时代相对于Web应用和移动App,Windows应用程序是越来越少了 ...