Mysql使用中的性能优化——搭建Mysql的监测服务

大纲

  • 环境
    • 安装配置Mysql
      • 安装
      • 设置root密码
      • 新增远程访问账户
        • 修改绑定地址
        • 重启
      • 新增 MySQL Server Exporter 用户
    • 安装启动mysqld_exporter
    • 安装
    • 启动
      • 新增配置
      • 启动
        • 直接启动
        • 以Service形式启动
  • 安装启动Prometheus
    • 创建用户
    • 下载并解压
    • 修改配置
    • 启动
  • 安装启动grafana
    • 安装
    • 启动
  • 测试
  • 参考资料

抛开场景和数据,谈论性能优化,就是纸上谈兵。这个系列我们将通过相关数据来展现常见的Mysql优化前后的性能差距。这样会给大家有个直观的认识。

环境

我是在Windows电脑上,使用Hyper-V构建了一台干净的虚拟机。并给该机器分配了2核4G。
在这里插入图片描述
操作系统是Ubuntu Server 24.04 LTS

cat /proc/version

Linux version 6.8.0-35-generic (buildd@lcy02-amd64-020) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #35-Ubuntu SMP PREEMPT_DYNAMIC Mon May 20 15:51:52 UTC 2024

安装配置Mysql

安装

sudo apt install mysql-server
mysql --version

mysql Ver 8.0.36-2ubuntu3 for Linux on x86_64 ((Ubuntu))

设置root密码

sudo mysql

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.36-2ubuntu3 (Ubuntu)
Copyright © 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

use mysql;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

ALTER USER 'root'@'localhost' IDENTIFIED BY '';
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;

将root用户的plugin从auth_socket改成mysql_native_password,并且设置密码为空,是为了让之后mysqld_exporter在build的过程中自检通过。

新增远程访问账户

这个账户主要是给Mysql client端使用。我们希望在其他机器上向这台机器发送请求以操作数据库,从而降低对Mysql所在机器的影响。

use mysql;
create user 'remoteuser' identified by 'fangliang';
ALTER USER 'remoteuser'@'%' IDENTIFIED BY 'fangliang';
修改绑定地址
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

修改

bind-address = 127.0.0.1

成为

bind-address = 0.0.0.0

重启
service mysql restart

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to restart ‘mysql.service’.
Authenticating as: fangliang
Password:
==== AUTHENTICATION COMPLETE ====

新增 MySQL Server Exporter 用户

该用户是用于mysqld_exporter采集信息,因为它安装在Mysql所在机器,所以只用配置本地访问即可。

sudo mysql -u root -p
use mysql;
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'fangliang' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

安装启动mysqld_exporter

安装

git clone https://github.com/prometheus/mysqld_exporter.git
cd mysqld_exporter
sudo apt install make
sudo apt install golang
make

启动

新增配置

cp test_exporter.cnf exporter.cnf
vim exporter.cnf

将原来内容

[client]
host=localhost
port=3306
socket=/var/run/mysqld/mysqld.sock
user=foo
password=bar
[client.server1]
user = bar
password = bar123

修改成

[client]
host=localhost
port=3306
socket=/var/run/mysqld/mysqld.sock
user=exporter
password=fangliang

启动

选择以下两种形式中任何一个都可以

直接启动
./mysqld_exporter --config.my-cnf=exporter.cnf

ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:240 level=info msg=“Starting mysqld_exporter” version=“(version=0.15.1, branch=main, revision=dd8afce2a46663a5112e53469f53ca56d50a63e2)”
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:241 level=info msg=“Build context” build_context=“(go=go1.22.2, platform=linux/amd64, user=fangliang@fangliang, date=20240605-15:21:01, tags=unknown)”
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:253 level=info msg=“Scraper enabled” scraper=global_status
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:253 level=info msg=“Scraper enabled” scraper=global_variables
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:253 level=info msg=“Scraper enabled” scraper=slave_status
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:253 level=info msg=“Scraper enabled” scraper=info_schema.innodb_cmpmem
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:253 level=info msg=“Scraper enabled” scraper=info_schema.query_response_time
ts=2024-06-05T15:27:38.605Z caller=mysqld_exporter.go:253 level=info msg=“Scraper enabled” scraper=info_schema.innodb_cmp
ts=2024-06-05T15:27:38.605Z caller=tls_config.go:313 level=info msg=“Listening on” address=[::]:9104
ts=2024-06-05T15:27:38.605Z caller=tls_config.go:316 level=info msg=“TLS is disabled.” http2=false address=[::]:9104

