9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志
9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志
文章目录
- 9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志
- 1. 数据库服务器的优化步骤
- 2. 查看系统性能参数
- 3. 统计SQL的查询成本:last_query_cost
- 4. 定位执行慢的 SQL:慢查询日志
- 4.1 开启慢查询日志参数
- 4.2 查看慢查询数目
- 4.3 案例演示
- 4.4 测试及分析
- 4.5 慢查询日志分析工具:mysqldumpslow
- 4.6 关闭慢查询日志
- 4.7 删除慢查询日志
- 5. 查看 SQL 执行成本:SHOW PROFILE
- 6. 最后:
1. 数据库服务器的优化步骤
当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。
整个流程划分成了 观察(Show status)
和 行动(Action)
两个部分。字母 S 的部分代表观察(会使 用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。
2. 查看系统性能参数
在MySQL中,可以使用 SHOW STATUS
语句查询一些MySQL数据库服务器的性能参数 、 执行频率
。 SHOW STATUS语句语法如下:
SHOW [GLOBAL|SESSION] STATUS LIKE '参数';
一些常用的性能参数如下:
- Connections:连接MySQL服务器的次数。
- Uptime:MySQL服务器的上 线时间。
- Slow_queries:慢查询的次数。
- Innodb_rows_read:Select查询返回的行数
- Innodb_rows_inserted:执行INSERT操作插入的行数
- Innodb_rows_updated:执行UPDATE操作更新的 行数
- Innodb_rows_deleted:执行DELETE操作删除的行数
- Com_select:查询操作的次数。
- Com_insert:插入操作的次数。对于批量插入的 INSERT 操作,只累加一次。
- Com_update:更新操作 的次数。
- Com_delete:删除操作的次数。
举例:
mysql> show status like 'connections';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections | 21 |
+---------------+-------+
1 row in set (0.00 sec)
举例:
mysql> show status like 'uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 28235 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show status like 'slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 0 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show status like 'innodb_row_%';
+-------------------------------+---------+
| Variable_name | Value |
+-------------------------------+---------+
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 0 |
| Innodb_row_lock_time_avg | 0 |
| Innodb_row_lock_time_max | 0 |
| Innodb_row_lock_waits | 0 |
| Innodb_rows_deleted | 0 |
| Innodb_rows_inserted | 1000901 |
| Innodb_rows_read | 8001090 |
| Innodb_rows_updated | 0 |
+-------------------------------+---------+
9 rows in set (0.00 sec)
3. 统计SQL的查询成本:last_query_cost
我们依然使用第8章的 student_info 表为例:
CREATE TABLE `student_info` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`student_id` INT NOT NULL ,
`name` VARCHAR(20) DEFAULT NULL,
`course_id` INT NOT NULL ,
`class_id` INT(11) DEFAULT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
如果我们想要查询 id=900001 的记录,然后看下查询成本,我们可以直接在聚簇索引上进行查找:
mysql> SELECT student_id, class_id, NAME, create_time FROM student_info WHERE id = 900001;
+------------+----------+--------+---------------------+
| student_id | class_id | NAME | create_time |
+------------+----------+--------+---------------------+
| 46284 | 10136 | gUfQOy | 2025-02-13 12:48:08 |
+------------+----------+--------+---------------------+
1 row in set (0.00 sec)
然后再看下查询优化器的成本,实际上我们只需要检索一个页即可:
mysql> SHOW STATUS LIKE 'last_query_cost';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| Last_query_cost | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
如果我们想要查询 id 在 900001 到 9000100 之间的学生记录呢?
mysql> SELECT student_id, class_id, NAME, create_time FROM student_info WHERE id BETWEEN 900001 AND 900100;
运行结果(100 条记录,运行时间为 0.046s ):
然后再看下查询优化器的成本,这时我们大概需要进行 20 个页的查询。
mysql> SHOW STATUS LIKE 'last_query_cost';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| Last_query_cost | 20.290412 |
+-----------------+-----------+
1 row in set (0.00 sec)
你能看到页的数量是刚才的 20 倍,但是查询的效率并没有明显的变化,实际上这两个 SQL 查询的时间页基本上一样,就是因为采用了顺序读取
的方式将页面一次性加载到缓冲池中,然后再进行查找。虽然 数量(last_query_cost)
增加了不少 ,但是通过缓冲池的机制,并 没有增加多少查询时间
。
使用场景: 它对于比较开销是非常有用的,特别是我们有好几种查询方式可选的时候。
4. 定位执行慢的 SQL:慢查询日志
4.1 开启慢查询日志参数
- 开启slow_query_log
set global slow_query_log='ON';
mysql> show variables like '%slow_query_log%';
你能看到这时慢查询分析已经开启,同时文件保存在 /var/lib/mysql/RainbowSea-slow.log
文件 中。
- 修改long_query_time阈值
接下来我们来看下慢查询的时间阈值设置,使用如下命令:
mysql> show variables like '%long_query_time%';
这里如果我们想把时间缩短,比如设置为 1 秒,可以这样设置:
#测试发现:设置global的方式对当前session的long_query_time失效。对新连接的客户端有效。所以可以一并 执行下述语句
mysql > set global long_query_time = 1;
mysql> show global variables like '%long_query_time%';mysql> set long_query_time=1;
mysql> show variables like '%long_query_time%';
4.2 查看慢查询数目
查询当前系统中有多少条慢查询记录
mysql> SHOW GLOBAL STATUS LIKE '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 0 |
+---------------+-------+
1 row in set (0.00 sec)
4.3 案例演示
步骤1. 建表
CREATE TABLE `student` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`stuno` INT NOT NULL ,
`name` VARCHAR(20) DEFAULT NULL,
`age` INT(3) DEFAULT NULL,
`classId` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
步骤2:设置参数 log_bin_trust_function_creators
创建函数,假如报错:
This function has none of DETERMINISTIC......
命令开启:允许创建函数设置:
set global log_bin_trust_function_creators=1; # 不加global只是当前窗口有效。
第2步:创建模拟数据必需的存储函数
说明: 创建函数,假如报错:
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
由于开启过慢查询日志bin-log, 我们就必须为我们的
function
指定一个参数。主从复制,主机会将写操作记录在bin-log日志中。从机读取bin-log日志,执行语句来同步数据。如果使 用函数来操作数据,会导致从机和主键操作时间不一致。所以,默认情况下,mysql不开启创建函数设 置。
- 查看mysql是否允许创建函数:
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
- 命令开启:允许创建函数设置:
set global log_bin_trust_function_creators=1; # 不加global只是当前窗口有效。
mysqld重启,上述参数又会消失。永久方法:
- windows下:
my.ini[mysqld]
加上:log_bin_trust_function_creators=1 # 1 表示真-开启,0 表示假-关闭
- linux下:
/etc/my.cnf
下my.cnf[mysqld]
加上:log_bin_trust_function_creators=1 # 1 表示真-开启,0 表示假-关闭
#函数1:创建随机产生字符串函数
DELIMITER //
CREATE FUNCTION rand_string(n INT)RETURNS VARCHAR(255) #该函数会返回一个字符串
BEGINDECLARE chars_str VARCHAR(100) DEFAULT'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';DECLARE return_str VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 0;WHILE i < n DOSET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));SET i = i + 1;END WHILE;RETURN return_str;
END //
DELIMITER ;
#函数2:创建随机数函数
DELIMITER //
CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11)
BEGIN
DECLARE i INT DEFAULT 0;
SET i = FLOOR(from_num +RAND() * (to_num - from_num+1));
RETURN i;
END //
DELIMITER;
第3步:创建插入模拟数据的存储过程
# 存储过程1:创建插入课程表存储过程
DELIMITER //
CREATE PROCEDURE insert_course( max_num INT )
BEGIN
DECLARE i INT DEFAULT 0;SET autocommit = 0; #设置手动提交事务 REPEAT #循环SET i = i + 1; #赋值INSERT INTO course (course_id, course_name ) VALUES (rand_num(10000,10100),rand_string(6));UNTIL i = max_numEND REPEAT; COMMIT; #提交事务
END //
DELIMITER;
# 存储过程2:创建插入学生信息表存储过程
DELIMITER //
CREATE PROCEDURE insert_stu1(START INT,max_num INT)
BEGIN
DECLARE i INT DEFAULT 0;SET autocommit = 0; #设置手动提交事务REPEAT #循环SET i = i + 1; # 赋值INSERT INTO student (stuno, NAME ,age ,classId )VALUES ((START+i),rand_string(6),rand_num(10,100),rand_num(10,1000));UNTIL i = max_numEND REPEAT;COMMIT; # 提交事务END //
DELIMITER ;
第4步:调用存储过程
#调用刚刚写好的函数, 4000000条记录,从100001号开始
CALL insert_stu1(100001,4000000);
第5步:查看是否含有这么多数据,数据是否插入成功
SELECT COUNT(*) FROM student;
4.4 测试及分析
1. 测试
mysql> SELECT * FROM student WHERE stuno = 3455655;
+---------+---------+--------+------+---------+
| id | stuno | name | age | classId |
+---------+---------+--------+------+---------+
| 3523633 | 3455655 | oQmLUr | 19 | 39 |
+---------+---------+--------+------+---------+
1 row in set (2.09 sec)
mysql> SELECT * FROM student WHERE name = 'oQmLUr';
+---------+---------+--------+------+---------+
| id | stuno | name | age | classId |
+---------+---------+--------+------+---------+ |
1154002 | 1243200 | OQMlUR | 266 | 28 |
| 1405708 | 1437740 | OQMlUR | 245 | 439 |
| 1748070 | 1680092 | OQMlUR | 240 | 414 |
| 2119892 | 2051914 | oQmLUr | 17 | 32 |
| 2893154 | 2825176 | OQMlUR | 245 | 435 |
| 3523633 | 3455655 | oQmLUr | 19 | 39 |
+---------+---------+--------+------+---------+6 rows in set (2.39 sec)
从上面的结果可以看出来,查询学生编号为“3455655”的学生信息花费时间为2.09秒。查询学生姓名为 “oQmLUr”的学生信息花费时间为2.39秒。已经达到了秒的数量级,说明目前查询效率是比较低的,下面 的小节我们分析一下原因。
2.分析
show status like 'slow_queries';
补充说明:
除了上述变量,控制慢查询日志的还有一个变量:min_examined_row_limit。这个变量的意思是,查询
扫描过的最少记录数
。这个变量和查询执行时间,共同组成了判别一个查询是否是慢查询的条件。如果查询扫描过的记录数大于等于这个变量值,并且查询执行时间超过long_query_time
的值,那么,这个查询就被记录到慢查询日志中;反之,则不被记录到慢查询中。mysql> show variables like 'min%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | min_examined_row_limit | 0 | +------------------------+-------+ 1 row in set (0.01 sec)
这个值,默认是
0
,与long_query_time = 10
合在一起,表示只要查询的执行时间超过10 秒钟,哪怕一个记录也没有扫描过,都要被记录到慢查询日志
中。你也可以根据需要,通过修改my.ini
文件,来修改查询时长,或者通过 set 指令,用 SQL 语句修改“min_examined_row_limit
” 的值。
4.5 慢查询日志分析工具:mysqldumpslow
在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具 mysqldumpslow
。
查看 mysqldumpslow
的帮助信息
[root@RainbowSea ~]# mysqldumpslow --help;
mysqldumpslow 命令的具体参数如下:
-a:
不将数字抽象成N,字符串抽象成S-s:
是表示按照何种方式排序:
c:
访问次数l:
锁定时间r:
返回记录t:
查询时间al:
平均锁定时间ar:
平均返回记录数at:
平均查询时间 (默认方式)ac:
平均查询次数t:
即为返回前面多少条的数据;-g:
后边搭配一个正则匹配模式,大小写不敏感的;
举例:我们想要按照查询时间排序,查看前五条 SQL 语句,这样写即可:
mysqldumpslow -s t -t 5 /var/lib/mysql/RainbowSea-slow.log
其中的路径位置是通过如下:show variables like '%slow_query_log%';
这条命令查询到的
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/RainbowSea-slow.log |
+---------------------+------------------------------------+
2 rows in set (0.01 sec)
[root@RainbowSea ~]# mysqldumpslow -s t -t 5 /var/lib/mysql/RainbowSea-slow.logReading mysql slow query log from /var/lib/mysql/RainbowSea-slow.log
Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts
工作常用参考:
#得到返回记录集最多的10个SQL mysqldumpslow -s r -t 10 /var/lib/mysql/RainbowSea-slow.log#得到访问次数最多的10个SQL mysqldumpslow -s c -t 10 /var/lib/mysql/RainbowSea-slow.log#得到按照时间排序的前10条里面含有左连接的查询语句 mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/RainbowSea-slow.log#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况 mysqldumpslow -s r -t 10 /var/lib/mysql/RainbowSea-slow.log | more
4.6 关闭慢查询日志
MySQL服务器停止慢查询日志功能有两种方法:
- 方式1:永久性方式 通过 mysql 配置文件
etc/my.ini
[mysqld]
slow_query_log=OFF
或者,把slow_query_log一项注释掉 或 删除
[mysqld]
#slow_query_log =OFF
重启MySQL服务,执行如下语句查询慢日志功能。
SHOW VARIABLES LIKE '%slow%'; #查询慢查询日志所在目录
SHOW VARIABLES LIKE '%long_query_time%'; #查询超时时长
- 方式2:临时性方式
使用SET语句来设置。 (1)停止MySQL慢查询日志功能,具体SQL语句如下。
SET GLOBAL slow_query_log=off;
(2)重启MySQL服务,使用SHOW语句查询慢查询日志功能信息,具体SQL语句如下
SHOW VARIABLES LIKE '%slow%';
#以及
SHOW VARIABLES LIKE '%long_query_time%';
4.7 删除慢查询日志
进入到我们的日志文件的目录当中,找到对于的日志文件,然后,直接删除就可以了。
通过如下指令:找到日志文件的所在位置
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/RainbowSea-slow.log |
+---------------------+------------------------------------+
2 rows in set (0.01 sec)
从执行结果可以看出,慢查询日志的目录默认为 MySQL
的数据目录,在该目录下手动删除慢查询日志文件
即可。使用命令mysqladmin flush-logs
来重新生成查询日志文件,具体命令如下,执行完毕会在数据目录下重新生成慢查询日志文件。
mysqladmin -uroot -p flush-logs slow
提示:
慢查询日志都是使用
mysqladmin flush-logs
命令来删除重建的。使用时一定要主键,一旦执行了这个命令,慢查询日志都只存在新的日志文件中,如果需要旧的查询日志,就必须事先备份。
5. 查看 SQL 执行成本:SHOW PROFILE
mysql > show variables like 'profiling';
通过设置 profiling='ON’
来开启 show profile:
mysql > set profiling = 'ON';
然后执行相关的查询语句。接着看下当前会话都有哪些 profiles,使用下面这条命令:
mysql > show profiles;
你能看到当前会话一共有 2 个查询。如果我们想要查看最近一次查询的开销,可以使用:
mysql > show profile;
mysql> show profile cpu,block io for query 2;
show profile的常用查询参数:
ALL:
显示所有的开销信息。BLOCK IO:
显示块IO开销。CONTEXT SWITCHES:
上下文切换开 销。CPU:
显示CPU开销信息。IPC:
显示发送和接收开销信息。MEMORY:
显示内存开销信息。PAGE FAULTS:
显示页面错误开销信息。SOURCE:
显示和Source_function,Source_file,Source_line相关的开销信息。SWAPS:
显示交换次数开销信息。
6. 最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
相关文章:
9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志
9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志 文章目录 9-1. MySQL 性能分析工具的使用——last_query_cost,慢查询日志1. 数据库服务器的优化步骤2. 查看系统性能参数3. 统计SQL的查询成本:last_query_cost4. 定位执行慢的…...
网络安全监测探针安装位置 网络安全监测系统
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 软件简介: SockMon(SocketMonitor)网络安全监控系统是一款为电脑专业人员打造的一款出色的安防监控软件。在如今这个恶意软件,攻击&#…...
Git版本控制系统---本地操作(万字详解!)
目录 git基本配置 认识工作区、暂存区、版本库 添加文件--情况一: 添加文件-情况二: 修改文件: 版本回退: git基本配置 1.初始化本地仓库,注意:一定要在一个目录下进行,一般都是新建一个文件夹,在文件…...
forge-1.21.x模组开发(二)给物品添加功能
功能效果 创建一个兑换券,当使用兑换券对着兑换机右键时,获得一条烤鱼 创建兑换券 创建ExchangeCouponsItem.java,继承Item,定义兑换券内容 public class ExchangeCouponsItem extends Item {public ExchangeCouponsItem(Prop…...
elasticsearch在windows上的配置
写在最前面: 上资源 第一步 解压: 第二步 配置两个环境变量 第三步 如果是其他资源需要将标蓝的文件中的内容加一句 xpack.security.enabled: false 不同版本的yaml文件可能配置不同,末尾加这个 xpack.security.enabled: true打开bin目…...
机器学习数学通关指南——拉格朗日乘子法
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 一句话总结 拉格朗日乘子法…...
Matplotlib,Streamlit,Django大致介绍
Matplotlib:是一个用于创建各种类型的静态、动态和交互式图表的Python绘图库。可以通过pip install matplotlib命令进行安装,安装完成后,在Python脚本中使用import matplotlib语句导入即可开始使用。Streamlit:是一个用于快速构建…...
智慧废品回收小程序php+uniapp
废品回收小程序:数字化赋能环保,开启资源循环新时代 城市垃圾治理难题,废品回收小程序成破局关键 随着城市化进程加速与消费水平提升,我国生活垃圾总量逐年攀升,年均增速达5%-8%,其中超30%为可回收物。然…...
深搜专题2:组合问题
描述 组合问题就是从n个元素中抽出r个元素(不分顺序且r < = n), 我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 例如n = 5 ,r = 3 ,所…...
Redis 如何实现消息队列?
在当今的分布式系统架构中,消息队列起着至关重要的作用,它能够帮助系统实现异步通信、解耦组件以及缓冲流量等功能。Redis,作为一款高性能的键值对存储数据库,也为我们提供了便捷的方式来构建消息队列。今天,咱们就深入…...
Day1 初识AndroidAudio
今日目标 搭建Android Audio开发环境理解音频基础概念实现第一个音频播放/录制Demo了解车载音频的特殊性 上午:环境搭建与理论学习 步骤1:开发环境配置 安装Android Studio(最新稳定版)创建新项目(选择Kotlin语言&a…...
2025保险与金融领域实战全解析:DeepSeek赋能细分领域深度指南(附全流程案例)
🚀 2025保险与金融领域实战全解析:DeepSeek赋能细分领域深度指南(附全流程案例)🚀 📚 目录 DeepSeek在保险与金融中的核心价值保险领域:从风险建模到产品创新金融领域:从投资分析到财富管理区块链与联邦学习的应用探索客户关系与私域运营:全球化体验升级工具与资源…...
YARN的工作机制及特性总结
YARN hadoop的资源管理调度平台(集群)——为用户程序提供运算资源的管理和调度 用户程序:如用户开发的一个MR程序 YARN有两类节点(服务进程): 1. resourcemanager 主节点master ----只需要1个来工作 2. nod…...
财务运营域——营收稽核系统设计
摘要 本文主要介绍了营收稽核系统的背景、特点与作用。营收稽核系统的产生源于营收管理复杂性、财务合规与审计需求、提升数据透明度与决策效率、防范舞弊与风险管理、技术进步与自动化需求、多元化业务模式以及跨部门协作与数据整合等多方面因素。其特点包括自动化与智能化、…...
22.回溯算法4
递增子序列 这里不能排序,因为数组的顺序是对结果有影响的,所以只能通过used数组来去重 class Solution { public:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums,int start){if(path.si…...
C#上位机--跳转语句
在 C# 编程中,跳转语句用于改变程序的执行流程。这些语句允许程序从当前位置跳转到其他位置,从而实现特定的逻辑控制。本文将详细介绍 C# 中四种常见的跳转语句:GOTO、Break、Continue 和 Return,并通过具体的示例代码来展示它们的…...
百度文心一言API-Python版(完整代码)
大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 上一节我们分享了实现AI智能回复微信的内容,这一节我们来探索其中需要的百度文心一言,本文详细介绍了我们从注册账号到实现百度文心一言智能回复,同时多种模型自行…...
Prompt:创造性的系统分析者
分享的提示词: 你是一个创造性的系统分析者,作为咨询师,你具有以下特质: 基础能力: 深入理解我的系统性模式 识别模式间的隐藏联系 发现出人意料的关联 提供令人惊讶的洞见 工作方式: 在每次回应中至少…...
单机上使用docker搭建minio集群
单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose(如果尚未安装)1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…...
Bash Shell控制台终端命令合集
最近整理了一下Bash Shell终端的命令,以备后续查用。如下: 1.内建命令 命令描述&在后台启动作业((x))执行数学表达式x.在当前shell中读取并执行指定文件中的命令:什么都不做,始终成功退出[ t ]对条件表达式t进行求值[[ e ]]对条件表达式e进行求值alias为指定的命令定义…...
垂类大模型微调(一):认识LLaMA-Factory
LlamaFactory 是一个专注于 高效微调大型语言模型(LLMs) 的开源工具框架,尤其以支持 LLaMA(Meta 的大型语言模型系列)及其衍生模型(如 Chinese-LLaMA、Alpaca 等)而闻名。它的目标是简化模型微调流程,降低用户使用门槛; 官方文档 一、介绍 高效微调支持 支持多种微调…...
QString是 Qt 框架中的一个核心类,基本用法使用:创建、字符串拼接、截取、查找、替换、分割、大小写转换、比较。
QString 是 Qt 框架中的一个核心类,用于处理字符串数据。它提供了许多功能来处理文本操作,包括但不限于字符串拼接、分割、大小写转换等。下面是一些 QString 的常见用法示例: 创建 QString 你可以通过多种方式创建 QString 对象࿱…...
彻底卸载kubeadm安装的k8s集群
目录 一、删除资源 二、停止k8s服务 三、重置集群 四、卸载k8s安装包 五、清理残留文件和目录 六、删除k8s相关镜像 七、重启服务器 一、删除资源 # 删除集群中的所有资源,包括 Pod、Deployment、Service,任意节点执行 kubectl delete --all pod…...
边缘安全加速(ESA)套餐
为帮助不同规模和需求的企业选择合适的解决方案,边缘安全加速(ESA)提供了多种套餐。以下是四种主要套餐的介绍,每个套餐都根据企业需求提供不同的功能和服务水平,从基础安全保护到企业级的全面防护与加速。 1. 各版本详…...
MySQL主从服务器配置教程
文章目录 前言一、环境准备1. 服务器信息2. 安装 MySQL3. 初始化 MySQL4. Navicat查看 MySQL 服务器 二、主服务器(Master)配置1. 编辑 MySQL 配置文件2. 创建用于复制的用户3. 获取二进制日志信息 三、从服务器(Slave)配置1. 编辑…...
机器学习实战(7):聚类算法——发现数据中的隐藏模式
第7集:聚类算法——发现数据中的隐藏模式 在机器学习中,聚类(Clustering) 是一种无监督学习方法,用于发现数据中的隐藏模式或分组。与分类任务不同,聚类不需要标签,而是根据数据的相似性将其划…...
Visual Studio中打开多个项目
1) 找到解决方案窗口 2) 右键添加→ 选择现有项目 3) 选择.vcxproj文件打开即可...
springcloud gateway并发量多大
Spring Cloud Gateway的并发量并非固定值,它受到多种因素的影响,包括但不限于网关配置、硬件资源(如CPU、内存、网络带宽等)、后端服务的处理能力以及系统整体的架构设计。因此,要准确回答Spring Cloud Gateway的并发量…...
抓包工具 wireshark
1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...
git从本地其他设备上fetch分支
在 Git 中,如果你想从本地其他设备上获取分支,可以通过以下几种方式实现。不过,需要注意的是,Git 本身是分布式版本控制系统,通常我们是从远程仓库(如 GitHub、GitLab 等)拉取分支,而…...
Ubuntu:wvp-GB28181-pro安装、运行
参考 https://doc.wvp-pro.cn 下载源码 GitHub - 648540858/wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtm…...
docker中常用的命令
一、服务命令 systemctl start docker.service 启动docker服务 systemctl stop docker.service 关闭docker服务 systemctl enable docker.service 设置docker服务开机启动 systemctl disable docker.service .禁止docker服务开机自启动 二、镜像命令 d…...
如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...
要使用 DeepSeek 的 CV 模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建,一般可以按照以下步骤实现: 1. 准备工作 1.1 获取 API 访问权限 首先,你需要从 DeepSeek 官方获取 API 访问权限和相应的 API 密钥。这通常需要在 De…...
Android 串口通信
引言 在iot项目中,Android 端总会有和硬件通信。 通信这里:串口通信,蓝牙通信或者局域网通信。 这里讲一下串口通信。 什么是串口? “串口”(Serial Port)通常是指一种用于与外部设备进行串行通信的接口。…...
智联招聘爬虫
使用Python和Selenium进行招聘信息爬取 在当今数字化时代,数据已成为企业决策的重要依据。对于人力资源部门或求职者而言,获取最新的招聘信息至关重要。然而,手动浏览和收集招聘信息不仅耗时费力,而且效率低下。为了解决这个问题&…...
frameworks 之 Focus window
frameworks 之 Focus window 1 查看当前焦点窗口1.1 dump window1.2 dump input1.3 input Events 日志1.4 dump SurfaceFlinger1.5 查看关键的日志 2 更新当前焦点应用3 更新当前焦点窗口3.1 焦点丢失3.2 获得窗口焦点 4 窗口信息到InputDispatcher4.1 焦点应用通知InputDispat…...
危害被低估的Netgear认证前漏洞CVE-2019-20760分析
概述 Netgear R9000设备2019年爆出认证绕过漏洞CVE-2019-20760,题目之所以说这个漏洞远被低估,主要以下两个原因: 实际漏洞危害较大,公开信息仅显示该漏洞为一个认证绕过漏洞,没有具体漏洞信息或者POC,但…...
微软量子芯片引领人工智能革命,开启计算新纪元
摘要:微软近日发布了具有里程碑意义的量子芯片,这一突破性技术不仅为量子计算带来了新的可能性,更为人工智能领域带来了前所未有的发展机遇。本文将探讨微软量子芯片如何与人工智能相结合,以及它对未来计算世界的深远影响。 一、…...
PHP2(WEB)
##解题思路 打开页面什么线索都没有,目录扫描只是扫出来一个index.php,而源代码没有东西,且/robots.txt是不允许访问的 于是一番查询后发现,有个index.phps的文件路径,里头写着一段php的逻辑,对url的id参数…...
Linux 下 VIM 编辑器学习记录:从基础到进阶(中)
在 Linux 系统的学习与实践过程中,对文件内容的查看是一项极为基础且高频的操作。熟练掌握各类内容查看命令,不仅能提升我们在 Linux 环境下的工作效率,对于学习 Java 全栈开发的同学来说,在处理项目相关的配置文件、日志文件时也…...
使用Python进行PDF隐私信息检测
在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要。本文将介绍如何使用Python及其相关库来检测PDF文件中的隐私信息,如姓名、身份证号、手机号和邮箱等。 C:\pythoncode\new\checkp…...
【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
网络安全科普系统开发与设计(springboot论文源码调试讲解)
第4章 总体设计 4.1系统目标 本系统旨在达到科普知识信息展示、案例分析信息查询、试题信息添加、评论、答题管理、信息分类等为一体,为用户和管理员提供服务。使管理员更加轻松的进行工作,使用户更加快速的解决自己的问题。本系统的设计界面丰富&#…...
前后端对接
前端与后端的对接主要通过 接口 进行数据交互,具体流程和方式如下: 1. 明确需求与接口定义 前后端协商:确定需要哪些接口、接口的功能、请求参数和返回格式。接口文档:使用工具(如 Swagger、Postman、Apifoxÿ…...
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数…...
计算机专业知识【深入理解子网中的特殊地址:为何 192.168.0.1 和 192.168.0.255 不能随意分配】
在计算机网络的世界里,IP 地址是设备进行通信的关键标识。对于常见的子网,如 192.168.0.0/24,我们可能会疑惑为何某些地址不能分配给主机使用。接下来,我们就以 192.168.0.0/24 为例,详细解释为何 192.168.0.1 和 192.…...
网络安全与措施
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 # 网络安全问题概述 1) 数据安全 访问(授权访问);存储(容灾、备份或异地备份等) 2) 应用程序 不能…...
复刻Dummy机械臂保姆教程
一直想复刻稚晖君的Dummy机械臂,24年11月底终于开始行动,上网学习、材料准备、组装调试前后耗时1个多月,终于在春节前顺利完工,正好用它给大家拜个年。很多同学在咨询细节,这里就整理一份保姆式教程,其中学…...
|网络安全|网络安全学习方法
1、先网络后安全 很多初学者还没搞定网络看懂网络拓扑,就急着研究防火墙或VPN,其实这样就不清楚整个网络架构是如何安全演进的。正确的流程是:先通过网络协议和拓扑设计的学习,能独立搭建一个企业网/校园网,再引入局域…...
内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%
一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 1. **安全性风险**:内外网直连可能导致病毒传播、数据泄露。 2. **操作繁琐**:传统方式需频繁切…...