基于docker实现主从复制

这篇具有很好参考价值的文章主要介绍了基于docker实现主从复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1:实现主从复制这个过程我是趟过坑的,后面是自己动手搞了几遍都成功了以后才开始决定记录的,(所以有的截图和上下文对不上的,比如说docker容器的名字对应不上,大家就用自己的就好),打算从centos8安装docker开始到最后实现主从复制,所以我从一开始将原有docker卸载开始记录的,如果你有docker了的话,可以跳过卸载docker步骤。
2:建议刷到帖子的小伙伴不着急上手,先浏览完再上手
3:描述有误的地方欢迎大家不吝赐教,找到我v:star2020082220210611

卸载docker

1:删除docker容器

 sudo docker stop $(docker ps -aq)

基于docker实现主从复制,docker,mysql,docker
注意:这个命令会停止所有容器,包括正在运行的容器和已经停止的容器
2:删除所有容器:

sudo docker rm $(docker ps -aq)

注意:由于我这里只有一个docker,而且已经执行了docker rm 容器id/容器名称这个命令来删除容器了。所以这里就不贴图了

3:删除所有镜像(我这里就一个mysql5.7的镜像,不过删除的这个过程有点花时间,稍微等下哈)

sudo docker rmi $(docker images -q)

基于docker实现主从复制,docker,mysql,docker
基于docker实现主从复制,docker,mysql,docker
注意:这个命令会删除所有镜像,包括正在运行的镜像和已经停止的镜像;执行这个命令时,命令行会给出二次确认提示y/n,选择y代表继续执行删除操作。出现上面第二个界面代表删除完毕。

4:卸载docker

sudo yum remove docker-ce docker-ce-cli containerd.io

基于docker实现主从复制,docker,mysql,docker

5:删除docker数据目录

sudo rm -rf /var/lib/docker

注意:这个命令会删除 Docker 数据目录,包括所有容器、镜像和数据卷。

上面这些操作是因为我想从安装docker开始从头到尾记录,在搭建的过程中躺了几次坑,后面搭建成功后我又删除了几次,反复实验都能实现主从复制,所以记录下。大家不需要删除docker的可以直接从下面的步骤开始,希望能帮到其他小伙伴。

接下来从centos中安装docker镜像开始。

首先centos中安装docker镜像:
1:更新数据源

 sudo yum update

基于docker实现主从复制,docker,mysql,docker

2:安装docker运行时需要的一些工具和依赖库,因为这些centos8中并不完整,需要进行安装

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

基于docker实现主从复制,docker,mysql,docker
3:下载docker包

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

基于docker实现主从复制,docker,mysql,docker

4:安装docker社区版:(这个过程也需要等待会儿哈)

sudo yum install -y docker-ce

基于docker实现主从复制,docker,mysql,docker
基于docker实现主从复制,docker,mysql,docker
5:设置docker服务并启动

sudo systemctl enable docker

基于docker实现主从复制,docker,mysql,docker

sudo systemctl start docker

基于docker实现主从复制,docker,mysql,docker

注意:也可以一起执行:sudo systemctl enable docker &&sudo systemctl start docker

6:查询docker版本

sudo docker --version

基于docker实现主从复制,docker,mysql,docker
至此docker已经安装完成了,接下来是mysql

拉取mysql镜像,这里以mysql5.7版本为例

1:拉取mysql5.7镜像

docker pull mysql:5.7

基于docker实现主从复制,docker,mysql,docker
注意:这个过程需要等待哈
2:查看镜像

docker images

基于docker实现主从复制,docker,mysql,docker
3:随便创建一个mysql容器,这里的主要目的是为了复制mysql配置文件,因为我是想将mysql的配置文件my.cnf挂载出去,方便修改

docker run -d --name master mysql:5.7

基于docker实现主从复制,docker,mysql,docker

注意:这里是创建一个mysql容器并运行,如果需要查看mysql的配置文件my.cnf需要执行以下命令,不需要的可以跳过
步骤1:创建容器并启动

docker run -d -p 3333:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7

基于docker实现主从复制,docker,mysql,docker

解释下含义:

docker run -d -p 3333:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7
这个 docker 命令用于在 docker 中运行一个 MySQL 容器,以下是命令中各个参数的含义:
docker run:用于在 docker 中运行一个容器的命令。
-d:表示在后台(detached 模式)运行容器,即不在终端上显示容器的输出。
-p 3333:3306:将主机(Host)的 3333 端口映射到容器的 3306 端口。这意味着你可以通过主机的 3333 端口访问容器中的 MySQL 服务。
--name master:指定容器的名称为 "master"。
-e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 根用户的密码为 "123456"。这里使用环境变量来传递密码给容器内的 MySQL 服务。
docker.io/mysql:5.7:表示使用 Docker Hub 上的 mysql 镜像,并指定标签为 5.7。
综合起来,这个命令的作用是在 Docker 中创建一个 MySQL 5.7 版本的容器,
容器名称为 "master",
通过主机的 3333 端口访问 MySQL 服务,并设置根用户密码为 "123456"。
容器在后台运行,不在终端上显示输出。

