docker 配置 Mysql主从集群

news2024/11/22 8:32:10

Docker version 20.10.17, build 100c701

MySQL Image version: 8.0.32

Docker container mysql-master is source. mys

ql-replica is replication.

 

master == source. replica == slave.名称叫法不一样而已。

Choose one of the way,与replica同步数据两种情况:

  1. source有存在的数据并且你想同步到replica,这种需要mysqldump备份source数据,然后CHANGE REPLICATION SOURCE TO
  2. you are setting up a new source and replica combination,其实就是你source没有数据,没有想同步到replica的,这种的不需要mysqldump备份source数据复原到replica,直接CHANGE REPLICATION SOURCE TO

网络大多为第二种情况,那么我就写第一种情况,第一种情况基本就多了mysqldump这个步骤。

Pull MySQL image And run mysql-master#

docker pull mysql/mysql-server:latest

你可以去Docker Hub寻找适合的版本: docker hub

主节点的my.cnf配置为:

[mysqld]
server_id=1
socket=/var/lib/mysql/mysql.sock
user=mysql

Mysql8很多配置已经为默认,比如binlog默认开启,log_replica_updates默认开启,注意server_id需要source和replica不要相同。

datadir文件夹下要注意为空才行,否则会启动不成功。如果启动过程遇到任何问题,可以使用docker logs mysql-master命令查看出了什么问题。

注意docker使用mount命令,需要文件或者文件夹都存在,而-v不需要。
可搜索--mount和-v两个命令的区别。

docker run -p 3307:3306 --name mysql-master \
--mount type=bind,src=/root/working/mydata/mysql-master/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/root/working/mydata/mysql-master/datadir,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql/mysql-server:latest

-p: 3307为云服务器端口,我用他连接datagrip。3306为容器内部端口。

mount:src为云服务路径,dst为容器内部路径。

MYSQL_ROOT_PASSWORD:为root用户指定密码,否则需要在docker logs去查看此容器自己生成的密码。

创建一个远程访问的账号和一个做主从同步的账号#

创建一个远程访问的账号,方便我们使用datagrip等工具连接我们的数据库。

注意云服务器的安全组规则,是否把我们需要的端口放开了,比如3306,3307,3308

docker exec -it mysql-master mysql -uroot -p命令进入到数据库,root账号的密码为上面我们设置的root

进来数据库后,我们创建账号:

#添加远程登录用户
CREATE USER 'keboom'@'%' IDENTIFIED BY 'keboom';
GRANT ALL PRIVILEGES ON *.* TO 'keboom'@'%';

keboom这个账号用来datagrip软件连接我们的数据库。

接着我们创建一个用来做主从同步的用户:

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

repl这个账号用来replica节点来向source节点同步数据。

mysqldump命令在主库备份数据,接着从库恢复此备份#

  1. 在主库执行FLUSH TABLES WITH READ LOCK;将主库只读,这时记录主库binlog位置,并做mysqldump备份。备份做好之后,则解锁。

  2. 我们新开一个终端,进入数据库执行SHOW MASTER STATUS\G 获得主库binlog位置。

    mysql> SHOW MASTER STATUS\G
    *************************** 1. row ***************************
                 File: binlog.000002
             Position: 2185
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)
    
    
  3. 我们再新开一个终端,执行 docker exec -it mysql-master bash,进入容器进行备份。

    注意docker exec -it mysql-master bash 和 docker exec -it mysql-master mysql -uroot -p 区别

  4. mysqldump -uroot -p --databases test --source-data > dbdump.db,这里我自己创建了一个test数据库,我只备份这一个数据库。可以在test数据库创建一个表,插入几条数据,用来验证同步数据是否成功。

  5. UNLOCK TABLES; 备份好数据之后,就可以解锁了。

启动replica节点#

replica—my.cnf配置为:

