在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制

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

在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

前言

很多系统在我们日常使用中随着业务量的扩展,系统访问量增加,单台Mysql可能会负载过重,I/O频率过高等问题。轻则读写效率低,严重的可能会导致宕机数据丢失的问题,这时候就可以采用主从复制、读写分离可以提高数据库的可用性,减少单台MySQL数据库服务器的压力,提高数据库能更大的并发。

主从复制原理

在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制
从上图我们来了解一下Mysql主从复制的原理:主(Master)、从(salve)

  1. 客户端发起SQL操作Master数据变更(insert、update、delete)会记录到binlog中
  2. Salve从库连接Master主库创建Dump线程,随时监听binlog变化
  3. Master节点的binlog发生变化时,Dump线程会通知所有的Salve节点,并将相应的binlog内容推送给Slave节点
  4. I/O线程接收到 binlog 内容后,将内容写入到本地的 Relay-Log
  5. SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作

实现主从复制注意要点:

主库开启binlog日志
设置server-id且主从不同
从库服务器能连通主库

MySQL主从复制的形式:

一主一从
一主多从
多主一从
双主复制
级联复制

本章节主要以Docker内容为主,Mysql主从复制相关内容就不再赘述了,感兴趣的可以关注评论,大家再一起探讨!

环境准备

大致大家有了对主从复制的一个理解后,我们开始实现Mysql一主二从;

端口号规划如下
3306(主) 数据卷 /mydata/mysql-master
3307(从) 数据卷 /mydata/mysql-slave1
3308(从) 数据卷 /mydata/mysql-slave2

实战大于理论

一主二从Mysql安装

Master主库安装

docker run -p 3306: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/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql

slave1从库安装

docker run -p 3307:3306 --name mysql-slave1 \
-v /mydata/mysql-slave1/log:/var/log/mysql \
-v /mydata/mysql-slave1/data:/var/lib/mysql \
-v /mydata/mysql-slave1/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql

slave2从库安装

docker run -p 3308:3306 --name mysql-slave2 \
-v /mydata/mysql-slave2/log:/var/log/mysql \
-v /mydata/mysql-slave2/data:/var/lib/mysql \
-v /mydata/mysql-slave2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql

检测容器是否成功运行
在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制

Master主库配置

设置主库配置文件,在宿主机 /mydata/mysql-master/conf 目录下新建my.cnf设置如下内容

[mysql]
default-character-set=utf8mb4
[mysqld]
#设置server_id,同一局域网中需要唯一
server_id=20
#指定不需要同步的数据库名称 binlog-do-db 为需要同步的数据库
binlog-ignore-db=mysql
#开启二进制日志功能
log-bin=micro-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

使用指令重启容器使用配置生效 docker restart mysql-master

  • 进入容器 docker exec -it mysql-master /bin/bash
  • 进入数据库 mysql -u root -p 输入密码登陆

构建从库用户账户密码

-- 创建名slave为用户供从库连接
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
-- 授权表示可以从任意ip使用此用户名和密码连接到主数据库
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
-- 刷新配置
FLUSH PRIVILEGES;

Slave从库配置

设置从库配置文件,在宿主机 /mydata/mysql-slave1/conf 目录下新建my.cnf设置如下内容,slave2同理

[mysql]
default-character-set=utf8mb4
[mysqld]
#设置server_id
server_id=17
#指定不需要同步的数据库名称
binlog-ignore-db=mysql  
#开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=micro-mysql-slave-bin  
#设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
#设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
#二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
#relay_log配置中继日志
relay_log=micro-relay-log-bin
#log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
#slave设置为只读(具有super权限的用户除外)
read_only=1

启动Slave从库复制

首选我们在主库执行一下 show master status; 获取binlog日志名称 和日志偏移量, 从库开启复制所需的必要参数;
在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制
进入对应从库,配置主从连接关系 * 注意是在从库操作 执行以下SQlL

