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

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...