mysql之主从复制和读写分离

一、主从复制

1、定义

主mysql上的数据(新增或修改库、表里的数据)都会同步到从mysql上

2、mysql的主从复制模式(面试题)

(1)异步复制(常用):默认的复制模式。客户端提交一个事务,主mysql会立即把结果返回给从服务器,主mysql不在意从mysql是否已接收并处理(只管发送,不在意结果)

问题:主一旦崩溃,主mysql的事务可能没有传到从mysql上,此时强行将从提升为主,可能新的主mysql上数据不完整(较少见,工作环境全是异步复制)

(2)全同步复制(少用):主库执行完成一个事务之后,所有的从库也都执行该事务后才会返回客户端

缺点:因为需要等待所有从库全部执行完成,性能降低。适用于对数据一致性和完整性要求很高的场景

(3)半同步复制(少用):介于异步复制和全同步复制之间。主库执行完一个客户端提交的事务之后,至少等待一个从库接收并处理完成之后才返回给客户端。适用于电视的网络中

优点:在一定程度上提高了数据安全性

缺点:有一定的延迟。延迟时间一般是一个TCP/IP的往返时间round-trip time[RTT](从发送到接收的时间,单位:ms)

3、主从复制的原理(重点)

(1)Master的更新事件(update、insert、delete)会按照顺序写入二进制日志bin-log中。当Slave连接到Master的后,Master机器会为Slave开启binlog dump线程,该线程会去读取bin-log日志

(2)Slave连接到Master后,Slave库有一个I/O线程 通过请求binlog dump thread读取bin-log日志,然后写入从库的relay log日志中。

(3)Slave还有一个 SQL线程,实时监控 relay-log日志内容是否有更新,解析文件中的SQL语句,在Slave数据库中去执行

4、Slave_IO_Runnin:NO该怎么办?(重点)

(1)网络问题

(2)myql.cnf配置文件错误

(3)绑定主从同步配置CHANGE master to master_host='192.168.233.21',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;

要么文件名错误,要么位置偏移量错误

(4)防火墙和安全机制问题(工作中没有此问题)

5、mysql实现读写分离的方式(重点)

amoeba、mycat

6、如何查看主从同步是否成功?(重点)

show slave status\G

slave_IO_Running和slave_sql_running都是yes

Slave_IO_Running: Yes #负责与主机的IO通信

Slave_SQL_Running: Yes #负责自己的slave mysql进程

并且在主库创建一个库或表,查看主库、从库是否同步

7、show slave status\G能看到的信息有哪些?(重点)

  1. IO和sql的线程状态信息
  2. master服务器的IP地址、端口和事务开始的位置
  3. 最近一次的错误信息和错误位置
  4. 最近一次的IO报错信息
  5. 最近一次的sql报错信息

8、主从复制延迟问题(重点)

(1)网络延迟

(2)主从硬件设备(CPU主频率、内存IO性能、硬件IO性能)

(3)使用了同步复制,而不是异步复制

如何解决?

(1)硬件方面:主库一般不需要改动,从库硬件配置要升级,提升随机写的性能(硬盘可换成固态、升级CPU的核数、扩展内存。尽量使用物理机,不要用云服务器)

(2)网络方面:主从服务器均在一个局域网内,尽量避免跨网段和跨机房

(3)架构方面:做读写分离,主服务器负责写,从库负责读,降低从库的压力

(4)mysql配置方面:从配置文件的角度实现性能最大化

1)追求安全性

①innodb_flush_log_at_trx_commit=1

每次事务提交时都会刷新日志,确保持久性。1是最高级别的数据安全性,但是会影响性能,默认是1(生产环境)

innodb_flush_log_at_trx_commit=0事务提交时不会立刻刷新,二十每秒刷新一次,可以提高性能,但是发生故障会导致数据丢失(安全性降低)

innodb_flush_log_at_trx_commit=2事务提交时日志不会写入硬而是写入缓存,也不会进行刷新,提升一定的安全性和性能,但对内存要求较高

②sync_binlog=1默认是1。每次提交事务后,直接把二进制日志刷新到磁盘,确保日志的持久性,占用较高性能,但安全性高

sync_binlog=0将二进制日志写入到缓存,也不会刷新日志,发生故障会丢失数据,同时对内存要求高

sync_binlog=N(N代表自定义)。每几个事务执行一次刷新到磁盘。提高性能,但一旦崩溃,数据会大量丢失

2)追求性能化

①sync_binlog=0

②innodb_flush_log_at_trx_commit=2

