Mysql主从复制

本文介绍了使用Docker创建主从MySQL服务并实现主从复制的方法。首先拉取镜像、创建容器,接着分别对主数据库和从数据库进行配置以开启主从复制,最后通过在主数据库创建数据库,在从数据库查看的方式验证主从复制是否成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里使用docker创建两个mysql服务来实现mysql的主从复制,前提条件:

1.主从数据库的版本最好一致
2.启用二进制日志
3.服务器唯一ID

一、使用docker创建主从mysql

1.拉取镜像

docker pull hub.c.163.com/nce2/mysql:5.6

下载完成以后,可以通过下面命令查看已下载镜像:

docker images

2.创建容器

创建自定义网络(注意不能创建172.17.0.0网段的,因为已经存在)

docker network create --subnet=172.18.0.0/16 mynetwork

查看网络类型:

docker network ls

使用下面命令创建固定ip容器并启动

docker run --name mysql-master2 -d --restart=always  --net mynetwork --ip 172.18.0.2  -p 3316:3306 hub.c.163.com/nce2/mysql:5.6

其中

-d 后台运行

-p 宿主机port:容器port (端口映射)

--name 容器名称

--net mynetwork --ip使用自定义网络mynetwork设置固定ip

--restart=always 开机自动启动

查看正在运行的容器:

docker ps

同理创建从mysql:

docker run --name mysql-slave2 -d --restart=always --net mynetwork --ip 172.18.0.3 -p 3317:3306 hub.c.163.com/nce2/mysql:5.6

二、开启主从复制

1.主数据库配置

1.通过如下命令进入mysql-master2容器的交互界面:

docker exec -it mysql-master2 bash

2.登录mysql

mysql -uroot -p

3.如果没设置密码,此时不需要输入密码 直接回车就好,进入mysql后修改密码和允许远程登录

set password for 'root'@'localhost'=password('root'); 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

然后退出

exit

4.修改my.cnf文件

vi /etc/mysql/my.cnf 

5.提示命令未找到,需要安装vim,步骤如下

apt-get update

更新完成后进行安装,需要点击Y时点个Y

apt-get install vim

6.再次执行vi命令修改my.cnf文件,在[mysqld]下加上以下配置:

[mysqld]
## 服务id,要唯一
server-id=1  
## 开启二进制日志功能,可以随便取
log-bin=mysql-bin

保存退出,重启容器使得mysql重启

docker restart 14f4fb4236a6

7.再次进入容器,查看主数据库所在容器的ip,后面从数据库需要用到,我这里是172.17.0.2

ip addr

8.登录mysql创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

创建用户wly:

CREATE USER 'wly'@'%' IDENTIFIED BY 'root';

授予权限:

GRANT REPLICATION SLAVE ON *.* TO 'wly'@'%';

刷新权限:

flush privileges;

9.查看主服务状态

show master status

enter image description here

其中

File:二进制文件
Position:二进制文件的位置

这两个值在从数据库中会用到,在此之前暂时不要动主数据库,否则这两个值会变化。

再开启一个窗口来配置从数据库

2.从数据库配置

1.进入mysql-slave2容器的交互界面:

docker exec -it mysql-slave2 bash

(设置密码、允许远程登录和安装vim略,同上)

2.修改my.cnf文件

vi /etc/mysql/my.cnf 

在[mysqld]下加上以下配置:

[mysqld]
## 设置server-id,唯一
server-id=2  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

保存后退出,重启容器使得mysql重启

docker restart aec7f534fd20

3.重启完成后重新进入mysql-slave2容器的交互界面,登录mysql,设置主数据库相关信息,如下:

CHANGE MASTER TO
     MASTER_HOST='172.18.0.2',
     MASTER_USER='wly',
     MASTER_PASSWORD='root',
     MASTER_PORT=3306,
     MASTER_LOG_FILE='mysql-bin.000004',
     MASTER_LOG_POS=489;

其中

MASTER_HOST:主数据库的主机ip
MASTER_USER:主数据库创建的同步用户
MASTER_PASSWORD:同步用户对应的密码
MASTER_PORT:容器内部端口即主数据库的端口
MASTER_LOG_FILE:二进制日志文件
MASTER_LOG_POS:日志文件的位置

4.开启主从复制:

start slave

5.查询主从同步状态:

show slave status \G;

enter image description here

当SlaveIORunning和SlaveSQLRunning都Yes的时候说明主从复制开启成功

如果SlaveIORunning为No或Connection可能是同步用户没有权限或者密码错误

三、验证主从复制

1、在主数据库中创建一个数据库wly

create database wly;

2.在从数据库中查看所有数据库

show databases;

enter image description here

发现从数据库也自动创建了wly数据库,说明主从复制成功!

访问我的达人课

我的微信公众号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坏菠萝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值