当前位置: 首页 > news >正文

mysql原理、部署mysql主从+读写分离、监控mysql主从脚本

mysql:工作原理

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致

mysql主从复制用途

实时灾备,用于故障切换

读写分离,提供查询服务

备份,避免影响业务

主从部署必要条件:

主库开启binlog日志(设置log-bin参数)

主从server-id不同

从库服务器能连通主库

Mysql支持的复制类型:

1、 基于语句的复制:在主服务器上执行的sql语句,在从服务器上会执行同样的语句。Mysql默认采用基于语句的复制,效率比较高,但是有时不能实现精准复制。

2、 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

3、 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的复制不能精准复制时,就会采用基于行的复制。

部署mysql主从:

两台centos7
首先关闭防火墙、关闭 seliunx

systemctl stop firewalld
senetforce 0

yum 安装mariadb

yum -y install mariadb mariadb-server

[root@kafka02 ~]# vim /etc/my.cnf #主配置文件配置二进制文件

server-id=1    #主的ID
log-bin=mysql-bin           # 二进制的配置
binlog-ignore-db=information_schema              
binlog-ignore-db=performance_schema              #这三个库不需要同步过去,不然密码该成一样的了
binlog-ignore-db=mysql

重启mysql

systemctl  restart mariadb

进入mariadb

mysql

创建远程用户

MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
Query OK, 0 rows affected (0.01 sec)

刷新数据库

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

查询二进制位置和文件
MariaDB [(none)]> show master status;
±-----------------±---------±-------------±--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
±-----------------±---------±-------------±--------------------------------------------+
| mysql-bin.000005 | 444 | | information_schema,performance_schema,mysql |
±-----------------±---------±-------------±--------------------------------------------+
1 row in set (0.00 sec)

退出数据库

exit

配置从数据库

yum -y install mariadb mariadb-server

[root@kafka02 ~]# vim /etc/my.cnf #从配置文件配置中继日志文件

server-id=2     # 从的ID 一定要不能和主的ID重复
relay-log=relay-log     #中继日志配置

重启mysql

systemctl  restart mariadb

进入mariadb

mysql

连接主数据库

MariaDB [(none)]> change master to  \
master_host='192.168.253.231' \                #主数据库的ip
master_user='tom' \                                     #主数据库新建的远程用户
master_password='123' \                             # 用户的密码
master_log_file='mysql-bin.000003' \           #二进制文件
master_log_pos=444;                                   #文件的位置   (记住位置不用加上引号)开启从slave start;

查询是否同步

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.253.231
Master_User: tom
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 444
Relay_Log_File: relay-log.000011
Relay_Log_Pos: 728
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: YesIO和SQL为双Yes  说明同步成功

部署读写分离(amoeba )

安装jdk
rpm -ivh jdk-8u20-linux-x64.rpm #安装jdk
vi /etc/profile #配置jdk环境变量

export  JAVA_HOME=/usr/java/jdk1.8.0_20/
export  CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export  PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export  AMOEBA_HOME=/usr/local/amoeba
export  PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile #重读一遍才能生效
java –version #查询jdk版本

安装amoeba

mkdir /usr/local/amoeba
tar zxf 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安装成功。

配置amoeba读写分离

在master、slave1、slave2、、、、中开放权限给amoeba访问:

mysql> grant all on *.* to  test@'172.18.49.%' identified by '123';

修改amoeba的配置文件:

cp amoeba.xml amoeba.xml.bak
vim /usr/local/amoeba/conf/amoeba.xml

修改连接amoeba代理服务器的有用户名和密码。
在这里插入图片描述
修改默认的地址池名字,写和读的名字:注意:删掉注释符。
在这里插入图片描述
对应主机名

编辑修改dbservers.xml配置文件(对后端mysql服务器的配置)。

cp dbServers.xml dbServers.xml.bak   #备份
vi dbServers.xml

在这里插入图片描述
#填写新建的远程用户
指定主从数据库地址:
都是对应得主机名
vi dbServers.xml
在这里插入图片描述

在这里插入图片描述
之后启动amoeba:

/usr/local/amoeba/bin/amoeba start&
netstat -anpt  | grep :8066

登陆amoeba 验证是否代理成功:
在这里插入图片描述

部署监控mysql状态脚本
首先要切割出来双Yes和延时时间不能超过120,然后在判断。

 yum -y install mailx 
