基于docker的mysql数据库主从备份,详细步骤,亲测有效

4 篇文章 0 订阅
2 篇文章 0 订阅

这之前,如果你没有docker,先下一个

yum install docker
docker version

下好之后看docker version,能看到
在这里插入图片描述
就算是安装成功了

然后

docker pull mysql:5.7

这里以mysql57版本为例

创建并启动一个master主数据库

docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

-p 3339:3306:将容器的3339端口映射到主机的3306端口;
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码;
–name 给容器命名,mymysql;
-d 表示容器在后台运行,后面跟镜像名称

然后,一样的创建并启动一个slave数据库

docker run -p 3340:3306 --name mymysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker ps查看正在运行的docker容器

Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

在这里插入图片描述
因为我之前以及创建了容器,所以现在只需要docker start 容器名启动就行了
同时,我们可以查看容器的ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名|容器ID

在这里插入图片描述
接下来,我们要进入到容器里面,对我们的mysql进行配置
首先我们进入主数据库的docker容器里面

docker exec -it 容器名称|容器ID /bin/bash

在这里插入图片描述
此时我们需要在docker容器的环境下安装一个vim用来编辑文件,
首先更新一下apt-get

apt-get update
apt-get insatll vim

这样就进入下载了
下载好了之后,我们直接打开
在这里插入图片描述
图中路径下的my.cnf配置文件
添加mysql主库的配置参数,一个是开启binlog,一个是给server-id
在这里插入图片描述
配置好之后

service mysql restart

重启mysql后,会自动退出这个docker容器
所以我们

docker start mymysql

重新启动容器
这时候我们再进入mymysql-slave容器,重复以上步骤
从数据库的配置如下

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

然后,我们重新进入mymysql主数据库容器内,启动mysql

mysql -uroot -p

在命令行输入

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

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

show master status;

在这里插入图片描述
有几个点需要注意
file和position,这两个值等会在配置slave的时候需要用到

然后退出,进入到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.000002', master_log_pos= 154, master_connect_retry=60;

master_log_file就是我们master当前使用的binlog文件名,就是上图中的file名
master_log_pos=154 ,就是值记录最大位置
新建的时候master的binlog文件名可能是mysql-bin.000001,照着里面写就好了

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

在Slave 中的mysql终端执行

show slave status \G;

用于查看主从同步状态。

在这里插入图片描述
开始是两个no,这是正常情况,因为主从复制还未开始,
现在我们使用

start slave;

启动主从备份
然后重新show slave status \G;查看状态
在这里插入图片描述
此时应该就是两个yes了
如果IO为no或connection
1,网络不通

检查ip,端口

2,密码不对

检查是否创建用于同步的用户和用户密码是否正确

3,position不对,看看自己的position的值给到是不是我们show master status中的值

检查Master的 Position

然后进入主mysql终端建库建表插入数据
如果在slave终端中也有相关数据,则代表插入成功!

以上步骤亲测有效,跟着一步一步来就可以了
有兴趣的朋友可以去看看主从备份的原理,relay中继日志和binlog日志、IO线程一个SQL线程,在这里面起到了关键性作用

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于DockerMySQL主从数据库配置需要完成以下步骤: 1. 启动Master()容器:使用命令`docker run -p 3306:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为main_mysql,密码为123456。 2. 连接到Master()容器:使用命令`docker exec -it main_mysql bash`进入Master()容器的命令行界面。 3. 配置Master():在Master()容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Master()容器的IP地址。 4. 重启Master()容器:使用命令`docker restart main_mysql`重启Master()容器使配置生效。 5. 启动Slave(从)容器:使用命令`docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为slave_mysql,密码为123456。 6. 连接到Slave(从)容器:使用命令`docker exec -it slave_mysql bash`进入Slave(从)容器的命令行界面。 7. 配置Slave(从):在Slave(从)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Slave(从)容器的IP地址,并添加以下配置: ``` server-id = 2 relay-log = /var/lib/mysql/mysql-relay-bin relay-log-index = /var/lib/mysql/mysql-relay-bin.index log_slave_updates = 1 ``` 8. 重启Slave(从)容器:使用命令`docker restart slave_mysql`重启Slave(从)容器使配置生效。 9. 在Slave(从)容器内部执行以下命令连接到Master()容器并设置复制: ``` CHANGE MASTER TO MASTER_HOST='<Master()容器的IP地址>', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ``` 10. 启动复制:在Slave(从)容器内部执行命令`START SLAVE;`启动主从复制。 11. 检查主从复制状态:在Slave(从)容器内部执行命令`SHOW SLAVE STATUS\G;`,确保"Slave_IO_Running"和"Slave_SQL_Running"都为"YES",表示主从复制已成功配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值