Docker Mysql数据库主从同步配置方法
一、背景
最近在做内部平台架构上的部署调整,顺便玩了一下数据库的主从同步,特此记录一下操作~
二、具体操作
1、先建立数据存放目录(~/test/mysql_test/)
--mysql
--master
--data
--conf
--my.cnf
--slave
--data
--conf
--my.cnf
2、Master my.cnf配置文件
[mysqld]
server_id = 1 log-bin= mysql-bin read-only=0 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
3、Slave my.cnf配置文件
[mysqld]
server_id = 2 log-bin= mysql-bin read-only=1 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
4、创建master主容器
docker run --name mastermysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test/master/data:/var/lib/mysql -v ~/test/mysql_test/master/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7
5、创建slave从容器
docker run --name slavemysql -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test/slave/data:/var/lib/mysql -v ~/test/mysql_test/slave/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7
6、master容器设置
//进入master容器 docker exec -it mastermysql bash //启动mysql命令,刚在创建窗口时我们把密码设置为:root mysql -u root -p //创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。 CREATE USER 'slave'@ '%' IDENTIFIED BY '123456'; (其实可省略)
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456'; //这里表示创建一个slaver同步账号slave,允许访问的IP地址为%,%表示通配符 //查看状态,记住File、Position的值,在Slave中将用到
show master status/G;
7、slave容器设置
//进入slaver容器
docker exec -it slavemysql bash //启动mysql命令,刚在创建窗口时我们把密码设置为:root
mysql -u root -p //设置主库链接
change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3306; //启动从库同步
start slave; //查看状态
show slave status\G;
如果 show slave status\G命令结果中出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两项都为Yes,那说明没问题了。
三、注意事宜
mysqldump -uroot -p --all-databases >/root/all_database.sql
mysql -uroot -p <all_database.sql
#如需要,可以master容器中,执行以下命令锁定数据库以防止写入数据。 mysql>FLUSH TABLES WITH READ LOCK;
等待主从数据追平,主从同步后在打开锁!
#解锁数据表。 mysql>UNLOCK TABLES;
主从数据追平后,定位好从库到主库日志的文件名字,和相应的位置
mysql> show master status\G;

看到相应文件名字和位置!
slave从库运行:
#设置主库链接
change master to master_host='172.17.0.9',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=2037,master_port=3306; #执行从库同步
start slave; #查看从库同步状态
show slave status\G;

在结果中看到:
四、主从同步验证
注:在本次实验中,由上述my.cnf配置文件可得知,主从同步针对的数据库(除了mysql,sys,information_schema,performance_schema这些以外)的其它所有数据库都会进行同步(含数据库、表、数据等)
1、如当前数据库情况如下:

2、在master主库容器中,创建数据库master_demo,并在此库下创建表userinfo,并插入一条记录
create database master_demo;
use master_demo;
create table userinfo(username varchar(50),age int);
insert into userinfo values('Tom',18);

3、此时,进入从库容器中,查看:

确实已经将在master主库新建的数据库和表记录都同步过来了。
既然是主从同步,那反过来验证一下,在从库下插入记录后,会不会同步到主库中来呢?
在从库上操作插入记录:
insert into userinfo values('slave',20);
查看:

切到master主库中,查看:

发现在master主库中,还是只有一条记录,说明与预期设想的一样,在从库中插入记录,是不会同步到master主库中来的
再来一波,在主库master上,插入新记录:
insert into userinfo values('master',25);

在从库中,查看

发现在master主库中新加入的master记录,在从库中同步过来了。
到此,基于docker mysql数据库的主从同步配置,验证到此结束,命令、配图给的如此详细,来点个赞吧~
Docker Mysql数据库主从同步配置方法的更多相关文章
- Docker Mongo数据库主从同步配置方法
一.具体操作方法 1.启两个Mongo容器 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --r ...
- Linux下MySQL数据库主从同步配置
说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...
- MySQL数据库主从同步配置
主服务器必须打开开二进制日志. 主要是修改配置文件 , 一般在 linux 下安装的 mysql 配置文件是 my.cnf, 在 windwos 下是 my.ini, 修改主服务器配置文件 serve ...
- 简单的MySQL数据库主从同步配置
Master配置: 代码如下 复制代码 log-bin = mysql-binserver-id = 1binlog-do-db = powerdns #要同步的数据库 Master新增slave账号 ...
- MySQL数据库主从同步延迟分析及解决方案
一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...
- MySQL数据库主从同步实战过程
Linux系统MySQL数据库主从同步实战过程 安装环境说明 系统环境: [root@~]# cat /etc/redhat-release CentOS release 6.5 (Final) ...
- MySql数据主从同步配置
由于需要配置MySQL的主从同步配置,现将配置过程记录下,已被以后不时之需 MySql数据主从同步 1.1. 同步介绍 Mysql的 主从同步 是一个异步的复制过程,从一个 Master复制到另一 ...
- mysql数据库主从同步
环境: Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133 Slave: CentOS7.1 5.5.52-MariaDB 192.168. ...
- mysql数据库主从同步读写分离(一)主从同步
1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做? 不往从服务器去写了 ...
随机推荐
- spring security学习
https://www.cnblogs.com/leihenqianshang/articles/5313159.html
- linux下执行.sh文件的方法和语法
linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限. 是bash脚本么 可以用touch test.sh ...
- Linux使用nexus搭建maven私服
一.准备工作 系统:LINUX JDK:已安装(未安装详见jdk安装教程:http://www.cnblogs.com/muzi1994/p/5818099.html) ...
- LoRaWAN 1.1 网络协议规范 - 5 MAC指令
LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...
- webpack打包之有依赖js模块
一.入口文件main.js var isd = require('./depend.js'); if(isd.isDepend){ console.log('有依赖模块'); } else { con ...
- VC6.0学习C语言入门SDK
度网盘链接 VC6.0 密码:t6bd VS2010 密码:3of2 C语言入门教程 在线视频地址(PS此链接摘抄至博主lellansin) Acfun.tv:http://www.acfun. ...
- Java经典面试题(一)
1.在 Java 中类的定义在 Java 中,类是用于创建对象和定义数据类型的模板. 它充当面向 Java 语言的系统的构建块.2.静态加载和动态加载有什么区别?静态类加载涉及使用新关键字来创建对象和 ...
- JavaScript基础笔记(十四)最佳实践
最佳实践 一)松散耦合 1.解耦HTML/JavaScript: 1)避免html种使用js 2)避免js种创建html 2.解耦CSS/JS 操作类 3.解耦应用逻辑和事件处理 以下是要牢记的应用和 ...
- 2110 ACM Crisis of HDU 母函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2110 题意:分出1/3的价值,有几种可能? 思路:母函数 与之前的题目2079相似,复习笔记再来写代码: ...
- 潭州课堂25班:Ph201805201 django 项目 第八课 注册功能分析,图片验证码视图设计 (课堂笔记)
1,用户名 是否已注册 2,手机号 是否被注册 3,图形验证码 4,短信验证码, 5,验证成功后,向后台提交数据:用户名,密码,手机号,短信验证 要写这五个视图, 获取图形验证码,请求方式:g ...