当前位置: 首页 > 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的话&…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

如何在Spring Boot中使用注解动态切换实现

还在用冗长的if-else或switch语句管理多个服务实现? 相信不少Spring Boot开发者都遇到过这样的场景:需要根据不同条件动态选择不同的服务实现。 如果告诉你可以完全摆脱条件判断,让Spring自动选择合适的实现——只需要一个注解,你是否感兴趣? 本文将详细介绍这种优雅的…...