Docker mysql主从同步

首先在docker上下载下来mysql,我用的是mysql5.7

 docker pull mysql:5.7

 docker images

 

一、新建主服务器

1.创建容器实例

新建mysql主服务器,采用3307端口进行映射

#docker run -d -p 3307:3306 --name=mysql-master -v /mysql/mydata/mysql-master/log:/var/log/mysql -v /mysql/mydata/mysql-master/data:/var/lib/mysql -v /mysql/mydata/mysql-master/conf:/etc/mysql

-e MYSQL_ROOT_PASSWORD=whr123  mysql:5.7

上述语句意思是:后台启动镜像mysql5.7,并挂载本机相关文件夹实现数据的备份,指定容器实例的名字为mysql-master 采用本机33.7端口映射到容器3306端口,并指定mysql的root密码。

# docker ps

2.更改配置文件

进入/mysql/mydata/mysql-master/conf

Vim my.cnf

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=101

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能

log-bin=mall-mysql-bin  

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M  

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed  

## 二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

3.重启容器实例

修改完配置文件,要重启容器实例:docker restart mysql-master

4.创建数据同步用户

进入容器实例:docker exec -it mysql-master bash

mysql -uroot -p whr123

->CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

->GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

二、新建从服务器

  1. 创建容器实例

docker run -p 3308:3306 --name=mysql-slave

-v/mysql/mydata/mysql-slave/log:/var/log/mysql

-v/mysql/mydata/mysql-slave/data:/var/lib/mysql

-v/mysql/mydata/mysql-slave/conf:/etc/mysql

-e MYSQL_ROOT_PASSWORD=whr123 -d mysql:5.7

上述语句与master意思相同,只不过端口用的是3308端口

# docker ps

 

2.更改配置文件

进入/mysql/mydata/mysql-master/conf

Vim my.cnf

        [mysqld]

        ## 设置server_id,同一局域网中需要唯一

        server_id=102

        ## 指定不需要同步的数据库名称

        binlog-ignore-db=mysql  

        ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用

        log-bin=mall-mysql-slave1-bin  

        ## 设置二进制日志使用内存大小(事务)

        binlog_cache_size=1M  

        ## 设置使用的二进制日志格式(mixed,statement,row)

        binlog_format=mixed  

        ## 二进制日志过期清理时间。默认值为0,表示不自动清理。

        expire_logs_days=7  

        ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

        ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

        slave_skip_errors=1062  

        ## relay_log配置中继日志

        relay_log=mall-mysql-relay-bin  

        ## log_slave_updates表示slave将复制事件写进自己的二进制日志

        log_slave_updates=1  

        ## slave设置为只读(具有super权限的用户除外)

        read_only=1

3.重启容器实例

修改完配置文件,重启容器实例:docker restart mysql-slave

4.在主数据库中查看主从同步状态

docker exec -it mysql-master bash

mysql -uroot -p whr123

->show master status;

 

后续在从服务器上配置时要用到,所以才要进行查看

5.在从服务配置主从复制

docker exec -it mysql-slave bash

mysql -uroot -p whr123

->change master to master_host='192.168.43.187', #去找宿主机(老大master)

master_user='slave', #上面我们在主数据库中授权的用户名

master_password='123456', #上面我们在主数据库中授权的密码

master_port=3307, #主的宿主机端口是337

master_log_file='mall-mysql-bin.000001', #bin-log日志

master_log_pos=617, #从617开始写

master_connect_retry=30;#连接重试次数

6.查看主从同步状态

mysql -uroot -p whr123

->show slave status \G;

 

发现没有开启,我们再从数据库上开启即可:

->slave start

再进行查看

->show slave status \G;

 

已经开启主从复制

三、测试

我们到主数据库上,新建一个whr的库,在whr库里创建一个master1的表

docker exec -it mysql-master bash

mysql -uroot -p whr123

->create database whr;

->use whr;

->create tables master1 (id int,name(varchar(20)));

->insert into master1 values (1,’zhangsan’);

 

我们到从服务器上进行查看

docker exec -it mysql-slave bash

mysql -uroot -p whr123

->show databases;

 

发现有了whr这个库

进入到whr这个库,再进行数据的查找

->use whr;

->select * form master1;

 

和主数据库上的数据一样,实现了主从同步

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白将

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值