Docker搭建MySQL8.0主从复制(一主一从)

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

0. 配置说明

宿主机使用的版本为19045的win10专业版,MySQL使用的是8.0+,Docker容器使用Linux。

1. 安装Docker Desktop

修改Docker默认安装路径

安装包自己就提供了修改安装路径的功能,CMD中运行:

“Docker Desktop Installer.exe” install --installation-dir=

--installation-dir=<path>: changes the default installation location (C:\Program Files\Docker\Docker)

2. 在Docker中安装MySQL

可以访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags 查看可用的其他mysql版本,默认为最新版本mysql:latest

2.1 拉取MySQL镜像

$ docker pull mysql:latest

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

2.2 查看本地镜像

$ docker images

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

2.3 启动MySQL容器实例

$ docker run --name mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD=5508769123 -d mysql

参数说明:

  • docker run:告诉Docker启动一个新的容器
  • –name mysql :指定了容器的名称,这里是 “mysql”
  • -p 3309:3306:端口映射设置,将容器内的MySQL数据库端口(默认为3306)映射到主机上的3309端口。这样可以通过主机的3309端口访问MySQL服务器
  • -e MYSQL_ROOT_PASSWORD=5508769123:环境变量的设置,用于配置MySQL容器的根用户(root)的密码。这里,密码被设置为 “5508769123”
  • -d:表示以"后台"(detached)模式运行容器
  • mysql:要运行的Docker镜像的名称

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

下面给出的输出16821a8792a185997c1b5df334fa4461a157488e90d881902596e7ff3db8c42f为容器的id。

2.4 检查安装

$ docker ps

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

打开Docker Desktop检查

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

宿主机登录Docker中的MySQL

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

3. 主从复制

3.1 设置主库(这里为宿主机器)

  1. 修改主库MySQL数据库的配置文件,这里配置文件位置为:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

    添加信息为:

    [mysqld]
    log-bin=mysql-bin #必须启用二进制日志
    server-id=100 #必须服务器唯一ID
    

    找到[mysqld]标签然后添加下面两行即可

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

  2. 重启MySQL服务

    (管理员权限)

    $ net stop mysql80
    
    $ net start mysql80
    

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

  3. 在主库创建新用户并赋权

    登录主库然后执行下面两条指令:

    CREATE USER 'mercurows'@'%' IDENTIFIED WITH caching_sha2_password BY '5508769123';
    GRANT REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO 'mercurows'@'%';
    

    **注意:**mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。我们发现root的加密规则为caching_sha2_password,现在修改为mysql_native_password,

    ALTER USER 'mercurows'@'%' IDENTIFIED WITH 'mysql_native_password' BY '5508769123';
    

    解释:

    • CREATE USER:创建一个新用户。

    • 'mercurows'@'%':新用户的标识符。'mercurows' 是用户名,'%' 表示这个用户可以从任何主机连接到MySQL服务器。如果想限制用户只能从特定主机连接,可以在 '%' 的位置指定相应的主机地址。

    • IDENTIFIED WITH caching_sha2_password BY '5508769123':用户的身份验证方法和密码。在这里用户的身份验证方法被设置为 caching_sha2_password,并且密码被设置为 '5508769123'注意:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。

    • REPLICATION SLAVE, REPLICATION CLIENT:表示授予用户 ‘mercurows’ 两种权限:REPLICATION SLAVE(用于复制从其他MySQL服务器)和 REPLICATION CLIENT(用于查询和管理复制状态)。

    • ON *.*:表示授予权限的范围,*.* 表示所有数据库和所有表。

    • TO 'mercurows'@'%':这部分指定了要授予权限的用户和其访问主机。与前一个命令相同,'mercurows'@'%' 表示 ‘mercurows’ 用户可以从任何主机连接。

    检查:

    flush privileges;
    SHOW GRANTS FOR 'mercurows'@'%';
    

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

  4. 检查主库状态

    show master status;
    

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

并记录FilePosition这两个记录,这里是DESKTOP-UPK0D57-bin.0000381353,注意:在完成设置之前都不能对主库进行操作以免这两个记录发生改变