vim check_mysql_status.sh
#!/bin/bash
check(){                         #定义一个函数
arr=(`mysql -e "show slave status\G"|egrep "Running|Behind"|awk -F ':' '{print $2}'`)          #定义数组,把双Yes和延时时间放到数组里面。
#echo ${arr[@]}     if [ ${arr[0]} == "Yes" -a ${arr[1]} == "Yes" -a ${arr[2]} != "NULL" ]; then                        # 判断 echo "mysql status is ok"                                  #  没有断开 就okelsemail -s "mysql status" xxxxxxxxxx@qq.com </tmp/result.txt           #若是断开就发邮件告警 可以发 qq163  邮件 echo "mysql is not ok! 正在发送邮件..."fi
}while true        #循环
do
check
sleep 5          # 五秒发一次邮件
done给脚本附件权限
chmod  +x  check_mysql_status.shmysql正常    执行脚本
#!/bin/bash
check(){                         #定义一个函数
arr=(`mysql -e "show slave status\G"|egrep "Running|Behind"|awk -F ':' '{print $2}'`)          #定义数组,把双Yes和延时时间放到数组里面。
#echo ${arr[@]}     if [ ${arr[0]} == "Yes" -a ${arr[1]} == "Yes" -a ${arr[2]} != "NULL" ]; then                        # 判断 echo "mysql status is ok"                                  #  没有断开 就okelsemail -s "mysql status" xxxxxxxxxx@qq.com </tmp/result.txt           #若是断开就发邮件告警 可以发 qq163  邮件 echo "mysql is not ok! 正在发送邮件..."fi
}while true        #循环
do
check
sleep 5          # 五秒发一次邮件
done给脚本附件权限
chmod  +x  check_mysql_status.sh
mysql正常    执行脚本
./ check_mysql_status.sh
mysql status is ok
mysql主从断开    执行脚本./ check_mysql_status.sh mysql is not ok! 正在发送邮件...

粉丝福利
在这里插入图片描述

相关文章:

mysql原理、部署mysql主从+读写分离、监控mysql主从脚本

mysql&#xff1a;工作原理 从库生成两个线程&#xff0c;一个I/O线程&#xff0c;一个SQL线程&#xff1b; i/o线程去请求主库 的binlog&#xff0c;并将得到的binlog日志写到relay log&#xff08;中继日志&#xff09; 文件中&#xff1b; 主库会生成一个 log dump 线程&…...

模型选择拟合

1.通过多项式拟合交互探索概念 import math import numpy as np import torch from torch import nn from d2l import torch as d2l 2.使用三阶多项式来生成训练和测试数据的标签 max_degree 20 # 多项式的最大阶数 n_train, n_test 100, 100 # 训练和测试数据集大小 true…...

文案语音图片视频管理分析系统-视频矩阵

文案语音图片视频管理分析系统-视频矩阵 1.产品介绍 产品介绍方案 产品名称&#xff1a; 智驭视频矩阵深度分析系统&#xff08;SmartVMatrix&#xff09; 主要功能&#xff1a; 深度学习驱动的视频内容分析多源视频整合与智能分类高效视频检索与编辑实时视频监控与异常预警…...

ArcGIS计算落入面图层中的线的长度或面的面积

本文介绍在ArcMap软件中&#xff0c;计算落入某个指定矢量面图层中的另一个线图层的长度、面图层的面积等指标的方法。 如下图所示&#xff0c;现在有2个矢量要素集&#xff0c;其中一个为面要素&#xff0c;表示某些区域&#xff1b;另一个为线要素&#xff0c;表示道路路网。…...

ctfshow-web入门-web172

//拼接sql语句查找指定ID用户 $sql "select username,password from ctfshow_user2 where username !flag and id ".$_GET[id]." limit 1;"; 联合查询 该题目与上一个题目不是同一个类型&#xff0c;该题目需要进行sql联合查询。 第一步&#xff1a;确…...

Keep健身TV版 3.3.0 | 针对智能电视的健身塑形软件

Keep健身TV版是专为智能电视设计的功能强大的健身塑形软件。该软件根据用户的不同需求提供多种器械和阶段健身目标组合编排&#xff0c;为用户提供科学、规范、专业的实时指导。即便是在家没有健身器械的情况下&#xff0c;也能跟随教练的语音指导一步步完成训练。软件涵盖从有…...

推荐一些关于计算机网络和 TCP/IP 协议的书籍

以下是一些关于计算机网络和 TCP/IP 协议的优秀书籍推荐: 《TCP/IP 详解》: 作者为 W.Richard Stevens,这是一套经典之作,分为三卷。《TCP/IP 详解卷 1:协议》:详细解析了 TCP/IP 协议的工作原理和实现细节,对协议族中的各个层次和协议,如 IP、TCP、UDP 等进行了深入剖…...

生成式AI浪潮下的商业机遇与经济展望 —— 与互联网时代的比较

一、引言 近年来,生成式人工智能(AI)技术迅速崛起,不仅吸引了大量资本的关注,同时也催生了诸多创新商业模式。与互联网早期阶段类似,AI领域同样面临着前所未有的发展机遇。本文将探讨生成式AI与互联网时代的异同,并分析当前AI行业的经济状况及其增长潜力。 二、经济形…...

