搭建主从复制的mysql数据库--docker版

mysql是现在项目开发中的常见数据库,为了提升mysql的性能,今天就试着搭建一个基于binlog进行主从复制的mysql数据库。

1、拉取mysql镜像

docker pull mysql

2、启动mysql镜像

docker run -p 3306:3306 --name mysql-master -v $PWD/master-logs:/logs -v $PWD/master-data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -p 3307:3306 --name mysql-slave -v $PWD/slave-logs:/logs -v $PWD/slave-data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql

查看镜像:
在这里插入图片描述

3、配置mysql用户

#进入镜像
docker exec -it mysql-master bash
#输入密码,登录mysql
mysql -u root -p
#执行sql
#添加远程登录用户
CREATE USER 'master'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'master'@'%';
FLUSH PRIVILEGES; 

在这里插入图片描述
添加用户及指定验证规则,主要是mysql8的默认验证规则需要修改,不然使用navicat远程登录失败。可通过SQl命令进行查看。

select host,user,plugin from mysql.user;

在这里插入图片描述
mysql-slave的容器也参照master的进行设置

#添加远程登录用户
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES; 

使用navicat分别登录,验证无误。

4、配置mysql主从

4.1 配置master

通过docker exec -it mysql-master bash命令进入

cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。
此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。使用apt-get install vim命令安装vim,出现E: Unable to locate package vim,使用apt-get update更新源。

由于下载速度很慢,所以我切换了一下源到阿里云。

mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.aliyun.com/debian buster main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian buster-updates main" >> /etc/apt/sources.list

然后在执行apt-get update,速度会有明显提升。然后再次执行apt-get install vim即可成功安装vim。
在my.cnf文件中添加如下内容

server-id=100  
log-bin=mysql-bin

重启msater镜像,使配置生效。

在msater数据库创建同步用户并授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

至此,主数据库配置完成。

4.2 配置slave

和配置master一样,修改my.cnf文件(vim的安装参考master数据库),添加如下配置:

server-id=101  
#开启二进制日志功能
log-bin=mysql-slave-bin   
#relay_log配置中继日志
relay_log=mysql-relay-bin 

配置完成后,重启slave容器。

4.3 主从配置

先查看msater容器的独立ip,并记录下来,一会配置slave要使用。通过执行如下命令:

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

在这里插入图片描述
进入到msater的msql中,获取file文件名称和position位置,并记录下来,然后保持主master数据不变(即不进行任何操作)。

show master status;

在这里插入图片描述
在Slave 中进入 mysql,执行如下语句

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 375, master_connect_retry=30;

master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

接着启动从库,start slave;然后查看状态show slave status \G。如下即为正常。
在这里插入图片描述
验证:
通过在主库常见表或者插入输入,在从库能查到,表示主从同步搭建成功。

参考资料:https://blog.csdn.net/qq_26789969/article/details/82686625

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值