③logs-slaves-updates=0从库的更新不会写入二进制日志(断掉从库。不建议)

④innodb_buffer_pol_size 500G

设置存储引擎的缓冲池大小。设置的数值越高,可以提高innodb的性能。更多的数据和索引都可以缓存在内存中,减少磁盘的访问次数,对系统内存要求较高

二、读写分离

1、必须在主从复制的基础上实现读写分离

2、定义

所有的写入操作都在主库,从库只负责读select。如果有更新,是从主库复制到从库的

3、用什么方式实现mysql读写分离?

amoeba、mycat

三、实验

mysql之主从复制实验

实验思路:

实验条件:

mysql1——主服务器——20.0.0.13

mysql2——从服务器1——20.0.0.23

mysql3——从服务器2——20.0.0.33

实验步骤:

1、主、从服务器的时间同步

安装时间同步工具

2、修改时间同步配置文件

(1)主服务器——mysql1

fudge 127.127.0.0 stratum 8从本地获取时间源同步,不从网络获取

数字越小,时间精确度越高。设置fudge 8(时间层级是8,最高是15)

0是网段的第3位数,网段的第3位数是什么,这里就是什么

重启ntp服务

(1)从服务器1——mysql2

①开启时间同步

②时间同步到主服务器

③创建定时任务【每隔半小时主从服务器时间同步一次】

(3)从服务器2——mysql3

①开启时间同步

②时间同步到主服务器

③创建定时任务【每隔半小时主从服务器时间同步一次】

④开启同步命令工具,查看当前时间

3、主服务器mysql1

(1)修改mysql的配置文件

(2)进入数据库,给从服务器赋予复制权限【从库可以访问主库】

注:每操作一步数据库,这个偏移量的值都会发生变化,因此查看状态后,数据库最好就不要继续再操作任何内容了

4、从服务器1mysql2

(1)修改mysql配置文件

relay-log=relay-log-bin:

指定了从服务器上中继日志的基本文件名。在这个例子中,

中继日志的文件名将以 "relay-log-bin" 开头。

relay-log-index=slave-relay-bin.index:

指定了中继日志索引文件的名称。中继日志索引文件用于记录中继日志文件的顺序和位置

在这个例子中,索引文件名为 "slave-relay-bin.index"

relay_log_recovery=1:

用于配置从服务器在启动时是否执行中继日志的恢复操作。设置为 1 表示启用中继日志的恢复,通常在从服务器出现异常或崩溃后重启时使用。这有助于确保从服务器能够从主服务器的二进制日志中正确地读取和应用中继日志,以保持数据一致性

(2)进入数据库,配置主从同步

5、从服务器2mysql3

(1)修改配置文件vim /etc/my.cnf

(2)进入数据库,配置主从同步

Slave_IO_Running: Yes #负责与主机的IO通信

Slave_SQL_Running: Yes #负责自己的slave mysql进程

6、验证主从服务器同步

(1)创建库是否同步

(2)创建表是否同步

(3)更新表的内容验证是否同步

(4)从服务器更新,主服务器是否会同步更新?

不会。主从复制是单向的,只能从主服务器复制到从服务器

mysql之amoeba实现读写分离实验

实验思路:基于主从复制的基础上才能实现读写分离

实验条件:

mysql1——主服务器——20.0.0.13——mysql服务

mysql2——从服务器1——20.0.0.23——mysql服务

mysql3——从服务器2——20.0.0.33——mysql服务

test1——读写分离服务器——20.0.0.10——jdk1.6、Amoeba   

test2——客户端——20.0.0.20

实验步骤:

先做主从复制实验

再做读写分离实验

读写分离调度器test1

1、安装java环境

因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用

./jdk-6u14-linux-x64.bin执行java环境

(1)重命名(为了后面配置环境简单)

(2)修改java配置文件vim /etc/profile

2、安装amoeba服务

3、配置 Amoeba读写分离,两个 Slave 读负载均衡

(1)先在主、从服务器的mysql上开放权限给 Amoeba 访问

(2)再回到amoeba服务器配置amoeba服务

①修改用户信息配置文件

②修改数据库信息配置文件

③启动amoeba

按Ctrl+C返回

④查看8066端口是否开启

4、在客户端测试读写分离

(1)安装mariadb服务

(2)在主从服务器上开启查询日志

(3)通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从--从服务器

(4)在客户端服务器上测试

①第一次查看表

②第二次查看表

结论:查数据库,访问的是从服务器,并且会轮询从服务器实现select

③客户端插入表记录

mysql之mycat实现读写分离实验