CHANGE MASTER TO 
MASTER_HOST='192.168.1.20',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='micro-mysql-bin.000001',
MASTER_LOG_POS=156,
MASTER_CONNECT_RETRY=30,
MASTER_PORT=3306;

参数说明:

  • MASTER_HOST 主数据库的IP地址
  • MASTER_USER 在主库创建的同步数据用户名
  • MASTER_PASSWORD 在主库创建的同步数据用户密码
  • MASTER_LOG_FILE 主库的binlog日志名称
  • MASTER_LOG_POS binlog日志偏移量即从数据库从哪个位置开始复制数据
  • MASTER_CONNECT_RETRY 连接失败重试的时间间隔,单位为秒
  • MASTER_PORT 主库的运行端口

上述SQL执行完成开启从库复制,slave2配置和slave1一致这里就不再重复了;

-- 启动主从复制
start slave;

如需停止主从复制执行 stop slave;
如需清理掉之前的配置,重新配置 执行 reset slave all;

查看设置是否成功

-- 启动主从复制
show slave status \G; 

出现下图则证明主从复制设置成功
在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制
如果出现两个参数非YES的情况,注意观察 Last_IO_Error 的提示信息,如果出现
Authentication plugin ‘caching_sha2_password‘ reported error: Authentication requires sec 的异常问题,主要是因为8.0以后默认使用caching_sha2_password方式,因此需要将其改成mysql_native_password验证机制

解决思路一:修改Slave用户密码验证
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

解决思路二:修改my.cnf 追加设置默认密码验证
default_authentication_plugin=mysql_native_password

测试验证

主库新建test表执行上一章中我们的student建表语句;

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '学生ID',
  `name` varchar(50) NOT NULL COMMENT '学生姓名',
  `gender` varchar(10) NOT NULL COMMENT '学生性别',
  `birthday` date NOT NULL COMMENT '学生生日',
  `address` varchar(100) NOT NULL COMMENT '学生住址',
  `phone` varchar(20) NOT NULL COMMENT '学生联系方式',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生信息表';

INSERT INTO `student` (`id`, `name`, `gender`, `birthday`, `address`, `phone`) VALUES (1, '小明', '男', '2023-06-16', '广州', '13700137000');
INSERT INTO `student` (`id`, `name`, `gender`, `birthday`, `address`, `phone`) VALUES (2, '小羊', '女', '2023-06-16', '广州', '13800126000');

在主库mysql-master容器 show databases;
在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制
验证Slave1从库和Slave2从库是否已经完成复制,登陆从库mysql后 show databases;

-- 选择数据库
use test;
-- 查询表信息
select * from student;

在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制
看到如上数据,证明本次我们使用Docker上实现MYSQL实现主从复制已经成功了~

读写分离推荐Apache ShardingSphere

数据库完成了主从复制后,在我们JAVA开发中可以使用Apache ShardingSphere作为读写分离的解决方案,如果大家对这个框架感兴趣可以留言评论,后续考虑出一期Apache ShardingSphere的使用教程。

结语

本章节主要对Mysql主从复制使用场景、Mysql主从复制的原理,最后使用Docker实现MYSQL实现主从复制,从主库到从库的配置,再实际的业务场景中,更多的应该是两台或多台应用服务器部署的Mysql进行主从,而非一个宿主机上两个mysql容器实现主从,当然大家只要跟着博主的代码内容,了解原理都能轻松上手!最后如果本章节内容对你有用,希望点赞收藏加关注!文章来源地址https://www.toymoban.com/news/detail-498034.html

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

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

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