3.2 设置从库(这里为Docker中的MySQL)

  1. 修改从库MySQL数据库的配置文件,这里文件在/etc/my.cnf

    添加信息为:

    [mysqld]
    server-id=100 #必须服务器唯一ID
    

    找到[mysqld]标签然后添加下面一行然后保存即可

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

  2. 重启MySQL服务(我这里直接重启容器了)

  3. 登录从库中的MySQL然后执行下面的语句:

    change master to master_host='192.168.1.172',master_port=3306,master_user='mercurows',master_password='5508769123',master_log_file='DESKTOP-UPK0D57-bin.000038',master_log_pos=1353;
    
    start slave;
    

    解释:

    • change master to:告诉MySQL服务器,接下来要更改主从复制的设置
    • master_host='192.168.1.172':指定主数据库的主机名或IP地址。在这里就是我宿主电脑的IP地址
    • master_port=3306:指定主数据库的端口号。默认情况下,MySQL的端口号是3306
    • master_user='mercurows':指定连接到主数据库的用户名,这里用户名是 mercurows。这个就是上面主数据库中刚刚创建的用户
    • master_password='5508769123':这是指定连接到主数据库的用户的密码,这里密码是 5508769123
    • master_log_file='DESKTOP-UPK0D57-bin.000038':这是指定主数据库上用于复制的二进制日志文件的名称。在主从复制中,主数据库会将更改记录在二进制日志文件中,从数据库会从这些文件中读取并应用这些更改。而这个日志名称在上面的3.1中的4.检查主库状态中得出
    • master_log_pos=1353:这是指定从哪个位置开始读取主数据库的二进制日志文件。而这个位置在上面的3.1中的4.检查主库状态中得出

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

  4. 检查

    show slave status \G;
    

    docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

slave机器上有两个关键的进程,必须两个都要显示为 Y E S YES YES,一个是Slave_IO_Running:,一个是Slave_SQL_Running:一个负责与主机的io通信,一个负责自己的slave mysql进程。

3.3 测试

初始数据库情况:docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

mysql–主库,slave–从库

  1. 在主库中创建testdatabase数据库然后刷新从库:

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

  1. 在主库创建user表并刷新从库

docker mysql8 主从,配置,杂项,MySQL,docker,容器,运维

经测试,对主库的增删改均能同步到从库中。文章来源地址https://www.toymoban.com/news/detail-822067.html

参考

  1. 如何在Windows上更改Docker的默认安装路径?
  2. docker搭建mysql8主从复制(一主一从)

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

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

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

相关文章

  • MySQL运维15-一主一从读写分离

    读写分离,是把数据库的读和写分开操作,以应对不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效的减轻单台数据库的压力。 MySQL的主从复制是基于二进制(binlog)实现的 说明1:当主服务器的MySQL执行了DML,DDL语句之后,会将数据的变更写入到

    2024年02月04日
    浏览(26)
  • MySQL一主一从、配置一主多从结构、数据读写分离

    部署mysql主从同步 配置mysql主从 分为主数据库角色(master)、从数据库服务器角色(slave) 网站服务器连接后存储数据的服务器作为主服务器 自动同步主服务器上的数据 192.168.88.53 做master 启用binlog日志文件 指定server_id 重启服务 用户授权 查看正在使用的binlog日志文件 192.

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

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

    2024年02月16日
    浏览(28)
  • MySQL8.xx一主两从复制安装与配置

    docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升维: 道、法、术、器、势 多台服务器间

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

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

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

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

    2024年02月07日
    浏览(30)
  • MYSQL8主从复制

    关键点: 主库 创建一个 远程用户 并 授予复制权限 。 在 主库 和 从库 的 my.cnf 配置 服务器唯一id ; 开启 全局事务ID ; 在 my.cnf 文件中启用 二进制日志 记录,并为其分配一个 唯一的服务器 ID 。 关闭 主节点 和 从节点 的mysql服务。 主服务器配置 每个数据库实例的 服务器ID 要

    2024年02月01日
    浏览(46)
  • Mysql主从数据库搭建(一主两从)

    目录 1、服务器规划 2、主从同步流程 3、主从搭建 3.1、master节点上配置文件修改 3.2、master节点创建同步用户和权限 3.3、slave1和slave2节点配置文件修改 3.4、slave1和slave2节点执行同步任务 3.5、解决虚拟机克隆导致mysql所有服务器uuid都一样的问题 4、bin-log相关说明 5、主从同步注

    2024年02月11日
    浏览(30)
  • 基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)

    系统:Macbook M1 镜像版本:mysql:5.7 如果是要查 slave 连接不上 master 的问题,可以直接跳到文章末尾踩坑处 准备工作 拉取镜像 本地数据卷挂载 因为mysql不挂载的话,重启丢失数据,所以在本地创建三个空的文件夹 conf、data、log 即可 部署mysql_master(主) 运行master容器 不加 -

    2024年02月10日
    浏览(27)
  • MySQL8.0.33主从复制配置记录

    官网:https://dev.mysql.com/downloads/mysql/ 在线下载或者下载到本地再上传 准备wget下载工具: 进入MySQL的bin目录 初始化并得到密码 ./mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory 报错,缺依赖:::: yum install -y libaio yum -y install numactl 再初始

    2024年02月02日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包