MySQL数据库——主从复制优化及读写分离

news2024/9/22 3:45:17

目录

  • 主从复制优化
    • 主服务器配置优化
    • redo log(事务日志)的刷盘策略
    • 从服务器配置优化
  • 搭建MySQL读写分离

主从复制优化

主服务器配置优化

vim /etc/my.cnf

expire_logs_days=7		#设置二进制日志文件过期时间,默认值为0,表示logs不过期
max_binlog_size=500M    #设置二进制日志限制大小,如果超出给定值,日志就会发生滚动,默认值是1GB
skip_slave_start=1		#阻止从库崩溃后自动启动复制,崩溃后再自动复制可能会导致数据不一致的


#"双1设置",数据写入最安全
innodb_flush_logs_at_trx_commit=1		#redo log(事务日志)的刷盘策略,每次事务提交时MySQL都会把事务
                                         日志缓存区的数据写入日志文件中,并且刷新到磁盘中,该模式为系统默认
sync_binlog=1							#在进行每1次事务提交(写入二进制日志)以后,Mysql将执行一次fsync的磁盘同步指令,将缓冲区数据刷新到磁盘
---------------------------------------------------------------
#"双1设置"适合数据安全性要求非常高,而且磁盘IO写能力足够支持的业务,比如订单、交易、充值、支付消费系统。
"双1模式"下,当磁盘IO无法满足业务需求时,比如11.11活动的压力。推荐一下性能较快的设置,并使用带蓄电池后
备电源,防止系统断电异常。
innodb_flush_logs_at_trx_commit=2		#每次事务提交时MySQL都会把日志缓存区的数据写入日志文件中,但是并
                                          不会同时刷新到磁盘上。该模式下,MySQL会每秒执行一次刷新磁盘操作
sync_binlog=500							#在进行500次事务提交以后,Mysql将执行一次fsync的磁盘同步指令,将缓冲区
                                          数据刷新到磁盘
---------------------------------------------------------------

redo log(事务日志)的刷盘策略

innodb_flush_logs_at_trx_commit=0/1/2 分别代表

  • 0:每秒一次,把log buffer写入os buffer,并调用fsync刷到磁盘

  • 1:每次提交事务时,把log buffer写入os buffer,并调用fsync刷到磁盘

  • 2:每次提交事务时,只是写入到os buffer,然后每秒一次调用fsync将日志刷新到磁盘
    在这里插入图片描述

从服务器配置优化

vim /etc/my.cnf

innodb_buffer_pool_size=2048M   	#用于缓存数据和索引的内存大小,让更多数据读写内存中完成,减少磁盘
                                     操作,可设置为服务器总可用内存的 70-80%
                                     
sync_binlog=0						#MySQL不做任何强制性的磁盘刷新指令,而是依赖操作系统来刷新数据到磁盘

innodb_flush_log_at_trx_commit=2	#每次事务log buffer会写入log file,但一秒一次刷新到磁盘

log-slave-updates=0					#slave 从 master 复制的数据会写入二进制日志文件里,从库做为其他从库
                                     的主库时设置为 1
                                     
relay_log_recovery=1				#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有
                                     处理,则自动放弃所有未执行的 relay-log, 并且重新从 master 上获取日志,
                                     这样就保证了 relay-log 的完整性。默认情况下该功能是关闭的,将 
                                     relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。

搭建MySQL读写分离

  1. Amoeba服务器配置
##安装 Java 环境##
因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64
./jdk-6u14-linux-x64.bin
//按yes,按enter

mv jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile
java -version

##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop说明安装成功

##配置 Amoeba读写分离,两个 Slave 读负载均衡##
#先在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问
grant all on *.* to test@'192.168.80.%' identified by '123.com';

#再回到amoeba服务器配置amoeba服务:
cd /usr/local/amoeba/conf/

cp amoeba.xml amoeba.xml.bak
vim amoeba.xml									#修改amoeba配置文件
--30行--
<property name="user">amoeba</property>
--32行-- 
<property name="password">123456</property>
--115行--
<property name="defaultPool">master</property>
--117-去掉注释-
<property name="writePool">master</property>
<property name="readPool">slaves</property>