Go 标准库

本篇内容是根据2016年9月份The Go Standard Library音频录制内容的整理与翻译, BoltDB 的创建者 Ben Johnson 参加了节目&#xff0c;讨论 NoSQL 与 SQL 数据库、两者之间的权衡以及选择其中之一。我们还讨论了 Ben 的数据秘密生活项目&#xff0c;可视化数据结构&#xff0c;…...

AUTOSAR_EXP_ARAComAPI的6章笔记(5)

☞返回总目录 相关总结&#xff1a;AUTOSAR 通信组的使用方法总结 6.5 通信组的使用方法 6.5.1. 设置 本节描述了使用 Communication Group Template&#xff08;类别为 COMMUNICATION_GROUP&#xff09;定义通信组的配置步骤。定义一个通信组需要指定三个项目&#xff1a;…...

Photoshop中的混合模式公式详解

图层混合简介 图层混合&#xff08;blend&#xff09;顾名思义&#xff0c;就是把两个图层混合成一个。 最基本的混合是alpha融合&#xff08;alpha compositing&#xff09;&#xff0c;这是一个遵循光的反射与透射等&#xff08;简化版&#xff09;物理学原理的混合方式。 各…...

Vue 自定义指令 Directive 的高级使用与最佳实践

前言 Vue.js 是一个非常流行的前端框架&#xff0c;它的核心理念是通过声明式的方式来描述 UI 和数据绑定。除了模板语法和组件系统&#xff0c;Vue 还提供了一个强大的功能——自定义指令。 自定义指令可以让我们对 DOM 元素进行底层操作&#xff0c;下面让我们通过一个有趣的…...

万字图文实战:从0到1构建 UniApp + Vue3 + TypeScript 移动端跨平台开源脚手架

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f343; vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f…...

在WebStorm遇到Error: error:0308010C:digital envelope routines::unsupported报错时的解决方案

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 介绍 解决 分析 方法一&#xff1a;设置环境变量 使用WebStorm 使用其他编译器 方法二&#xff1a;使用nvm切换nodejs版本 方法三&#xff1a;更新依赖版本 介…...

数据库产品中SQL注入防护功能应该包含哪些功能

数据库产品中 SQL 注入防护功能应包含以下几方面&#xff1a; 输入验证与过滤功能&#xff1a; 数据类型和格式验证&#xff1a;检查用户输入的数据是否符合预期的数据类型&#xff0c;比如对于一个应该是整数类型的字段&#xff0c;检查输入是否为整数&#xff1b;对于字符串…...

Ribbon客户端负载均衡策略测试及其改进

文章目录 一、目的概述二、验证步骤1、源码下载2、导入IDE3、运行前修改配置4、策略说明5、修改策略 三、最终结论四、改进措施1. 思路分析2. 核心代码3. 测试页面 一、目的概述 为了验证Ribbon客户端负载均衡策略在负载节点失效的情况下&#xff0c;是否具有故障转移的功能&a…...

linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信

文章目录 Posix API和网络协议栈&#xff0c;使用TCP实现P2P通信1. socket()2. bind()3. listen()4. connect()5. accept()6. read()/write(), recv()/send()7. 内核tcp数据传输7.1 TCP流量控制7.2 TCP拥塞控制——慢启动/拥塞避免/快速恢复/快速重传 8. shutdown()9. close()9…...

低代码平台中的功能驱动开发:模块化与领域设计

在现代软件开发中&#xff0c;尤其是在低代码平台的背景下&#xff0c;清晰地定义功能和模块是成功的关键。功能驱动开发强调功能的优先性&#xff0c;模块化设计则确保系统的可维护性和可扩展性。本文将探讨如何在低代码平台中有效地将功能与模块结合起来&#xff0c;形成一个…...

HTTP和HTTPS基本概念,主要区别,应用场景

HTTP和 HTTPS是用于在网络中传输数据的协议&#xff0c;虽然它们的功能类似&#xff0c;但在安全性上存在显著差异。 1. HTTP 的基本概念 定义&#xff1a;HTTP 是一种无状态的、面向请求-响应的协议&#xff0c;用于客户端&#xff08;如浏览器&#xff09;和服务器之间传输…...

node.js使用Sequelize ORM操作数据库

一、什么是ORM ORM是在数据库和编程语言之间建立一种映射关系&#xff0c;这样可以让我们有非常简单的代码&#xff0c;来实现各种数据库的操作。 例如&#xff1a;使用mysql去查找表&#xff08;表名称为Articles&#xff09; SELECT * FROM Articles;但是我们使用ORM的话&…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...