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.mzph.cn/news/97935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全-信息收集】网络安全之信息收集和信息收集工具讲解(提供工具)

工具下载百度网盘链接(包含所有用到的工具&#xff09;&#xff1a; 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.…

HDLbits: ece241 2014 q4

module top_module (input clk,input x,output z ); reg [2:0] Q;always(posedge clk)beginQ[0] < Q[0] ^ x;Q[1] < (~Q[1]) & x;Q[2] < (~Q[2]) | x;z < ~(| Q[2:0]); //错误&#xff01;&#xff01;&#xff01;&#xff01;endendmodule 正确答案&#xf…

10.07hw

int main() {string str;cout << "输入字符串:";getline(cin,str);int size str.size();int big 0;int small 0;int num 0;int space 0;int other 0;for(int i0;i<size;i){if(str[i]<Z&&str[i]>A){big;}else if(str[i]<z&&st…

透明度和透明贴图制作玻璃水杯

1、什么是透明度 模型透明度是指一个物体或模型在呈现时的透明程度。它决定了物体在渲染时&#xff0c;是否显示其后面的物体或背景。 在图形渲染中&#xff0c;透明度通常以0到1之间的值表示。值为0表示完全透明&#xff0c;即物体不可见&#xff0c;背景或其他物体完全穿透…

RabbitMQ-网页使用消息队列

1.使用消息队列 几种模式 从最简单的开始 添加完新的虚拟机可以看到&#xff0c;当前admin用户的主机访问权限中新增的刚添加的环境 1.1查看交换机 交换机列表中自动新增了刚创建好的虚拟主机相关的预设交换机。一共7个。前面两个 direct类型的交换机&#xff0c;一个是…

MongoDB——window11安装mongodb5.0.21版本服务端(图解版)

目录 一、mongodb官网下载地址二、安装步骤三、配置环境变量四、运行mongodb 一、mongodb官网下载地址 mongodb官网下载地址&#xff1a;https://www.mongodb.com/try/download/community 二、安装步骤 双击运行下载好的mongodb-windows-x86_64-5.0.21-signed.msi安装包&am…

【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 光学显微镜算法&#xff08;OMA&#xff09;1.1 物镜放大倍数1.2 目镜放大倍数 2. 改进后的IOMA算法2.1 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节&#xff1a;…

【MySQL】视图特性

目录 MySQL视图特性 基本使用 准备测试表 创建视图 修改视图影响基表 修改基表影响视图 删除视图 视图规则和限制 MySQL视图特性 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。…

【傅里叶梅林图像配准】用于图像配准的傅里叶梅林相位相关性的实现(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深度学习-卷积神经网络-ResNET

文章目录 前言1.resnet2.作者3.精度&#xff08;TOP-5&#xff09;4.论文一览5.竞赛排名6.网络退化7.残差8.残差 1.作者 前言 本文来自B站&#xff1a; ResNet深度残差网络 1.resnet 2.作者 3.精度&#xff08;TOP-5&#xff09; 4.论文一览 5.竞赛排名 6.网络退化 ResNet解…

【2023研电赛】东北赛区一等奖作品:基于FPGA的小型水下无线光通信端机设计

本文为2023年第十八届中国研究生电子设计竞赛东北赛区一等奖作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&a…

飞凌OK3588 开发板 初体验~~~~

一、飞凌OK3588-C开发板 ​ 开发板采用核心板底板接插方式。板卡接口丰富、可应用于计算机、手机、个人移动互联网&#xff0c;数字多媒体设备&#xff0c;3588开发板如下图~&#xff0c;&#xff08;左边的小板是否很熟悉啊~~~&#xff09; ​ 二、开机试用 ​随机配件…

Modelsim测试覆盖率操作说明

1、打开Project窗口界面 2、在project界面下&#xff0c;选中所有需要测试覆盖率的.v文件&#xff08;不包括tb文件&#xff09;&#xff0c;鼠标点击右键&#xff0c;在Properties选项中选择Coverage选项&#xff0c;选择需要测试的覆盖率类型 3、重新编译所有的源文件&#x…

爱普生L125X_L325X系列打印机Wi-Fi配置方法(Smart Panel)

准备工作&#xff1a; 手机需要下载“Epson Smart Panel”APP&#xff1b; 配置无线&#xff08;Wi-Fi&#xff09;方法 说明&#xff1a;SSID名称&#xff08;Wi-Fi名&#xff09;不能包含中文字符,路由器需要选择2.4GHz频段; 1. 打开“Epson Smart Panel”软件&#xff0…

2021-06-15 51单片机c语言秒表的仿真ISIS7 professional

缘由51单片机c语言秒表的仿真ISIS7 professional_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; sbit K4 P1^4; sbit LED1P1^0; sbit LED2P1^1; sbit LED3P1^2; sbit LED4P1^3; bit k0; unsigned char code SmZiFu[]{63,6,91,…

asp.net core 远程调试

大概说下过程&#xff1a; 1、站点发布使用Debug模式 2、拷贝到远程服务器&#xff0c;以及iis创建站点。 3、本地的VS2022的安装目录&#xff1a;C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE下找Remote Debugger 你的服务器是64位就拷贝x64的目…

比 N 小的最大质数

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

【力扣-每日一题】714. 买卖股票的最佳时机含手续费

class Solution { public:int maxProfit(vector<int>& prices, int fee) {//[i][0]-不持有 [i][1]-持有int mprices.size();vector<vector<int>> dp(m,vector<int>(2));dp[0][0]0; //初始状态dp[0][1]-prices[0];for(int i1;i<m;i){dp[i]…

网络安全--安全认证、IPSEC技术

目录 1. 什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 2. 什么是身份认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 3. 什么是VPN技术&#xff1f; 4. VPN技术有哪些分类&#xff1f; 5. IPSEC技术能够…

【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】

GUI系列操作 1.枚举菜单实现文件1&#xff1a;Assets/MyScript/Test1.cs代码如下&#xff1a; 文件2&#xff1a;Assets/MyScript/Editor/Test1Editor.cs代码如下&#xff1a; 测试一下新建一个场景&#xff0c;新建一个Empty 节点&#xff0c;用来测试枚举组件将文件1&#xf…