步骤2:进入容器的shell

docker exec -it master bash

步骤3:查看默认的my.cnf配置文件

ls /etc/my.cnf
cat /etc/my.cnf
或者是
ls /etc/mysql/my.cnf
cat /etc/mysql/my.cnf

基于docker实现主从复制,docker,mysql,docker
4:创建并启动了docker开始创建文件夹,将mysql的默认配置文件拷贝进来,然后修改配置,在挂载出去,这样方便我们修改mysql的配置文件。

mkdir mysql // home文件下创建mysql文件

mkdir /home/mysql/master // mysql文件夹下创建主库文件夹master

mkdir /home/mysql/slave // mysql文件夹下创建从库文件夹slave

基于docker实现主从复制,docker,mysql,docker
5:复制配置文件到上面创建的主从文件的my.cnf配置文件中
主文件夹:

docker cp master:/etc/my.cnf /home/mysql/master

从文件夹:

docker cp master:/etc/my.cnf /home/mysql/slave

查看是否复制成功
基于docker实现主从复制,docker,mysql,docker
6:删除上面正在运行的容器

docker ps -a  //查看
docker stop master  //停止 ,test是我上面创建的容器的名字
docker rm master //删除

基于docker实现主从复制,docker,mysql,docker

7:启动主容器

docker run -d \
--restart=always \
-p 3306:3306 \
-v /home/mysql/master/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
--name master mysql:5.7

以上docke命令中各个参数的含义:

docker run:用于在 Docker 中运行一个容器的命令。
-d:表示在后台(detached 模式)运行容器,即不在终端上显示容器的输出。
-p 3333:3306:将主机(Host)的 3333 端口映射到容器的 3306 端口。这意味着你可以通过主机的 3333 端口访问容器中的 MySQL 服务。
--name master:指定容器的名称为 "master"。
-e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 根用户的密码为 "123456"。这里使用环境变量来传递密码给容器内的 MySQL 服务。
docker.io/mysql:5.7:表示使用 Docker Hub 上的 mysql 镜像,并指定标签为 5.7。

基于docker实现主从复制,docker,mysql,docker

8:进入主库的配置文件并在文件[mysqld]下新增以下内容,保存后退出。

vim /home/mysql/master/my.cnf

基于docker实现主从复制,docker,mysql,docker

## 设置server_id, 同一个局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql,information_schema
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

基于docker实现主从复制,docker,mysql,docker
9:重新启动主库容器

docker restart master

基于docker实现主从复制,docker,mysql,docker
注意:要保证master库启动成功后再继续下面的步骤,否则就会再登录mysql的时候报错,提示用户名密码不正确,如图所示。可以查看日志,当出现图二红框中所示代表启动成功了,这个时候再继续下面的步骤,去登录mysql的时候就不会报错
基于docker实现主从复制,docker,mysql,docker

docker logs master   //查看容器名为master的日志

基于docker实现主从复制,docker,mysql,docker

10:主库中创建数据同步,分为以下几个步骤
步骤1:mysql容器

docker exec -it master bash

步骤2:登录mysql

mysql -uroot -p123456

步骤3:授予 名为"slave" 的用户从主数据库复制数据的权限

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

具体含义:

GRANT REPLICATION SLAVE:授予从数据库复制数据的权限。
ON *.*:将权限应用于所有数据库和所有表。
TO 'slave'@'%':授予 "slave" 用户在任何主机上的访问权限。'%' 表示任意主机。
IDENTIFIED BY '123456':设置用户 "slave" 的密码为 "123456"。

步骤4:授予名为 “slave” 的用户在从数据库复制数据和执行一些客户端操作所需的权限

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

具体含义:

grant replication slave:授予从数据库复制数据的权限。
replication client:授予从数据库执行一些客户端操作的权限,例如读取主数据库的二进制日志信息。
on *.*:将权限应用于所有数据库和所有表。
to 'slave'@'%':授予 "slave" 用户在任何主机上的访问权限。'%' 表示任意主机

步骤5:刷新

flush privileges;

步骤6:查看主从同步状态记录该状态下的master_log_file和master_log_pos,这两个参数值需要记住,后面会用到

show master status;

