当前位置: 首页 > news >正文

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

image-20231007130311640

2.2 查看本地镜像

$ docker images

image-20231007130538272

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镜像的名称

image-20231007133351291

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

2.4 检查安装

$ docker ps

image-20231007133459706

打开Docker Desktop检查

image-20231007133558413

image-20231007133610652

宿主机登录Docker中的MySQL

image-20231007134012443

3. 主从复制

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

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

    添加信息为:

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

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

    image-20231007135215460

  2. 重启MySQL服务

    (管理员权限)

    $ net stop mysql80$ net start mysql80
    

    image-20231007140028457

  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'@'%';
    

    image-20231007141729598

  4. 检查主库状态

    show master status;
    

    image-20231007152113200

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

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

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

    添加信息为:

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

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

    image-20231007143535953

  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.检查主库状态中得出

    image-20231007152446485

  4. 检查

    show slave status \G;
    

    image-20231007152624652

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

3.3 测试

初始数据库情况:image-20231007153210127

mysql–主库,slave–从库

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

image-20231007153357739

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

image-20231007153643507

经测试,对主库的增删改均能同步到从库中。

参考

  1. 如何在Windows上更改Docker的默认安装路径?
  2. docker搭建mysql8主从复制(一主一从)
http://www.lryc.cn/news/186379.html

相关文章:

  • 40V汽车级P沟道MOSFET SQ4401EY-T1_GE3 工作原理、特性参数、封装形式—节省PCB空间,更可靠
  • 记录在搭建Jenkins时,所遇到的坑,以及解决方案
  • 二极管“天马行空”的作用,你知道吗?
  • 鼎盛合:adc芯片的五种结构
  • CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http
  • 物联网AI MicroPython传感器学习 之 4路电容式触摸开关
  • 头戴式耳机什么牌子最好?头戴式耳机推荐性价比高
  • 第 366 场周赛 LeetCode 周赛题解
  • Linux: tcpdump抓包示例
  • seafile server10.0.1 onlyoffice
  • 商城系统选型:Java商城系统还是PHP商城系统好?
  • 【多线程进阶】线程安全的集合类
  • 016 Spring Boot + Vue 图书管理系统
  • C语言中volatile/register/const/static/extern/auto关键字的作用
  • docker compose的安装和使用
  • /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by
  • 数字化转型的必备工具:智能呼叫中心系统的应用
  • macOS Sonoma 正式版系统已发布,macos14值得更新吗
  • 数据结构-图-最短路径问题
  • 弹性资源组件elastic-resource设计(二)-集群
  • Flink学习笔记(一):Flink重要概念和原理
  • 网络中的一些基本概念
  • mysql中varchar长度为多少
  • python+selenium实现UI自动化(入门篇)
  • 深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict
  • 【DevOps】搭建你的第一个 Docker 应用栈
  • 软件测试职业生涯需要编写的全套文档模板,收藏这一篇就够了 ~
  • 【Kubernetes】Pod——k8s中最重要的对象之一
  • vue-cli-service: command not found问题解决
  • 每日一练 | 华为认证真题练习Day117