以Service形式启动
cd /etc/systemd/system
sudo vim mysqld_exporter.service 

填入以下内容,并保存。

[Unit]
Description=Mysqld Exporter Service[Service]
ExecStart=/home/fangliang/mysqld_exporter/mysqld_exporter --config.my-cnf=/home/fangliang/mysqld_exporter/exporter.cnf
Restart=always[Install]
WantedBy=multi-user.target

然后启动该服务

sudo systemctl enable mysqld_exporter.service 
sudo systemctl start mysqld_exporter.service 

安装启动Prometheus

我们新开一台机器,同样给2核4G配置,更更新好系统和apt库。

创建用户

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

下载并解压

wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz
tar xvf prometheus-2.52.0.linux-amd64.tar.gz

修改配置

cd prometheus-2.52.0.linux-amd64
vim prometheus.yml

新增如下内容

- job_name: 'mysqld_exporter'static_configs:- targets: ['172.23.142.99:9104']labels:app: mysqld_exporternode: node_exporterrole: mysqld_exporter

启动

mkdir tsdb 
./prometheus --config.file ./prometheus.yml --storage.tsdb.path=./tsdb --web.listen-address="0.0.0.0:9090"  

安装启动grafana

安装

cd ~
sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_11.0.0_amd64.deb
sudo dpkg -i grafana-enterprise_11.0.0_amd64.deb

启动

sudo /bin/systemctl start grafana-server

测试

登录http://172.23.131.19:3000/login,使用用户名和密码都是admin登录grafana。
在这里插入图片描述
数据源选择Prometheus,地址填入刚启动的Promethous服务地址。
在这里插入图片描述
保存后,新建看板
在这里插入图片描述
填入https://grafana.com/grafana/dashboards/14057-mysql/
在这里插入图片描述
在这里插入图片描述
最后我们看到图标的展现了。
在这里插入图片描述

参考资料

  • https://github.com/prometheus/mysqld_exporter
  • https://www.cherryservers.com/blog/install-prometheus-ubuntu
  • https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1
  • https://www.cnblogs.com/wangyongqiang/p/15823372.html

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

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

相关文章

