Docker Mysql数据库主从同步配置详细

 具体操作

1 先建立数据存放目录(~/test/mysql_test/)

--mysql--master--data--conf--my.cnf--slave--data--conf--my.cnf

2 准备好 Mysql Master(主库)和Mysql Slave(从库)的my.cnf文件

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/

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/

注:在本文中,由上述my.cnf配置文件可得知,主从同步针对的数据库(除了mysql,sys,information_schema,performance_schema这些以外)的其它所有数据库都会进行同步(含数据库、表、数据等)

小结:

由上述master my.cnf和slave my.cnf配置文件中可知,两者的区别主要在于server_id和read-only值不同

server_id标识服务实例,master和slave值需要保证唯一

read-only中值为0表示支持可读写、1的话表明仅支持可读

3 创建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

4 创建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

5  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;

6 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,那说明没问题了。

注意事宜

1 首先在主从没有生效的时候,要保持两台服务器数据库、表相同,数据相同

那如何实现主从库在开始之间的同步呢,别怕,继续看〜

master容器上执行:

mysqldump -uroot -p --all-databases >/root/all_database.sql

将all_database.sql拷贝到从库中来,在slave从库容器上执行:

mysql-uroot-p

如此两步骤,主库和从库数据会追加相平,保持同步!

再此过程中,若主库存在业务,在同步的时候要先锁表,让其不要有修改!

#如需要,可以master容器中,执行以下命令锁定数据库以防止写入数据。mysql>FLUSHTABLESWITHREADLOCK;

等待主从数据追平,主从同步后在打开锁!

#解锁数据表。

mysql>UNLOCK TABLES;

主从数据追平后,定位好从库到主库日志的文件名字,和相应的位置

master主库运行:

mysql>showmasterstatus\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;

在结果中看到:

        Slave_IO_Running: Yes

       Slave_SQL_Running: Yes

即可成功同步!

主从同步验证

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数据库的主从同步配置,验证到此结束,命令、配图给的如此详细,还不来点个赞~

感兴趣的小伙伴可以来我的Java交流群,可以获取免费的学习资料 703106158

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容