相关文章

  • kotlin和java相互转换的实操

    在进行安卓开发时,需要熟悉java语言的同时还要对kotlin有所了解,但是这对小白来说是非常不友好的,但是android studio自带工具,可以实现java和kotlin之间的相互转换。 1.将android studio停留在要转java源文件的kt文件页面 2.点击工具栏的Tools-Kotlin-Show Kotlin Bytecode 3.点击Decompile 4.成

    2024年02月15日
    浏览(55)
  • 钉钉stream机器人-实操详细教程

    支持事件订阅、机器人收消息、卡片回调等功能 优点: 配置简单,不依赖也不需要暴露公网IP,无需向公网开放端口 github官方链接:GitHub - open-dingtalk/dingtalk-stream-sdk-python: Python SDK for DingTalk Stream Mode API, Compared with the webhook mode, it is easier to access the DingTalk chatbot 安装 pip insta

    2024年02月06日
    浏览(37)
  • 新手小白如何开始网络赚钱?最靠谱的实操方法来了!

    互联网的发展不仅使人们的生活更加的便利,同时也催生出很多致富的商机,很多人通过互联网创业赚到了钱,那么对于不了解互联网的人来说,如何利用互联网赚钱呢? 做一件事想要成功也非常简单,首先找到一个靠谱的产品或者项目,其次是制定好清晰的计划,然后是超

    2024年02月07日
    浏览(42)
  • 亲手打造大数据分析项目:一篇看完就能上手的实操指南

    在我们的日常生活中,大数据无处不在。从推荐系统到精准医疗,大数据都在不断地影响着我们的生活。那么,如何利用大数据进行分析呢?今天,我将带领你一步步地完成一个大数据分析项目,从数据预处理到模型构建,我将向你展示完整的开发流程。 在开始之前,我们需

    2024年02月16日
    浏览(57)
  • 【零基础学机器学习 2】 机器学习的实操步骤-以及在Python中实现机器学习模型

    👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我! 🏆 本文收录于专栏: 零基础学机器学习 🔥 专栏

    2024年02月05日
    浏览(42)
  • CentOS 9 (stream) 安装 Docker

    Docker 是一个开源的容器化平台,可帮助开发者轻松地创建、部署和运行应用程序。 Docker 使开发人员能够在一个独立的容器中打包应用程序及其依赖项,这样他们就可以轻松地将应用程序移植到任何其他环境中。 Docker 主要由以下几个组件组成: Docker 客户端 : Docker 客户端是

    2024年03月14日
    浏览(48)
  • Linux CentOS stream 9 安装docker

    在计算机技术中,虑拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。 目前,大多数服务器的容量的利用率不足15%,这导致服务器数量激增以及增加了复

    2024年02月21日
    浏览(38)
  • CentOS Stream 9中安装MySQL的详细步骤

    卸载MySQL 安装前先卸载系统上旧版本的 MySQL(没有则跳过此步骤) 查看已安装的MySQL 卸载查询到的所有安装包 删除 my.cnf 查看 /etc/my.cnf 文件是否还存在,若存在则直接删除 rm -f /etcmy.cnf 在线安装 进入官网下载所需的MySQL版本,下载后上传至服务器任意目录下 或者复制下载链

    2024年02月11日
    浏览(46)
  • VMware 虚拟机安装 CentOS Stream 9【图文详细教程】

    系统需要开启虚拟化 VMware Pro 17 安装:https://www.yuque.com/u27599042/ccv8wh/ztmn0vkg3iimqyed https://www.centos.org/centos-stream/ 根据你电脑的操作系统类型,选择点击下载 在 VMware 中,点击文件,然后选择新建虚拟机 选择自定义虚拟机配置,然后点击下一步 这里一般会默认选择和你 VMware 版

    2024年04月27日
    浏览(43)
  • Linux之CentOS_7.9卸载MySQL_5.7全过程实操手册

    前言:接以上,前面记录了Windows和Linux环境的MySQL部署,那我们既然都部署完成验证测试那就来个卸载记录吧,便于闭环收尾。 环境: 1、关闭mysql服务 2、使用 rpm 命令查看已安装的安装包,如有直接rpm -ev卸载 3、查找涉及到mysql的文件及路径 4、删除mysql用户及用户组(如需

    2024年02月13日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包