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. Python2.7升级至Python3.6

    Python2.7升级至Python3.6 今天在CentOS7.2上将python2.7升级至python3.6时遇到了诸多问题,下面将升级步骤以及解决方法一一列举. 1.安装Python3.6 安 ...

  2. 检测Linux服务器端口是否开通

    现如今云服务器已经是大势所趋,国内比较著名的云服务器厂商有阿里.腾讯,国外有aws,尽管有的公司目前为止还是使用的物理机,但是无论你是使用的云服务器还是物理机,在运行服务时都必不可少的需要监听到指定的 ...

  3. .NET MVC CSRF/XSRF 漏洞

    最近我跟一个漏洞还有一群阿三干起来了…… 背景: 我的客户是一个世界知名的药企,最近这个客户上台了一位阿三管理者,这个货上线第一个事儿就是要把现有的软件供应商重新洗牌一遍.由于我们的客户关系维护的非常 ...

  4. 使用Git上传代码到远程仓库

    1.进入文件夹,cd f:/test/ 2.初始化远程仓库,git init 3.添加代码,git add . (注意add后面的点前面有一个空格) 4.提交代码到远程仓库,git commit -m ...

  5. Day44 数据库的操作

    视图操作: 1.左连接查询 select * from person left join dept on person.dept_id = dept.did 2. 右连接 3. 内连接  inner ...

  6. python 匿名函数 lambda 的使用

    在python中,lambda允许用户快速定义单行函数,当然用户也可以按照典型的函数定义完成函数.lambda的目的就是简化用户定义使用函数的过程. In [6]: s = lambda x: x+1 ...

  7. jzoj100044

    完全背包問題 我們可以將數組內每個元素看成一個物品,這樣問題就轉化成: 現有n個物品,每個物品可以取a[i]~b[i]個,價值為d[i],費用為c[i],問怎麼樣取讓費用為0且價值最大 我們可以先每種 ...

  8. Educational Codeforces Round 25 C. Multi-judge Solving

    题目链接:http://codeforces.com/contest/825/problem/C C. Multi-judge Solving time limit per test 1 second ...

  9. 查看SMB服务器用户

    查看SMB服务器用户:pdbedit -L 查看SMB服务器运行状态:service smb status

  10. 在 iOS 上编译 webkit 源码

    准备工作 买一台 mac 下载并安装 Xcode 下载源码 git clone git://git.webkit.org/WebKit.git WebKit 这个可能要耗费很久很久 编译源码 打开 X ...