[mysqld]
server_id=21
socket=/var/lib/mysql/mysql.sock
user=mysql
docker run -p 3308:3306 --name mysql-replica \
--mount type=bind,src=/root/working/mydata/mysql-replica/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/root/working/mydata/mysql-replica/datadir,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql/mysql-server:latest
  1. replica启动好后,将dbdump.db 文件复制到挂载的目录下,进入到replica容器,执行mysql -uroot -p < dbdump.db ,这时我们就把备份恢复到从节点了,我们可以在主库试着添加几条数据,可以看到此时从库还不能同步数据。

  2. 进入到replica数据库,执行命令:

    CHANGE REPLICATION SOURCE TO
        -> MASTER_HOST='172.17.0.2',SOURCE_USER='repl',SOURCE_PASSWORD='repl',SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=2185,GET_MASTER_PUBLIC_KEY=1;
    
    MASTER_PORT如果你的mysql用的不是3306,记得设置一下。
    

    获得MASTER_HOST,可执行:

    docker inspect mysql-master | grep IP                                   
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                        "IPAMConfig": null,
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
    
    

    SOURCE_USER就是我们在主库创建的用于主从同步的用户。

    SOURCE_LOG_FILE,SOURCE_LOG_POS是上面在主库中查询到的。

    GET_MASTER_PUBLIC_KEY,mysql8 默认使用 caching_sha2_password authentication plugin。replica需要向source获得公匙。

  3. START REPLICA;

  4. SHOW REPLICA STATUS\G 查看同步状态。如果Replica_IO_Running 和Replica_SQL_Running 都为Yes那么基本就成功了。如果有其他问题,可以通过docker logs mysql-replica查看日志。

可以试试在test数据库的表中插入几条数据,看看从库是否同步过来。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/842092.html

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

相关文章

从 TCP/IP 到 CCIP:Chainlink 与合约的互联网

未来已来。通过链上金融重塑资本市场预计将影响全球价值 8.67 万亿美元的资产的使用方式。 Chainlink 的跨链互操作性协议&#xff08;CCIP&#xff09;将会这一转型过程中发挥重要作用&#xff0c;这是区块链连接性和互操作性的突破&#xff0c;使得 DeFi 应用可以通过单一界…

【Docker】Windows下docker环境搭建及解决使用非官方终端时的连接问题

目录 背景 Windows Docker 安装 安装docker toolbox cmder 解决cmder 连接失败问题 资料获取方法 背景 时常有容器方面的需求&#xff0c;经常构建调试导致测试环境有些混乱&#xff0c;所以想在本地构建一套环境&#xff0c;镜像调试稳定后再放到测试环境中。 Windows …

【SAP-MDG】MDG配置-激活事件类型链接 Activate Event Type Linkage

路径&#xff1a;MDGIMG→General Settings→Process Modeling→Workflow→Activate Event Type Linkage. 路径&#xff1a;MDGIMG→常规设置→流程建模→工作流→激活时间类型链接. MDG是自带工作流的&#xff0c;所以根据《MDG配置手册》中&#xff0c;是需要激活此功能的 第…

【Linux】结合Python 简易实现监控公司网站,邮件发送异常

目录 背景 实现思路 邮件4小时内只会发送一次&#xff0c;如果执行了发送邮件的脚本&#xff0c;就使用sed命令将对应的调用代码置为无效 请求脚本 Python邮件发送脚本 定时任务设置 恢复邮件发送能力脚本 资料获取方法 背景 由于一些原因&#xff0c;博主负责测试的网…

24届近5年重庆邮电大学自动化考研院校分析

今天给大家带来的是重庆邮电大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、重庆邮电大学 学校简介 重庆邮电大学简称"重邮"&#xff0c;坐落于直辖市-重庆市&#xff0c;入选国家"中西部高校基础能力建设工程”、国家“卓越工程师教育培养计划…

使用gitee创建远程maven仓库

1. 创建一个项目作为远程仓库 2. 打包项目发布到远程仓库 id随意&#xff0c;url是打包到哪个文件夹里面 在需要打包的项目的pom中添加 <distributionManagement><repository><id>handsomehuang-maven</id><url>file:D:/workspace/java/2023/re…

【Spring Boot】(三)深入理解 Spring Boot 日志

文章目录 前言一、日志文件的作用二、Spring Boot 中的日志2.1 查看输出的日志信息2.2 日志格式二、Spring Boot 中的日志2.1 查看输出的日志信息2.2 日志格式 三、自定义日志输出3.1 日志框架3.2 日志对象的获取3.3 使用日志对象打印日志 四、日志级别4.1 日志级别的作用4.2 日…

vuejs源码分析之全局API(vm.$off)

vue在初始化的时候会给vue对象本身挂载一些全局的api。今天我们一个一个来看这些api。 vm.$off方法 这个方法是用来移除自定义事件监听器。 他的用法 vm.$off(event, calback)第一个参数event取值可以是string字符串&#xff0c;也可以是Array<string>也就是说既可以删…

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…