基于docker实现主从复制,docker,mysql,docker
然后ctrl+d退出即可。
注意:上面的步骤也可以在navicat中操作 。
1:新建mysql链接登录数据库
2:执行命令(按顺序执行哈)

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; 
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;
show master status;

11:启动从容器

docker run -d \
--restart=always \
-p 3307:3306 \
-v /home/mysql/slave/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
--name slave mysql:5.7

基于docker实现主从复制,docker,mysql,docker
12:修改从库配置文件,并在[mysqld]下新增以下内容:

vim /home/mysql/slave/my.cnf

在文件[mysqld]中新增以下内容:


## 设置server_id, 同一个局域网内需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql,information_schema
## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置只读(具有super权限的用户除外)
read_only=1

基于docker实现主从复制,docker,mysql,docker
13:重新启动从容器

docker restart slave

基于docker实现主从复制,docker,mysql,docker
14:从库中创建数据同步用户,分为以下几个步骤
步骤1:进入mysql容器

docker exec -it slave bash

基于docker实现主从复制,docker,mysql,docker

步骤2:登录mysql

mysql -uroot -p123456

基于docker实现主从复制,docker,mysql,docker

步骤3:配置 MySQL 主从复制中从数据库的连接和同步信息,它告诉从数据库如何连接到主数据库以获取数据的复制更新。

CHANGE MASTER TO master_host = '192.168.0.25',
master_user = 'slave',
master_password = '123456',
master_port = 3306,
master_log_file = 'mall-mysql-bin.000001',
master_log_pos = 807,
master_connect_retry = 30;

上面这段 SQL 各个参数的含义:

master_host = '192.168.0.25':这是主数据库的 IP 地址或主机名。从数据库将连接到该主数据库来获取复制数据。

master_user = 'slave':这是连接主数据库所使用的用户名。通常创建一个用于复制的专用用户。

master_password = '123456':连接主数据库所使用的密码,与上述用户名对应。

master_port = 3306:主数据库的端口号,通常为 MySQL 默认的端口号 3306。

master_log_file = 'mall-mysql-bin.000001':这是主数据库二进制日志中的日志文件名,它包含复制数据的更新记录。

master_log_pos = 807:这是主数据库二进制日志文件中的位置,指示从数据库在何处开始读取二进制日志以进行复制。

master_connect_retry = 30:在连接主数据库失败时,从数据库会尝试重新连接的时间间隔(以秒为单位)。

总体而言,这些配置参数告诉从数据库应该连接到哪个主数据库,使用哪个用户和密码来获取复制数据,并从主数据库的指定二进制日志位置开始同步数据。这是主从复制配置的一部分,使得从数据库可以与主数据库保持数据同步。在执行 CHANGE MASTER TO 后,从数据库可以开始运行复制进程,从主数据库同步数据更新。

基于docker实现主从复制,docker,mysql,docker
13:查看状态,此时Slave_IO_Running、Slave_SQL_Running都为No

show slave status \G;

基于docker实现主从复制,docker,mysql,docker

14:开启主从同步

start slave;

基于docker实现主从复制,docker,mysql,docker

15:再次查看主从同步状态, 此时Slave_IO_Running、Slave_SQL_Running都为 Yes

show slave status \G;

基于docker实现主从复制,docker,mysql,docker
注:上面的步骤也可以在navicat中进行,步骤如下:
步骤1:新建mysql链接登录数据库
步骤2:配置 MySQL 主从复制中从数据库的连接和同步信息

CHANGE MASTER TO master_host = '192.168.0.25',
master_user = 'slave',
master_password = '123456',
master_port = 3306,
master_log_file = 'mall-mysql-bin.000001', //与主库中一致
master_log_pos = 1444, // 与主库中一致
master_connect_retry = 30;

步骤3:查看主从同步状态# 此时Slave_IO_Running、Slave_SQL_Running都为 No

show slave status;

步骤4:开启主从同步

start slave;

步骤5:再次查看主从同步状态# 此时Slave_IO_Running、Slave_SQL_Running都为 Yes

show slave status;

16:从库的Slave_IO_Running、Slave_SQL_Running都为Yes时代表主从配置成功了,接下来就可以去nacivat中创建链接,连接成功后创建数据库,插入数据,就可以验证主从是否同步啦,也可以在命令行中进行,我以nacivat中为例,创建库,表,插入数据,看是否同步
验证1:库是否同步
主库新建一个数据库:test
基于docker实现主从复制,docker,mysql,docker
从库刷新一下再看:
基于docker实现主从复制,docker,mysql,docker
结论:从数据库中也存在了一个test库
验证2:表是否同步
主库中创建一张表
基于docker实现主从复制,docker,mysql,docker基于docker实现主从复制,docker,mysql,docker