cp dbServers.xml dbServers.xml.bak
vim dbServers.xml								#修改数据库配置文件
--23行--注释掉  作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- <property name="schema">test</property> -->
--26--修改
<property name="user">test</property>
--28-30--去掉注释
<property name="password">123.com</property>
--45--修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">
--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.80.10</property>
--52--修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">
--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.80.11</property>
--58--复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.80.12</property>
--65行--修改
<dbServer name="slaves" virtual="true">
--71行--修改
<property name="poolNames">slave1,slave2</property>


/usr/local/amoeba/bin/amoeba start&					#启动Amoeba软件,按ctrl+c 返回
netstat -anpt | grep java							#查看8066端口是否开启,默认端口为TCP 8066

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Vue2生命周期

Vue2生命周期 1、概念2、生命周期过程2.1 流程图示2.2 三阶段 3、钩子函数详解3.1 beforeCreate() 创建前3.2 created()创建后3.3 beforeMount() 挂载前3.4 mounted()挂载完成3.5 beforeUpdate() 更新前3.6 updated() 更新后3.7 beforeDestroy() 销毁前3.8 destroyed() 销毁完成…

在群晖上安装运行Airflow

本文是应网友 &#xff1a; 要求折腾的&#xff1b; 什么是 Airflow &#xff1f; Apache Airflow 是一个开源平台&#xff0c;用于开发、调度和监控面向批处理的工作流。Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。Web 界面有助于管理工作流程的状…

RabbitMQ灵活运用,怎么理解五种消息模型

RabbitMQ灵活运用&#xff0c;怎么理解五种消息模型 简介一、AMQP协议二、交换机类型与默认交换机1. 交换机的四种类型2. 默认交换机 三、五种模式速览1. 一对一简单模式2. work模式&#xff08;轮询&#xff09;3. 发布/订阅模式4. 路由模式&#xff08;自称direct模式&#x…

Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能

一.背景 由于最近的项目需要开启无障碍功能然后实现对应的功能需求,但是由于需求是需要安装后就开启辅助功能,不要在繁琐的在设置中开启辅助功能,所以需要如何在应用中开启辅助功能。 二.前提条件 将普通应用转换成系统应用,然后将系统的framework.jar包放到应用中并且可以…

vscode配置task.json和launch.json启动调试

首先说一下参考博文&#xff1a; 文章标题“VScode 调试教程 tasks.json和launch.json的设置&#xff08;超详细&#xff09;” 地址&#xff1a;https://blog.csdn.net/qq_59084325/article/details/125662393 官方文档太官方&#xff0c;其他人的文档也看过&#xff0c;单独…

微信小程序浏览docx,pdf等文件在线预览使用wx.openDocument

