docker配置mysql的主从复制

首先下载mysql的镜像,我们可以在dockerhub上面查看mysql有那些版本:

选择我们需要下载的版本,我自己下载的是mysql5.7 的

输入命令:

docker pull mysql:5.7

在使用docker启动mysql命令之前我们需要将docker容器中的mysql的主要数据挂载在我们的宿主机上面,所以我们先创建好存放mysql主要数据的目录

我在根目录下创建了一个data文件夹然后里面创建了两文件夹有分别为:master_mysql,savle_mysql 

 这两个文件的里的文件目录都是一样的分别为:

conf:存放MySQL的配置文件

data:存放mysql的数据

log:存放mysql的日志

然后我们需要将mysql的my.cnf配置文件放到conf文件中 my.cnf内容为:

[mysqld]
##表示是本机的序号为1,一般来讲就是master的意思(salve的配置也一样只不过server-id的值不一样) 同一个局域网内的序号不能一样
server-id = 1 
skip-name-resolve
## 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,
## 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
##开启二进制日志功能
log_bin = mysql-bin
binlog_format = mixed
##超过30天的binlog删除
expire_logs_days = 30 
##设置二进制日志使用内存大小
binlog_cache_size=1M
##跳过主从复制中遇到的所有错误和指定类型的错误,避免slave端复制终端,
##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

创建好目录之后我们就需要启动MySQL了,首先我们启动master-mysql

命令:

docker run -d -it -p 3306:3306 --name master-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /data/master_mysql/log:/var/log/mysql  -v /data/master_mysql/data:/var/lib/mysql -v /data/master_mysql/conf:/etc/mysql  --privileged=true mysql:5.7

-d后台启动

-i:终端

-t:交互

-p 宿主机端口:docker容器中mysql启动的端口

-e 是设置MySQL密码 

-v 就是我们需要将容器中的mysql挂载在宿主机的文件   

查看是否启动成功:

docker ps -q

 启动成功之后 继续启动savle-mysql:

docker run -it -d -p 3077:3077 -v /data/savle_mysql/conf/:/etc/mysql -v /data/savle_mysql/log/:/var/log/mysql -v /data/savle_mysql/data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 --name savle-mysql --privileged=true mysql:5.7

然后查看是否启动成功:

都启动成功之后我们需要进入master-mysql中设置可以访问master-mysql的账号和权限,操作步骤如下:

首先进入master-mysql容器中:

docker exec -it master-mysql /bin/bash

然后在master_mysql容器中登入MySQL

进入MySQL之后创建一个复制主数据库的账号:

 create user 'savle'@'%' identified by '密码'

然后在给账号可以复制主库的权限:

grant replication slave,replication client on *.* to 'savle'@'%'

到此master-mysql配置好了,

然后我们在查看master的状态:

show master status;

我们需要记住file和position一会配置savle-mysql时参数用的到 具体干什么的 请看下面详解

接下进入savle-mysql容器然后登入mysql客户端:

首先配置:

change master to master_host='192.168.169.128',master_user='savle',master_password='123456',master_port=3077,master_log_file='mall-mysql-bin.000001',master_log_pos=814,master_connect_retry=30;

命令的意思是我们需要和那个master_mysql进行主从复制,我们复制时主mysql是使用什么账号和密码,这时候我们就可以将在mysql创建的账号写入,然后在知道复制主mysql的那个日志,从什么位置复制,最后一个参数是链接失败之后多少秒重试。

master_host:主mysql的ip地址,

master_port:主mysql的端口号

master_user:用哪个账号登入主mysql进行复制数据

master_password:登入账号的密码

master_log_file:复制那个日志file,根据我们自己的my.cnf设置,也可以通过前面主mysql查看 file名字

master_log_pos:从什么位置复制

master_connect_retry:链接失败之后多少秒之后在重试。

最后开启从数据库同步:

start slave;

查看状态是否成功:

show slave status \G;

\G的意思是显示方式为key,value方式显示

 Slave_IO_Running,Slave_SQL_Running都为yes表示搭建成功。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值