wpf 3d 坐标系和基本三角形复习

wpf 3d 坐标系的描述见此&#xff0c; WPF 3d坐标系和基本三角形_wpf 坐标系_bcbobo21cn的博客-CSDN博客 X轴正向向右&#xff0c;Y轴正向向上&#xff1b;Z轴&#xff0c;正向是从屏幕里边出来&#xff0c;负向是往屏幕里边去&#xff1b;坐标原点是在呈现区域的中心&#x…

TestDataLake在提升测试效能方面的实践

目录 1.背景 2.预期目标 3.系统设计和实现 3.1系统功能组成 3.2 数据智能生成 3.3 接口遍历测试 4.应用效果和收益 5.后续规划 1.背景 随着软件开发的迅速发展&#xff0c;测试数据管理变得越来越复杂。手动创建测试数据需要耗费大量时间和精力&#xff0c;同时容易出…

bigemap用于自然资源调查规划设计院

获取途径&#xff1a;之前看到别人使用我们软件&#xff0c;然后去我们官网下载地图体验了一下&#xff0c;想试试。买单点&#xff1a;影像清晰&#xff0c;最主要是使用手机端&#xff0c;跑外业&#xff0c;定位&#xff0c;记录轨迹&#xff0c;拍照&#xff0c;等高线制作…

网络安全进阶学习第十三课——SQL注入Bypass姿势

文章目录 一、等号被过滤二、substr、mid等被过滤三、逗号被过滤四、and/or被过滤五、空格被过滤五、其他绕过方式 一、等号被过滤 1、like&#xff0c;rlike语句&#xff0c;其中rlike是正则2、大于号>&#xff0c;小于号<3、符号<>&#xff1a;<>为不等于…

认识 spring AOP (面向切面编程) - springboot

前言 本篇介绍什么是spring AOP, AOP的优点&#xff0c;使用场景&#xff0c;spring AOP的组成&#xff0c;简单实现AOP 并 了解它的通知&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 什么是s…

Automa-通过连接块来自动化你的浏览器

1、前言 通过浏览器插件可实现自动化脚本的录制与编写&#xff0c;具有代表性的工具就是&#xff1a;Selenium IDE、Katalon Recorder&#xff0c;对于简单的业务来说可快速实现自动化的上手工作。 Selenium IDE Katalon Recorder 如果你想学习接口自动化测试&#xff0c;我这…

1990-2021年31省数字经济测算指标(20多个指标)

1990-2021年31省数字经济测算指标&#xff08;20多个指标&#xff09; 1、来源&#xff1a;国家统计局 2、时间&#xff1a;1990-2021年 3、范围&#xff1a;31省 4、指标&#xff1a; 地区、年份、邮电业务总量、邮政业务总量、电信业务总量、函件数(亿件)、包裹数(万件)、…

selenium常用API的使用

目录 定位元素&#xff08;findElement&#xff09; CSS选择器定位 xpath选择器定位 CSS选择器和xpath选择器区别 操作测试对象 click&#xff1a;点击 sendKeys&#xff1a;输入文本框内容 clear&#xff1a;清除文本框内容 text&#xff1a;获取元素文本内容 …

JVM之类加载与字节码(二)

3. 编译期处理 什么是语法糖 所谓的 语法糖 &#xff0c;其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中&#xff0c;自动生成 和转换的一些代码&#xff0c;主要是为了减轻程序员的负担&#xff0c;算是 java 编译器给我们的一个额外福利&#xff08;给…

看跨境电商世界区域分布,Live Market教你深入参与跨境创业

随着全球化发展带来互联网技术的进步和平台经济的触角伸向全球&#xff0c;跨境电商越来越成为全球贸易的重要组成部分。根据国际数据公司&#xff08;IDC&#xff09;的最新数据显示&#xff0c;全球前五大跨境电商平台分别是亚马逊、阿里巴巴、eBay、Wish和京东全球购。这五家…

【Linux】内核线程创建 kthread_run 函数和内核中断

kthread_run函数详解 以PCIE的热插拔内核线程创建为例说明 注意&#xff1a;内核线程和RTOS的线程略有不同&#xff0c;这里Linux上创建以后直接运行&#xff0c;RTOS上有的是需要加入到调度队列中后才会执行&#xff0c;比如RT-Thread的系统 kthread_run 是 Linux 内核中的…