wx.downloadFile({ url: fileUrl,//pdf链接success(res) {wx.openDocument({ //打开文档filePath: res.tempFilePath,fileType: "pdf",//文档类型showMenu: true,success: function (res) {wx.showToast({title: 打开文档成功,})},fail: function (res) {wx.showToas…

Stable Diffusion使用“面部修复”时报TypeError: ‘NoneType‘ object is not subscriptable错

问题 Stable Diffusion使用“面部修复”时报TypeError: ‘NoneType’ object is not subscriptable错 解决方案 下载【detection_Resnet50_Final.pth】和【parsing_parsenet.pth】到【repositories\CodeFormer\weights\facelib】目录下&#xff0c;并重新运行项目即可。 ht…

Unity 基础之 URP 项目创建\项目转URP Pipline

Unity 基础之 URP 项目创建\项目转URP Pipline 目录 Unity 基础之 URP 项目创建\项目转URP Pipline 一、简单介绍 二、创建 URP 项目 三、工程项目转 URP 一、简单介绍 Unity中的一些基础知识点&#xff0c;方便日后查阅。 Unity游戏开发中&#xff0c;这里简单介绍如何创…

Methodot低代码开发教程——玩转表格增删改查分页

目录 1、背景介绍 2、连接数据源 2.1 新增数据源 2.2 填写数据源信息 3、表格数据的展示 3.1 新增查询&#xff0c;编写查询语句 3.2 使用表格组件 3.3 同步数据源与表格列名 4、表格的数据新增 4.1 新增查询&#xff0c;编写新增语句 4.2 表格配置新增一行&#xff0…

华为云专家出品《从零到一•Python图像处理入门》电子书

《华为云云享.书库》系列电子书来啦&#xff01; 本系列电子书旨在帮助开发者成长&#xff0c;汇聚华为云内外部专家技术精华制作而成。 本书《从零到一•Python图像处理》是该系列电子书第3部。 我们在华为开发者即将到来之际&#xff0c;开放电子书免费下载。 点击下方链接…

JVM探究

JVM探究 请谈谈你对JVM的理解&#xff1f;java8虚拟机和之前的变化、更新&#xff1f;什么是OOM&#xff0c;栈溢出StackOverFlowError&#xff1f;怎么分析&#xff1f;JVM的常用调优参数有哪些&#xff1f;内存快照如何 抓取&#xff0c;怎么分析Dump文件&#xff1f;知道吗…

Unity VR开发教程 OpenXR+XR Interaction Toolkit(八)手指触控 Poke Interaction

文章目录 &#x1f4d5;教程说明&#x1f4d5;XR Poke Interactor&#x1f4d5;与 UI 进行触控交互⭐添加 Tracked Device Graphic Raycaster 和 XR UI Input Module 让 UI 可被交互 &#x1f4d5;与物体进行交互⭐XR Simple Interactable⭐XR Poke Filter 往期回顾&#xff1a…

【Linux进程】进程的基本概念 {PCB结构体,进程表,Linux中的task_struct,查看进程,获取进程PID,使用fork创建子进程}

一、进程的基本概念 1.1 什么是进程&#xff1f; 进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。每个进程都有自己的内存空间、代码、数据和执行状态。进程可以独立运行&#xff0c;相互之间不会干扰。操作系统可以同时运行多个进程&#…

vue表格实现一个简单的合并单元格功能

用的是vue2ant-design-vue 但是vue3或者element-ui也是同理 先上效果 需要后端的数据将相同id的放在一起 否则也会有问题 例如&#xff1a; this.list [{id: 1,name: 舟山接收站,...}{id: 2,name: 舟山接收站碳中和LNG,...},{id: 2,name: 舟山接收站碳中和LNG,...} ]// th…

Redis7【⑤ Redis 发布 订阅】

Redis发布和订阅 本章了解即可&#xff0c;命令可以不用敲。 Redis 发布和订阅&#xff08;Publish/Subscribe&#xff0c;简称 Pub/Sub&#xff09;是一种消息传递模式&#xff0c;用于在 Redis 中实现消息的发布和订阅。 在 Redis 中&#xff0c;发布者&#xff08;Publi…

maven打包所有依赖,对外提供sdk.jar

maven打包所有依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compile.source>1.8</maven.compile.source><maven.compile.target>1.8</maven.compile.target></properties><…

Swin Transformer训练报错问题

1. 训练遇到报错问题 &#xff08;1&#xff09;mportError: cannot import name _pil_interp from timm.data.transforms 原因&#xff1a; timm.data.transforms里面没有_pil_interp&#xff0c;只有str_to_pil_interp、_str_to_pil_interpolation、_pil_interpolation_to_s…

rancher 节点重启无感发布

这里设置 时间 为120s &#xff0c;保证 新节点起来后&#xff0c;和 老节点并行2分钟后再剔除&#xff0c;老节点

el-select修改样式

目录 准备 修改placeholder颜色 修改右侧箭头 修改圆角边框 准备 <el-select v-model"goodsId" clearable placeholder"请选择" :popper-append-to-body"false"><el-option v-for"item in kindList" :key"item.value…

浙江宇视科技 网络视频录像机 ISC LogReport.php 远程命令执行漏洞

免责声明 文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得危害网络安全&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机…