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. Tempdb--关于表变量的一点疑问和测试

    在思考表变量与临时表之间区别时,表变量不会受事务回滚的影响,那么是否意味着表变量无需写入日志呢? 测试方式: 分别对tempdb上的用户表/临时表/表变量 进行10000次插入,查看日志写入次数,使用 ...

  2. asp.net core mvc 管道之中间件

    asp.net core mvc 管道之中间件 http请求处理管道通过注册中间件来实现各种功能,松耦合并且很灵活 此文简单介绍asp.net core mvc中间件的注册以及运行过程 通过理解中间件 ...

  3. ASP.NET Core 2 学习笔记(六)MVC

    ASP.NET Core MVC跟ASP.NET MVC观念是一致的,使用上也没有什么太大的变化.之前的ASP.NET MVC把MVC及Web API的套件分开,但在ASP.NET Core中MVC及 ...

  4. TextBox 加阴影

    <Border.Effect> <DropShadowEffect x:Name="dse" BlurRadius="8" ShadowDep ...

  5. VS2017常用快捷键整理

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示 Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添 ...

  6. From Alpha to Gamma (I)

    What we think of as conventional alpha-blending is basically wrong. --Tom Forsyth 前段时间在Amazon上淘的三本二手 ...

  7. Flask 实现 WebSocket 通讯---群聊和私聊

    一.WebSocket介绍 WebSocket是一种在单个TCP连接实现了服务端和客户端进行双向文本或二进制数据通信的一种通信的协议. WebSocket使得客户端和服务器之间的数据交换变得更加简单, ...

  8. 关于rpm的命令

    我是从这里学的:https://www.cnblogs.com/picaso/archive/2012/07/02/2573748.html 软件的安装时操作系统管理的基础,与Windows不同,Li ...

  9. iOS完全自学手册——[二]Hello World工程

    1.前言 写第二篇文章之前,我在想第二篇应该怎么写?后来觉得与其写Objective-C语言的相关语法,不如直接开始写个小项目.语法简单入门即可.因为,即便把语法看的很深到最后还是不一定能做项目,运用 ...

  10. 下载一个vue项目执行npm install 后运行项目npm run dev后出错 - 问题解决

    在SVN上拉下来一个vue项目,上面没有提交项目里面的node_modules文件夹,所以要自己执行 npm install 安装,但安装完后运行项目后却报错了: $ npm run dev > ...