实验思路:基于主从复制的基础上才能实现读写分离

实验条件:

mysql1——主服务器——20.0.0.13——mysql服务

mysql2——从服务器1——20.0.0.23——mysql服务

mysql3——从服务器2——20.0.0.33——mysql服务

test3——读写分离服务器——20.0.0.30——jdk1.6、mycat  

test2——客户端——20.0.0.20

实验步骤:

1、安装java环境

2、安装mycat工具

wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz

3、创建/apps文件夹,并解压mycat包至/apps下

4、设置变量环境

5、启动mycat,查看日志文件,最后可以看到启动成功

6、客户端安装mariadb

yum install -y mariadb-server mariadb

systemctl start mariadb.service

netstat -antp | grep 3306

7、客户端连接数据库

这里密码初始为123456   需要加端口

8、修改mycat配置文件

去掉44行行注释,对应的在51行行末注释,删除50行行末注释,5 * 60 * 1000L; //连接空>    闲检查

#修改45行端口号为3306

9、主服务器授权

10、客户端连接调度器测试

11、客户端测试读写分离

(1)在主从服务器上都打开通用日志

第一次查询

结论:读实现轮询

插入数据

结论:读写分离

mysql之主主复制实验

实验思路:第二台服务器不再作为从,而是两台都是作为主数据库

实验条件:

mysql1——主服务器1——20.0.0.13——从服务器2

mysql2——主服务器2——20.0.0.23——从服务器1

实验步骤:

1、两台主服务器均安装mysql服务

2、主服务器1mysql1

(1)修改配置文件 vim /etc/my.cnf

(2)赋予从数据库所有权限

3、从服务器1mysql2

(1)修改配置文件vim /etc/my.cnf

(2)绑定同步主服务器1数据库

4、配置主服务器2mysql2

5、配置从服务器2mysql1

绑定同步主服务器2的数据库

6、测试主从同步复制

(1)测试第一台服务器

查看从服务器是否同步数据

(2)测试第二台服务器

查看从服务器是否同步数据

结论:mysql实现完全同步。主服务器的更新同步到从服务器,从服务器的更新也能同步到主服务器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络运维Day15

文章目录 Prometheus简介环境准备配置模板机环境部署阿里镜像源实验环境准备 部署prometheus服务查看及测试 Promethues 被监控端Grafana简介部署 Grafana 服务器修改数据源 监控数据库安装部署Mariadb安装导出器修改 Prometheus服务端配置Grafana配置 总结 Prometheus简介 Pr…

需要买哪些网络设备才能过等保?求解!

随着等保2.0的落地执行,越来越多的企业需要过等保。但不少企业都是第一次过等保,对于等保政策不是很了解,有小伙伴问,需要买哪些网络设备才能过等保?这里我们小编就给大家来简单回答一下,仅供参考哈&#x…

Q learning

Q learning Q Learning是强化学习算法中的一个经典算法。在一个决策过程中,我们不知道完整的计算模型,所以需要我们去不停的尝试。 算法流程 整体流程如下: Q-table 初始化 第一步是创建 Q-table,作为跟踪每个状态下的每个动作…

电商平台api接口对接电商数据平台,获取商品详情页面实时信息须知

随着互联网的发展和普及,电商平台已成为人们日常生活中不可或缺的一部分。而为了保证电商平台的正常运行,平台与开发者之间需要进行数据交互,这便涉及到了电商平台API接口对接的问题。本文将详细介绍电商平台API接口对接的须知事项。 一、了解…

双算法SSL证书

国际算法的优势与挑战 1. RSA算法 RSA算法是一种基于大素数分解的非对称加密算法,长期以来一直是SSL证书的主流选择之一。然而,随着计算能力的提高,RSA算法的密钥长度需要不断增加,以维持足够的安全性。 2. ECC算法 椭圆曲线密…

迅软DSE答疑专业解析:内网遭受攻击的威胁到底有多大

当今数字化时代,企业数据安全已演变为企业生存和发展的至关重要因素。随着信息技术的迅猛发展,企业内网不仅是承载核心数据和信息的关键平台,也成为黑客和恶意软件攻击的主要目标。因此,确保企业数据安全和内网安全已成为企业管理…

ADC内部电源监控

文章目录 前言一、分析芯片手册1、43.5 ADC internal supply monitoring2、11.1.1.1 Chip Control register (CHIPCTL)1)SIM_CHIPCTL[ADC_SUPPLY]2)SIM_CHIPCTL[ADC_SUPPLYEN] 3、44.4.2 ADC Status and Control Register 1 (SC1A - aSC1P) 二、EB配置1、…

@CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思

@CacheInvalidate 注解是 JetCache 框架提供的注解,它是由阿里巴巴开源的组织 Alibaba Group 开发和维护的。JetCache 是一款基于注解的缓存框架,提供了丰富的缓存功能和灵活的配置选项,可用于增强应用程序的性能和可扩展性。JetCache 支持多种缓存后端,包括内存缓存、Redi…

Ubuntu22.04源码安装ROS-noetic(ROS1非ROS2),编译运行VINS-MONO

1. Ubuntu22.04源码编译安装ROS-noetic 由于22.04默认安装ROS2,但很多仓库都是基于ROS1的,不想重装系统,参考这两个博客安装了ROS-noetic: 博客1. https://blog.csdn.net/Drknown/article/details/128701624博客2. https://zhua…

(七)Spring源码解析:Spring事务

对于事务来说,是我们平时在基于业务逻辑编码过程中不可或缺的一部分,它对于保证业务及数据逻辑原子性立下了汗马功劳。那么,我们基于Spring的声明式事务,可以方便我们对事务逻辑代码进行编写,那么在开篇的第一部分&…

CRM系统对科技企业有哪些帮助

随着国家政策的倾斜和5G等相关基础技术的发展,中国人工智能产业在各方的共同推动下进入爆发式增长阶段,市场发展潜力巨大。CRM客户管理系统作为当下最热门的企业应用,同样市场前景广阔。那么,CRM系统对科技企业有哪些帮助&#xf…

Python开源项目VQFR——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

Python Anaconda 的安装等请参阅: Python开源项目CodeFormer——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 VQFR也是 腾讯 LAB 的作品&…

ninja 编译介绍

首先献上官方链接 https://ninja-build.org/manual.html Ninja 何以存在? 从官方文档看出,编译很快!怎么实现的呢??所以,还是值得了解一下的,继续~ 编译优势 项目中使用 具体语法,…

Find My滑雪板|苹果Find My技术与滑雪板结合,智能防丢,全球定位

滑雪板运动是一项越来越受年轻人青睐的运动,随着年轻人的消费能力不断提高,滑雪板市场也会得到更多的机会和发展空间。滑雪板市场规模是一个不断增长的市场,目前市场规模已经相当大。根据统计数据显示,全球滑雪板市场规模约为26亿…

多语言外贸跨境商城源码/支持多商家入驻/一键采集铺货/后台下单等

随着全球化的不断深入,多语言外贸跨境商城已成为全球贸易的新趋势。我们致力于打造一个支持多商家入驻、一键采集铺货、后台下单等多项功能的电商平台,帮助您轻松开启全球贸易之旅。 一、多语言支持,让您的事业走向世界 我们提供多语言支持&a…

map与set使用方法总结

一,map与set简介 map与set本质上便是一个关联容器,它们的底层都是一个叫做红黑树的数据结构。当然,所谓的红黑树又是一个二叉搜索树。所以追根溯源,map和set都是用二叉搜索树(红黑树)实现的容器。 在C中&am…

【工程部署】在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)

硬件平台: 1、firefly安装Ubuntu系统的RK3588; 2、安装Windows系统的电脑一台,其上安装Ubuntu18.04系统虚拟机。 参考手册:《00-Rockchip_RKNPU_User_Guide_RKNN_API_V1.3.0_CN》 《RKNN Toolkit Lite2 用户使用指南》 1、文…

【kafka】windows安装启动

1.zookeeper的安装与启动 快速打开window powershell: windowx,选 2.kafka下载 —注意kafka和zookeeper需要版本匹配 安装路径 注意,kafka安装目录不能有空格。文件下载到: D:\Program_Files\kafka_2.12-3.6.0新建logs文件 修改c…

语聚AI助力微信客服系统与企业知识库的API连接,提升电商平台用户运营效果

建立连接:语聚AI与微信客服系统的API集成 在现代电商运营中,智能客服系统已经成为一种必备的工具。而在这方面,微信客服系统因其广泛的用户基础和便捷的操作方式,成为了业界广泛采用的工具。但是,为了更好地满足用户需…

算法笔记——递归(1)

这里写目录标题 递归的思想序列求最大值翻转字符串斐波那契数列数塔回文字符串上楼汉诺塔棋盘覆盖问题数字螺旋矩阵盒分形 递归的思想 子问题须与原始问题为同样的事,且更为简单。 不能无限制地调用本身,须有个出口,化简为非递归状况处理 序…