从库刷新下再看:
基于docker实现主从复制,docker,mysql,docker
结论:从库中也存在了user表
验证3:数据是否同步

基于docker实现主从复制,docker,mysql,docker
从库刷新下再看:
基于docker实现主从复制,docker,mysql,docker
结论:从库中也存在了user表中的数据
到此,就算完结啦,描述有误的地方欢迎大家指正。文章来源地址https://www.toymoban.com/news/detail-649635.html

到了这里,关于基于docker实现主从复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker高级(mysql主从复制)

    数据库密码需要设置成自己的!!! 1、创建容器master13307 2、进入/mysql/mysql-master/conf目录下新建my.cnf 复制下面,保存 3、修改完配置后重启master实例 4、进入mysql-master容器 5、在主数据库中查看主从同步状态 6、新建从服务器容器实例mysql-slave 13308 7、重启slave 8、在从数据库s

    2024年02月11日
    浏览(35)
  • Docker集群部署-MySQL主从复制

    利用Docker实现MySQL主从复制架构的部署,实现1主1从集群配置。 要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。 新建主服务器容器实例3307 # docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /m

    2024年02月12日
    浏览(26)
  • Docker 搭建MySQL主从复制-读写分离

    MySQL主从复制是一种常用的数据库高可用性解决方案,通过在主数据库上记录的数据变更,同步到一个或多个从数据库,实现数据的冗余备份和读写分离。在Docker环境下搭建MySQL主从复制和读写分离,不仅方便管理,还能充分发挥Docker的轻量、可移植性等特性。 在开始搭建之

    2024年02月22日
    浏览(34)
  • Docker进阶篇-安装MySQL主从复制

      查看返回结果的文件名 File 、当前位置 Position,下面用得上 进入从数据库 配置从数据库所属的主数据库 命令详解: master_host:主数据库IP地址(即宿主机IP) master_user:在主数据库创建的用于同步数据的用户账号 master_password:在主数据库创建的用于同步数据的用户密码

    2024年01月20日
    浏览(39)
  • 在docker下进行mysql的主从复制

    Master Slave MySQL 主数据库端口为 3306,容器名称为 mysql-master,默认密码为 123456,-d 为后台运行。 MySQL 从数据库端口为 3307,容器名称为 mysql-slave,默认密码为 123456,-d 为后台运行。 进入容器: 修改配置文件: 找不到vim命令解决: 修改配置文件,添加如下配置: 重启容器:

    2024年02月12日
    浏览(24)
  • docker创建MySQL镜像,搭建主从复制环境

    学习黑马的MySQL时,在主从复制、分库分表、读写分离等阶段需要多台服务器,于是尝试用docker创建镜像搭建主从复制环境。 本文基于centos7搭建mysql镜像。 参考大佬文章: link 编写mysql_file文件: 由于需要进行编辑操作,所以需要额外下载vim 编写run.sh文件 build MySQL镜像 以特权

    2024年02月07日
    浏览(35)
  • MySQL 基于 GTID 主从复制

    GTID 定义 GTID 是 MySQL 事务标识 ,为每一个提交的事务都生成一个标识,并且是 全局唯一 的,这个特性是从 MySQL5.6 引进的。 组成 GTID 是由 UUID + TID,UUID 是MySQL的 唯一标识 ,每个MySQL实例之间都是不同的。TID是代表了该实例上已经提交的事务数量,并且随着 事务提交 单调递

    2024年01月16日
    浏览(69)
  • 使用docker进行MYSQL主从复制(一主两从)

    目录 概述主从介绍 主从作用 主从作用有: 主从形式有:  配置步骤 主要配置 1创建三个进程 2修改配置文件 3主机配置 4从机配置 5将文件修改后,复制到容器里面 6进入主机进行配置 6.1创建用户 6.2给用户授权 6.3刷新权限 7进入从机进行配置 对M1S1 对M2S2  8最后开启主从 9测

    2024年02月16日
    浏览(32)
  • docker笔记4:高级复杂安装-mysql主从复制

    docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root   -d mysql:5.7 进入/mydata/mysql-master/conf目录下新建my.cnf  vim my.cnf docker restart mysql-master 进入mysql-master容器  docker exec -it

    2024年02月09日
    浏览(32)
  • Docker搭建MySQL8.0主从复制(一主一从)

    宿主机使用的版本为 19045 的win10专业版,MySQL使用的是8.0+,Docker容器使用Linux。 略 修改Docker默认安装路径 安装包自己就提供了修改安装路径的功能,CMD中运行: “Docker Desktop Installer.exe” install --installation-dir= --installation-dir=path : changes the default installation location ( C:Program Fil

    2024年01月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包