Docker 环境下 MySQL 主从复制与主主复制

10 篇文章 3 订阅

新建用户组

# groupadd mysql

新建用户

# useradd mysql

设置密码

# passwd mysql
  新的密码:weikaixxxxxx
  重新输入新的 密码:weikaixxxxxx

下载mysql5.7

# docker pull mysql:5.7

查看镜像是否下载成功

# docker image ls

在这里插入图片描述

启动mysql容器,并添加数据卷

# docker run --name master1 -v /dockerdata/mysql/master1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3000:3306 mysql:5.7
# docker run --name master2 -v /dockerdata/mysql/master2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3001:3306 mysql:5.7
# docker run --name Slave1 -v /dockerdata/mysql/Slave1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3002:3306 mysql:5.7
# docker run --name Slave2 -v /dockerdata/mysql/Slave2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3003:3306 mysql:5.7

查看所有容器是否全部启动

# docker ps 

如果没有就启动所有容器

# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

依次进入四个mysql容器,设置远程访问授权(横线内)


# docker exec -it 容器id bash
# mysql -uroot -ppassword
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'%' IDENTIFIED BY 'weikaixxxxxx';

格式:GRANT REPLICATION SLAVE ON *.* TO '新开帐号'@'%' IDENTIFIED BY '新开帐号密码';

刷新mysql用户权限相关表

mysql> FLUSH PRIVILEGES;

查看是否添加成功

 mysql> select host,user from mysql.user;

退出mysql控制台

mysql> exit

注意:此时还在容器内,别出去喽。

修改配置文件,添加server-id=1log-bin=mysql-bin 俩行

# find / -name mysqld.cnf

搜索到的 /etc/mysql/mysql.conf.d/mysqld.cnf ,这里只需要查一次就行,因为镜像的路径一样,其它的容器就不需要查直接用。

# echo 'server-id=1' >> /etc/mysql/mysql.conf.d/mysqld.cnf \
	& echo 'log-bin=mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf
# cat /etc/mysql/mysql.conf.d/mysqld.cnf

server-id:指定服务器唯一id,不可重复。也就是不同容器里的id要不一样,递增即可(1,2,3,4)。
log-bin:开启binlog日志

在这里插入图片描述
如果哪里操作出问题了,下面的命令可以删除最后一行

sed -i '$d' /etc/mysql/mysql.conf.d/mysqld.cnf

退出容器

# exit

横线到了,重复以上步骤到其它容器。

为了让配置文件生效,重启所有容器

# docker restart $(docker ps -a | awk '{ print $1}' | tail -n +2)

进入主库容器(master1)

# docker exec -it 容器id bash
mysql> mysql -uroot -ppassword;
mysql> show master status;
mysql> exit

在这里插入图片描述
你的数字应该会跟我的不同。记住File和Position的内容。

配置从库,这里的操作是为了当主库1变更就会使从库1变更。

进入从1(Slave1)

# docker exec -it 容器id bash
mysql> mysql -uroot -ppassword;

关闭slave服务,下一步需要

mysql> stop slave; 

配置连接信息

mysql> 
CHANGE MASTER TO 
MASTER_HOST = '192.168.247.140', 
MASTER_USER = 'mysql', 
MASTER_PASSWORD = 'weikaixxxxxx', 
MASTER_LOG_FILE = 'mysql-bin.000001', 
MASTER_PORT = 3000,
MASTER_LOG_POS = 154;

格式:
master_host:主库ip地址
master_user:新建的用户
master_password:新建的用户密码
master_log_file:sql语句 show master status的File字段
MASTER_PORT:连接库的端口
MASTER_LOG_POS:sql语句 show master status的Position字段

开启slave服务

mysql> start slave; 
mysql> show slave status\G;
mysql> exit
# exit

在这里插入图片描述
需要俩个都是Yes才算成功。
配置连接信息”:你B库要复制A库的数据,你就在B填A库的数据。

测试主从复制
为了更直观的看效果,使用navicat这个软件来测试。使用root登录。
在主1新建一个数据库test和test表。会自动同步到从1。
在这里插入图片描述
现在,到主1里去添加一条数据,你会发现从1复制成功。
在这里插入图片描述
主主复制
主主复制按照上面的“配置连接信息”,在主1配置主2的mysql> show slave status\G;信息,再到主2配置主1的mysql> show slave status\G;信息即可。只是一个互相复制对方的数据而已。

下一篇:MySQL Route 数据库负载均衡与容灾

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值