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. Postgresql 锁查看

    之前版本 PostgreSQL 的 pg_stat_activity 视图的 waiting 字段判断会话是否等待锁资源(通俗地讲, waiting 值为true表示申请不到锁资源处于等待状态),但是 ...

  2. 关于微信支付回调url失败的原因

    首先需要在config配置好url,然后再微信支付里面配置url. 最重要的是url需要外网能在访问,不能有任何权限

  3. wpf控件拖动

    Thumb 拖动 上代码! <Window x:Class="Thumb控件移动.MainWindow" xmlns="http://schemas.microso ...

  4. Asp.net MVC Linq to SQL Model verification

    Models public class Student { public int Id { get; set; } [Required(ErrorMessage = "姓名不能为空!&quo ...

  5. reids 安装

    第一步:在VMware中安装CentOS(参考Linux教程中的安装虚拟机) 第二步:在Linux下安装gcc环境 [root@hadoop ~]#yum install gcc-c++ 第三步:将下 ...

  6. ACTGame项目

    项目地址:https://github.com/alonecat06/ACTGame游戏地址:http://pan.baidu.com/s/1hqD3IYw 项目是一个自制单机动作游戏demo,方向是 ...

  7. 第五章 企业项目开发--mybatis注解与xml并用

    本章的代码建立在第四章<Java框架整合--切分配置文件>的项目代码之上,链接如下: http://www.cnblogs.com/java-zhao/p/5118184.html 在实际 ...

  8. 如何将Spring Boot项目打包部署到外部Tomcat

    1.项目打包     项目开发结束后,需要打包部署到外部服务器的Tomcat上,主要有几种方式. (1)生成jar包 cd 项目跟目录(和pom.xml同级)mvn clean package## 或 ...

  9. ElasticSearch的基本认识和基本操作

    1.1.  ElasticSearch(简称ES) ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,其第一个版本于2010年2月出现在Git ...

  10. Python廖雪峰学习笔记——单元测试

    定义:对一个模块.一个类.一个函数进行进行正确性检验的测试性工作.当我们对函数或者模块等进行修改时,单元测试就显得尤为重要. 单元测试 = 测试用例(用来测试的数据)+测试模块