[数据集][图像分类]黑色素瘤分类数据集10015张7类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):10015 分类类别数:7 类别名称:[“0”,“1”,“2”,“3”,“4”,…

【博士每天一篇文献-综述】Modularity in Deep Learning A Survey

阅读时间:2023-12-8 1 介绍 年份:2023 作者:孙浩哲,布朗克斯医疗卫生系统 会议: Science and Information Conference 引用量:4 论文主要探讨了深度学习中的模块化(modularity)概念…

软件测试--Mysql快速入门

文章目录 软件测试-mysql快速入门sql主要划分mysql常用的数据类型sql基本操作常用字段的约束:连接查询mysql内置函数存储过程视图事务索引 软件测试-mysql快速入门 sql主要划分 sql语言主要分为: DQL:数据查询语言,用于对数据进…

传感器展会|2024厦门传感器与应用技术展览会

传感器展会|2024厦门传感器与应用技术展览会 时间:2024年11月1-3日 地点:厦门国际会展中心 XISE EXPO展会介绍: 2024中国(厦门)国际传感器与应用技术展览会将于2024年11月1-3日在厦门国际会展中心举行&#xf…

2024浙江省三支一扶报名流程!超详细图解!

2024浙江省三支一扶报名流程!超详细图解! 浙江省高校毕业生“三支一扶”报名即将开始,准备报考的同学们做好准备: 🔴重点时间安排: 1、网络报名:6月11日9:00至6月18日17:00 2、资格审核&…

Selenium with Python Behave(BDD)

一、简介 Python语言的行为驱动开发,Behavior-driven development,简称BDD. "Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or bu…

maven多模块项目搭建

文章目录 创建方式创建父项目创建子模块 目录结构示例父模块模块A模块B(并在模块B中引入模块A) 注意事项 创建方式 创建父项目 #创建文件夹后,进入目录,执行以下命令 PS D:\demo> mvn archetype:generate #将输出很多模板&am…

5 个你不知道的隐藏 CSS 属性

层叠样式表 (CSS) 是网页设计的骨架,它可以帮助我们轻松的设置网页的样式和格式。虽然大多数的 CSS 属性,例如颜色、字体大小和边距都被大家熟知,但还有许多鲜为人知的属性可以帮助我们设计添加功能。在这篇文章中,我们将介绍 5 个…

Hive 面试题(九)

1. 简述Hive的开窗函数有哪些 ? Hive的开窗函数(Window Functions)是一种特殊的函数,它在某种程度上类似于聚合函数,但是它们为每一行返回一个值,而不是将多行合并为一个单一的聚合输出。开窗函数在处理数…

英语国际音标 - DJ 音标 - KK 音标

英语国际音标 - DJ 音标 - KK 音标 1. 国际音标 (International Phonetic Alphabet,IPA)1.1. 记音类型1.2. 48 个国际音标发音表1.2.1. 元音 (vowel)1.2.1.1. 单元音 (monophthong)1.2.1.2. 双元音 (diphthong) 1.2.2. 辅音 (consonant)1.2.2.1. 清音 (voiceless so…

深入探讨跨域请求(CORS):原理、解决方案与详细示例代码

深入探讨跨域请求(CORS):原理、解决方案与详细示例代码 🌐 深入探讨跨域请求(CORS):原理、解决方案与详细示例代码 🌐摘要引言正文内容什么是跨域?为什么会有跨域问题&am…

Word表格里的文字如何上下、水平都居中

全选表格 表格工具——布局 在对齐方式那里

Adobe Premiere Pro 2024下载安装(视频剪辑软件Pr2024)

百度网盘下载地址(含PR教学课程(PR从入门到精通108节课程))https://pan.baidu.com/s/1WKYZENoMzTcKhbgMgbEPGQ?pwdSIMS 一、Pr简介 Pr全称Premiere,是Adobe公司开发的一款功能强大的视频剪辑软件,目前被…

LLVM 后端执行流程

异构计算程序工作流程 图4-1中的LLVM后端的主要功能是代码生成,其中包括若干指令生成分析转换pass,将LLVM IR 转换为特定目标架构的机器代码 LLVM 流水线结构 输入指令经过图4-2中的各个阶段,从最初的LLVM IR,逐步演化为Selectio…

前端 CSS 经典:CSS 原子化

前言:前端有很多种 CSS 的解决方案,其中有 CSS Modules、BEM、CSS In Js、CSS 原子化。这章先理解下 CSS 原子化。 1. 什么是 CSS 原子化 提供一系列的助记词,用类名来代表样式。相当于用一两行定义一个类名,不能再分解了。这就…

国内12寸先进封装厂家的一些情况

一、12寸先进封装厂家 在中国大陆,专注于12英寸(300mm)晶圆的先进封装技术的企业包括但不限于以下几家: 1. 长电科技(JCET Technologies Co., Ltd.):长电科技是中国领先的半导体封装测试企业之…

设计一个简单的实验来研究对抗训练对模型隐私性的影响

当然可以。我们可以设计一个简单的实验来研究对抗训练对模型隐私性的影响。以下是一个基本实验方案: 实验目的 研究对抗训练如何影响机器学习模型在会员推断攻击(Membership Inference Attack)下的隐私性。 实验步骤 数据集选择 选择一个公…

实验3-单链表(优化版/王道版)

单链表结构体 typedef int ElemType; typedef struct LNode{ElemType data;struct LNode *next; }LNode,* LinkList; 单链表的初始化 void InitList(LinkList &L) {Lnew LNode;L->nextNULL; } 打印单链表 void visit(LinkList L) {LL->next;while(L){cout<&l…

【Java02】Java中数组的定义与初始化

Java中的数组&#xff08;1&#xff09; 1. 理解Java中的数组 Java中的数组是一种数据类型&#xff0c;具体来说&#xff0c;是一种引用类型。 例如int是基本类型&#xff0c;int[]是引用类型。 创建int[]类型的对象&#xff08;实例&#xff09;&#xff0c;实际上就是创建…

【Python】使用pip安装seaborn sns及失败解决方法与sns.load_dataset(“tips“)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…