首页 技术 正文
技术 2022年11月21日
0 收藏 803 点赞 2,528 浏览 3184 个字

一、背景

最近在做内部平台架构上的部署调整,顺便玩了一下数据库的主从同步,特此记录一下操作~

二、具体操作

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

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

2、Master my.cnf配置文件

[mysqld]
server_id = 1log-bin= mysql-binread-only=0replicate-ignore-db=mysqlreplicate-ignore-db=sysreplicate-ignore-db=information_schemareplicate-ignore-db=performance_schema!includedir /etc/mysql/conf.d/!includedir /etc/mysql/mysql.conf.d/

3、Slave my.cnf配置文件

[mysqld]
server_id = 2log-bin= mysql-binread-only=1replicate-ignore-db=mysqlreplicate-ignore-db=sysreplicate-ignore-db=information_schemareplicate-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命令,刚在创建窗口时我们把密码设置为:rootmysql -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,那说明没问题了。

三、注意事宜

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

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

拷贝到slave容器中,在slave从库上执行:

mysql -uroot -p <all_database.sql

 如此两步骤,主库和从库数据会追加相平,保持同步! 再此过程中,若主库存在业务,在同步的时候要先锁表,让其不要有修改! 

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

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

#解锁数据表。mysql>UNLOCK TABLES;

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

master主库运行:

mysql> show master status\G;

Docker Mysql数据库主从同步配置方法

看到相应文件名字和位置!

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;

Docker Mysql数据库主从同步配置方法

在结果中看到:

             Slave_IO_Running: Yes            Slave_SQL_Running: Yes即可成功同步!

四、主从同步验证

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

1、如当前数据库情况如下:

Docker Mysql数据库主从同步配置方法

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

Docker Mysql数据库主从同步配置方法

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

Docker Mysql数据库主从同步配置方法

确实已经将在master主库新建的数据库和表记录都同步过来了。

既然是主从同步,那反过来验证一下,在从库下插入记录后,会不会同步到主库中来呢?

在从库上操作插入记录:

insert into userinfo values('slave',20);

查看:

Docker Mysql数据库主从同步配置方法

切到master主库中,查看:

Docker Mysql数据库主从同步配置方法

发现在master主库中,还是只有一条记录,说明与预期设想的一样,在从库中插入记录,是不会同步到master主库中来的

再来一波,在主库master上,插入新记录:

insert into userinfo values('master',25);

Docker Mysql数据库主从同步配置方法

在从库中,查看

Docker Mysql数据库主从同步配置方法

发现在master主库中新加入的master记录,在从库中同步过来了。

到此,基于docker mysql数据库的主从同步配置,验证到此结束,命令、配图给的如此详细,来点个赞吧~

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893