Mariadb数据库存储路径及日志路径
修改Mariadb数据库存储路径及日志路径
#!/bin/bash
mysql_log=/data/log/mysql ###新的日志存储路径
mysql_modify=/etc/mysql/mariadb.conf.d/50-server.cnf ###Mariadb配置文件路径
sudo mkdir ${mysql_log} -p
###修改数据库存储路径脚本
sudo systemctl stop mariadb
sudo cp -r /var/lib/mysql /data/mysql
sudo chown -R mysql:mysql /data/mysql
sudo sed -i '$a\alias /var/lib/mysql -> /data/mysql,' /etc/apparmor.d/tunables/alias
sudo systemctl restart apparmor ###重启apparmor
sudo sed -i '/datadir/a\datadir = /data/mysql' ${mysql_modify}
sudo sed -i 's/ProtectHome=.*/ProtectHome=False/' /lib/systemd/system/mysql.service
sudo sed -i 's/ProtectHome-.*/ProtectHome=False/' /lib/systemd/system/mysqld.service
###修改Mariadb日志文件存储目录脚本
sudo sed -i "/^#general_log/s/^#//" ${mysql_modify} ###取消注释
sudo sed -i "s#general_log_file.*#general_log_file = ${mysql_log}/mysql.log#" ${mysql_modify} ###修改存储路径
sudo sed -i "/^#log_error/s/^#//" ${mysql_modify} ###取消注释
sudo sed -i "s#log_error.*#log_error = ${mysql_log}/error.log#" ${mysql_modify} ###修改存储路径
sudo chown -R mysql:adm ${mysql_log}
sudo systemctl start mariadb ###重启mariadb
10.4.6-MariaDB 运行日志在哪里
mariadb日志分类
mariadb日志有6种,分别是查询日志(general_log),慢查询日志(log_slow_querIEs),错误日志(log_error,log_warnings),二进制日志(binlog),中继日志(relay_log)和事务日志(innodb_log);
https://blog.csdn.net/weixin_46934884/article/details/114261614
https://blog.csdn.net/ycsdn10/article/details/121803068
https://blog.csdn.net/zgdwxp/article/details/98595277
https://blog.csdn.net/qq_40953798/article/details/130391774
https://mariadb.com/kb/en/information-schema-processlist-table/
https://blog.51cto.com/zhjh256/3139617
https://blog.csdn.net/lbp0408/article/details/125202823
select * from information_schema.processlist;
select * from information_schema.processlist order by TIME desc;
show status like '%memory_used%';
select version();
show binary logs
show full processlist;
SELECT CASE WHEN Max_Stage < 2 THEN Progress ELSE (Stage-1)/Max_Stage*100+Progress/Max_Stage END
AS Progress FROM INFORMATION_SCHEMA.PROCESSLIST;
了解这些基本信息后,下面我们看看查询出来的结果都是什么意思。
- Id: 就是这个线程的唯一标识,当我们发现这个线程有问题的时候,可以通过 kill 命令,加上这个Id值将这个线程杀掉。前面我们说了show processlist 显示的信息时来自information_schema.processlist 表,所以这个Id就是这个表的主键。
- User: 就是指启动这个线程的用户。
- Host: 记录了发送请求的客户端的 IP 和 端口号。通过这些信息在排查问题的时候,我们可以定位到是哪个客户端的哪个进程发送的请求。
- DB: 当前执行的命令是在哪一个数据库上。如果没有指定数据库,则该值为 NULL 。
- Command: 是指此刻该线程正在执行的命令。这个很复杂,下面单独解释
- Time: 表示该线程处于当前状态的时间。
- State: 线程的状态,和 Command 对应,下面单独解释。
- Info: 一般记录的是线程执行的语句。默认只显示前100个字符,也就是你看到的语句可能是截断了的,要看全部信息,需要使用 show full processlist。
下面我们单独看一下 Command 的值:
- Binlog Dump: 主节点正在将二进制日志 ,同步到从节点
- Change User: 正在执行一个 change-user 的操作
- Close Stmt: 正在关闭一个Prepared Statement 对象
- Connect: 一个从节点连上了主节点
- Connect Out: 一个从节点正在连主节点
- Create DB: 正在执行一个create-database 的操作
- Daemon: 服务器内部线程,而不是来自客户端的链接
- Debug: 线程正在生成调试信息
- Delayed Insert: 该线程是一个延迟插入的处理程序
- Drop DB: 正在执行一个 drop-database 的操作
- Execute: 正在执行一个 Prepared Statement
- Fetch: 正在从Prepared Statement 中获取执行结果
- Field List: 正在获取表的列信息
- Init DB: 该线程正在选取一个默认的数据库
- Kill : 正在执行 kill 语句,杀死指定线程
- Long Data: 正在从Prepared Statement 中检索 long data
- Ping: 正在处理 server-ping 的请求
- Prepare: 该线程正在准备一个 Prepared Statement
- ProcessList: 该线程正在生成服务器线程相关信息
- Query: 该线程正在执行一个语句
- Quit: 该线程正在退出
- Refresh:该线程正在刷表,日志或缓存;或者在重置状态变量,或者在复制服务器信息
- Register Slave: 正在注册从节点
- Reset Stmt: 正在重置 prepared statement
- Set Option: 正在设置或重置客户端的 statement-execution 选项
- Shutdown: 正在关闭服务器
- Sleep: 正在等待客户端向它发送执行语句
- Statistics: 该线程正在生成 server-status 信息
- Table Dump: 正在发送表的内容到从服务器
- Time: Unused
BDE(Borland Database Engine)
https://baike.baidu.com/item/BDE/2016161?fr=ge_ala
BDE(Borland Database Engine)是Inprise公司的数据库引擎,它结合了SQL Links允许程序员通过它能够连接到各种不同的数据库。BDE是BORLAND 数据库引擎的缩写,它是用来驱动数据库的,就像ODBC一样。同样的DBASE表可以用BDE驱动,也可以用ODBC驱动。
Delphi 中两种连接数据库的方法:BDE 数据引擎和ADO 技术。相比而言, BDE 数据引擎有以下四个优势: 1)其应用程序运行效率非常高。2)目前BDE 是与Delphi 整合得最好的数据库访问引擎,它是通过提供安装相应驱动程序的方式来支持相应数据库访问能力, 因此Delphi数据库应用程序能访问多种类型的数据库, 而不是局限于一种数据库,从而Delphi对分布式数据库应用程序编写有很强的支持能力, 并且对于有些数据库, 只能使用BDE 引擎才能访问。3)BDE 以提供组件的方式支持数据库编程, 编程非常直观、简单。4)BDE 对数据库应用程序(特别是在网络环境下) 安装过程中的配置管理非常方便。
虽然BDE 有很多的优势, 但是Borland公司对BDE 已经进入了后期维护的阶段, 停止了对BDE 的更新开发。相反, ADO 就具有了广阔的发展前景, 虽然ADO 的执行效率可能有些不如BDE,但是ADO 不光具有BDE 的后三点优势,它还是通用的数据库访问技术, 并得到了广泛的支持, 使用范围广, 升级和维护比较方便。
https://softwaretopic.informer.com/borland-database-engine-setup/
https://borland-database-engine.software.informer.com/
https://blog.csdn.net/jeefchen/article/details/4314152
https://blog.csdn.net/ch_builder/article/details/16584
路由
C:\WINDOWS\system32>route add 192.168.33.0 mask 255.255.255.0 192.168.3.237 -p
操作完成!
C:\WINDOWS\system32>route /h
操作网络路由表。
ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
-f 清除所有网关项的路由表。如果与某个
命令结合使用,在运行该命令前,
应清除路由表。
-p 与 ADD 命令结合使用时,将路由设置为
在系统引导期间保持不变。默认情况下,重新启动系统时,
不保存路由。忽略所有其他命令,
这始终会影响相应的永久路由。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
command 其中之一:
PRINT 打印路由
ADD 添加路由
DELETE 删除路由
CHANGE 修改现有路由
destination 指定主机。
MASK 指定下一个参数为“netmask”值。
netmask 指定此路由项的子网掩码值。
如果未指定,其默认设置为 255.255.255.255。
gateway 指定网关。
interface 指定路由的接口号码。
METRIC 指定跃点数,例如目标的成本。
用于目标的所有符号名都可以在网络数据库
文件 NETWORKS 中进行查找。用于网关的符号名称都可以在主机名称
数据库文件 HOSTS 中进行查找。
如果命令为 PRINT 或 DELETE。目标或网关可以为通配符,
(通配符指定为星号“*”),否则可能会忽略网关参数。
如果 Dest 包含一个 * 或 ?,则会将其视为 Shell 模式,并且只
打印匹配目标路由。“*”匹配任意字符串,
而“?”匹配任意一个字符。示例: 157.*.1、157.*、127.*、*224*。
只有在 PRINT 命令中才允许模式匹配。
诊断信息注释:
无效的 MASK 产生错误,即当 (DEST & MASK) != DEST 时。
示例: > route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
路由添加失败: 指定的掩码参数无效。
(Destination & Mask) != Destination。
示例:
> route PRINT
> route PRINT -4
> route PRINT -6
> route PRINT 157* .... 只打印那些匹配 157* 的项
> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
destination^ ^mask ^gateway metric^ ^
Interface^
如果未给出 IF,它将尝试查找给定网关的最佳
接口。
> route ADD 3ffe::/32 3ffe::1
> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
CHANGE 只用于修改网关和/或跃点数。
> route DELETE 157.0.0.0
> route DELETE 3ffe::/32
C:\WINDOWS\system32>route print
===========================================================================
接口列表
22...00 d8 61 61 9e bb ......Intel(R) Ethernet Connection (7) I219-V
7...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
10...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
1...........................Software Loopback Interface 1
===========================================================================
IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.3.1 192.168.3.232 266
127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
172.28.0.0 255.255.255.0 192.168.3.1 192.168.3.232 11
180.169.74.22 255.255.255.255 192.168.3.1 192.168.3.232 11
192.168.3.0 255.255.255.0 在链路上 192.168.3.232 266
192.168.3.0 255.255.255.0 192.168.3.1 192.168.3.232 11
192.168.3.232 255.255.255.255 在链路上 192.168.3.232 266
192.168.3.255 255.255.255.255 在链路上 192.168.3.232 266
192.168.33.0 255.255.255.0 192.168.3.237 192.168.3.232 11
192.168.40.0 255.255.255.0 在链路上 192.168.40.1 291
192.168.40.1 255.255.255.255 在链路上 192.168.40.1 291
192.168.40.255 255.255.255.255 在链路上 192.168.40.1 291
192.168.111.0 255.255.255.0 192.168.3.1 192.168.3.232 11
192.168.198.0 255.255.255.0 在链路上 192.168.198.1 291
192.168.198.1 255.255.255.255 在链路上 192.168.198.1 291
192.168.198.255 255.255.255.255 在链路上 192.168.198.1 291
224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331
224.0.0.0 240.0.0.0 在链路上 192.168.198.1 291
224.0.0.0 240.0.0.0 在链路上 192.168.40.1 291
224.0.0.0 240.0.0.0 在链路上 192.168.3.232 266
255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
255.255.255.255 255.255.255.255 在链路上 192.168.198.1 291
255.255.255.255 255.255.255.255 在链路上 192.168.40.1 291
255.255.255.255 255.255.255.255 在链路上 192.168.3.232 266
===========================================================================
永久路由:
网络地址 网络掩码 网关地址 跃点数
192.168.3.0 255.255.255.0 192.168.3.1 1
192.168.111.0 255.255.255.0 192.168.3.1 1
172.28.0.0 255.255.255.0 192.168.3.1 1
180.169.74.22 255.255.255.255 192.168.3.1 1
0.0.0.0 0.0.0.0 192.168.3.1 默认
192.168.33.0 255.255.255.0 192.168.3.237 1
===========================================================================
IPv6 路由表
===========================================================================
活动路由:
接口跃点数网络目标 网关
1 331 ::1/128 在链路上
1 331 ff00::/8 在链路上
===========================================================================
永久路由:
无
MySQL 解析binlog生成标准SQL工具之my2sql
go版MySQL binlog解析工具,通过解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息。https://github.com/liuhr/my2sql
安装
yum install -y go
编译
git clone https://github.com/liuhr/my2sql.git
cd my2sql/
go build .
也可以直接下载Linux版编译好的可执行文件
https://github.com/liuhr/my2sql/blob/master/releases/my2sql
总结
限制
使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响
只能回滚DML, 不能回滚DDL
支持指定-tl时区来解释binlog中time/datetime字段的内容。开始时间-start-datetime与结束时间-stop-datetime也会使用此指定的时区, 但注意此开始与结束时间针对的是binlog event header中保存的unix timestamp。结果中的额外的datetime时间信息都是binlog event header中的unix timestamp
此工具是伪装成从库拉取binlog,需要连接数据库的用户有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限
优点
功能丰富,不仅支持回滚操作,还有其他实用功能。请参考之前博文
基于golang实现,速度快,全量解析1.1Gbinlog只需要1分30秒左右,当前其他类似开源工具一般要几十分钟
github地址 https://github.com/liuhr/my2sql
my2sql功能介绍相关博文
MySQL binlog回滚/闪回、前滚、DML统计、长事务与大事务分析
https://blog.csdn.net/liuhanran/article/details/107425016
MySQL闪回工具之my2sql
https://blog.csdn.net/liuhanran/article/details/107426162
MySQL 解析binlog 统计DML、长事务与大事务分析工具之my2sql
https://blog.csdn.net/liuhanran/article/details/107427391
show status like '%memory_used%';
show global status like '%memory_used%';
select user,host,memory_used from information_schema.processlist;
show global variables like '%sort_buffer_size%';
SHOW VARIABLES LIKE '%table_open_cache%';
show global status like 'Open%tables';
SELECT ( @@key_buffer_size
+ @@query_cache_size
+ @@innodb_buffer_pool_size
+ @@innodb_log_buffer_size
+ @@max_connections * ( @@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@thread_stack
+ @@tmp_table_size
)
) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB;
mysql计算器
http://www.mysqlcalculator.com/
可以使用mysql计算器来计算内存使用
https://zhuanlan.zhihu.com/p/55528791
mysql 优化技巧心得一(key_buffer_size设置)
/etc/mysql/my.cnf 配置
[mysqld]
performance_schema = off
key_buffer_size = 16M
query_cache_size = 2M
query-cache-limit = 1M
tmp_table_size = 1M
innodb_buffer_pool_size = 1M
innodb_log_buffer_size = 1M
max_connections = 25
sort_buffer_size = 512M
read_buffer_size = 256K
read_rnd_buffer_size = 512K
join_buffer_size = 128K
thread_stack = 196K
binlog_cache_size = 0M
performance_schema: 这是一个MySQL的性能监控和分析工具,设置为off表示关闭该功能。key_buffer_size: 这是用于索引缓存的内存大小,设置为16M表示分配16兆字节的内存。query_cache_size: 这是用于查询缓存的内存大小,设置为2M表示分配2兆字节的内存。query-cache-limit: 这是查询缓存的最大限制,设置为1M表示最大缓存1兆字节的查询结果。tmp_table_size: 这是临时表的内存大小,设置为1M表示分配1兆字节的内存。innodb_buffer_pool_size: 这是InnoDB存储引擎的缓冲池大小,设置为1M表示分配1兆字节的内存。innodb_log_buffer_size: 这是InnoDB存储引擎的日志缓冲区大小,设置为1M表示分配1兆字节的内存。max_connections: 这是允许的最大连接数,设置为25表示最多允许25个并发连接。sort_buffer_size: 这是用于排序操作的缓冲区大小,设置为512M表示分配512兆字节的内存。read_buffer_size: 这是用于读取操作的缓冲区大小,设置为256K表示分配256千字节的内存。read_rnd_buffer_size: 这是用于随机读取操作的缓冲区大小,设置为512K表示分配512千字节的内存。join_buffer_size: 这是用于连接操作的缓冲区大小,设置为128K表示分配128千字节的内存。thread_stack: 这是每个线程的堆栈大小,设置为196K表示分配196千字节的内存。binlog_cache_size: 这是二进制日志缓存的大小,设置为0M表示不分配内存用于缓存二进制日志。
Mysql 事件调度器详解(Event Scheduler)
https://blog.csdn.net/qq_34745941/article/details/115486804
三种方案优化 2000w 数据大表

https://blog.csdn.net/cl939974883/article/details/124477888
https://www.cnblogs.com/qcfeng/p/5959685.html
https://downloads.mysql.com/archives/community/
https://www.jianshu.com/p/744dc5ec4e97
https://mariadb.org/mariadb/all-releases/#10-4
https://mariadb.org/download/?prod=mariadb&rel=10.4.6&old=1&t=mariadb
https://blog.csdn.net/xiaoweite1/article/details/80299754/
mysqlsla 是由 hackmysql.com 推出的一款 MySQL 的日志分析工具。整体来说,功能非常强大。
分析mysql日志的工具当然不止mysqlsla一种,据我所知的有:
mysqldumpslow
mysqlbinlog
myprofi
mysql-explain-slow-log
mysql-log-filter
pt-query-digest
mysqlsla

https://blog.csdn.net/m0_67400972/article/details/126479130
https://www.cnblogs.com/ding2016/p/9755468.html
https://github.com/daniel-nichter/hackmysql.com
http://haodro.com/archives/287257
https://github.com/daniel-nichter/hackmysql.com/tree/master/mysqlsla
https://blog.51cto.com/u_11794410/3215696
https://www.cnblogs.com/keluer/p/8081479.html
https://www.cnblogs.com/jpfss/p/12077707.html
[root@centos ~]# uname -a
Linux centos 5.14.0-373.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Oct 5 02:38:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql'
order by data_length desc, index_length desc;
mysqldumpslow -a mdb385-slow.log
mysqldumpslow -a -s t -t 50 mdb385-slow.log
mysqldumpslow -a -s t -t 3 mdb385-slow.log
mysqldumpslow.pl -a -s t -t 3 mdb385-slow.log
perl mysqldumpslow.pl -a -s t -t 3 mdb385-slow.log
perl mysqldumpslow.pl -a -s t -t 3 mdb385-slow.log > 0x01.sql
perl mysqldumpslow.pl -t 5 -s at mdb385-slow.log
perl mysqldumpslow.pl -a -t 5 -s at mdb385-slow.log > 0x01.sql
perl mysqldumpslow.pl -s r -t 10 mdb385-slow.log > 0x02.sql
wget http://HackMysqL.com/scripts/MysqLsla-2.03.tar.gz
/usr/local/bin/mysqlsla
mysqlsla -h
yum install perl-DBI perl-DBD-MySQL perl-devel perl-Time-HiRes -y
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Time-HiRes perl-DBI perl-DBD-MySQL
yum -y install perl-DBD-MySQL
yum -y install perl-devel
yum -y remove perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum list perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Time-HiRes perl-DBI perl-DBD-MySQL
yum list perl-DBI perl-DBD-MySQL perl-devel perl-Time-HiRes
perl Makefile.PL && make && make install
perl -MCPAN -e 'install Time::HiRes'
# perl -MCPAN -e 'install Time::HiRes'
# perl -MCPAN -e 'install File::Tail'
# perl -MCPAN -e 'install Date::Parse'
# perl -MCPAN -e 'install Net::Netmask'
Time::HiRes
File::Temp
Data::Dumper
DBI
Getopt::Long
Storable
yum install perl-Time-HiRes
yum install wget perl perl-DBI perl-DBD-MySQL mysql
yum install -y perl mysql
mysqlsla --help
https://hackmysql.com/archive/mysqlsla/
mdb385-slow.log
mysqlsla -lt slow --sort t_sum --top 20 mdb385-slow.log > demo1.log
mysqlsla -lt slow -sf "+select" -top 100 mdb385-slow.log > demo2.log
mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db hs_spin mdb385-slow.log > demo2.log
mysqlsla -lt slow mdb385-slow.log > demo2.log
mysqlsla -lt slow --top 3 --sort c_sum mdb385-slow.log
mysqlsla -lt slow --top 3 fff70bb4c940-slow.log
mysqlsla -lt slow --top 3 --sort c_sum fff70bb4c940-slow.log
tail -100f fff70bb4c940-slow.log
00. 简单使用
mysqlsla -lt slow slow.log
01. 慢查询日志中,执行时间最长的10条SQL
mysqlsla -lt slow -sf "+select" -top 10 slow.log > yoon.log
02. 慢查询日志中slow.log的数据库为sakila的所有select和update的慢查询sql,并查询次数最多的100条sql
mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db sakila slow.log > yoon.log
03. 取数据库sakila库中的select语句、按照c_sum_p排序的前2条
mysqlsla -lt slow -sort c_sum_p -sf "+select" -db sakila -top2 /export/servers/mysql/log/slow.log
04. 慢查询日志中,取出执行时间最长的3条SQL语句
mysqlsla -lt slow --top 3 slow.log
05. 按照总的执行次数
mysqlsla -lt slow --top 3 --sort c_sum slow.log
06. 取出create语句的慢查询
mysqlsla -lt slow -sf "+create"--top 3 --sort c_sum slow.log > yoon.log
#查询记录最多的20个sql语句,并写到select.log中去
mysqlsla -lt slow --sort t_sum --top 20 /data/mysql/127-slow.log >/tmp/select.log
统计慢查询文件为/data/mysql/127-slow.log的所有select的慢查询sql,并显示执行时间最长的100条sql,并写到sql_select.log中去
mysqlsla -lt slow -sf "+select" -top 100 /data/mysql/127-slow.log >/tmp/sql_select.log
统计慢查询文件为/data/mysql/127-slow.log的数据库为mydata的所有select和update的慢查询sql,并查询次数最多的100条sql,并写到sql_num.sql中去
mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db mydata /data/mysql/127-slow.log >/tmp/sql_num.log
tail -100f fff70bb4c940-slow.log
mysqldumpslow -s r -t 10 fff70bb4c940-slow.log
得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 /var/lib/mysql/test_mysql_slow.log
得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/test_mysql_slow.log
得到按照时间排序的前10条里面含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g ”left join” /var/lib/mysql/test_mysql_slow.log
另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
mysqldumpslow -s r -t 20 /var/lib/mysql/test_mysql_slow.log | more
perl mysqldumpslow.pl -s t -t 3 mdb385-slow.log > 0x02.sql
除了使用mysqldumpslow工具,也可以使用第三方分析工具,比如 pt-query-digest、mysqlsla等
perl mysqldumpslow.pl -r -s c -a -t 3 mdb385-slow.log > 0x03.sql
perl mysqldumpslow.pl -r -s c -a -t 3 fff70bb4c940-slow.log > 0x03.sql
perl mysqldumpslow.pl -a fff70bb4c940-slow.log > 0x03.sql
perl mysqldumpslow.pl --help
perl mysqldumpslow.pl -s c -t 10 d:\slow235.log # 取出使用最多的10条慢查询
perl mysqldumpslow.pl -s t -t 3 d:\slow235.log # 取出查询时间最慢的3条慢查询
perl mysqldumpslow.pl -s t -t 10 -g “left join” /database/mysql/slow-log # 得到按照时间排序的前10条里面含有左连接的查询语句
perl mysqldumpslow.pl -s r -t 10 -g 'left join' d:\slow235.log # 按照扫描行数最多的
https://github.com/hcymysql/reverse_sql/
[root@centos rsql]# ./reverse_sql --help
usage: reverse_sql [-h] [-ot ONLY_TABLES [ONLY_TABLES ...]] [-op ONLY_OPERATION] -H MYSQL_HOST -P MYSQL_PORT -u MYSQL_USER -p MYSQL_PASSWD -d MYSQL_DATABASE
[-c MYSQL_CHARSET] --binlog-file BINLOG_FILE [--binlog-pos BINLOG_POS] --start-time ST --end-time ET [--max-workers MAX_WORKERS] [--print] [--replace]
Binlog数据恢复,生成反向SQL语句。
options:
-h, --help show this help message and exit
-ot ONLY_TABLES [ONLY_TABLES ...], --only-tables ONLY_TABLES [ONLY_TABLES ...]
设置要恢复的表,多张表用,逗号分隔
-op ONLY_OPERATION, --only-operation ONLY_OPERATION
设置误操作时的命令(insert/update/delete)
-H MYSQL_HOST, --mysql-host MYSQL_HOST
MySQL主机名
-P MYSQL_PORT, --mysql-port MYSQL_PORT
MySQL端口号
-u MYSQL_USER, --mysql-user MYSQL_USER
MySQL用户名
-p MYSQL_PASSWD, --mysql-passwd MYSQL_PASSWD
MySQL密码
-d MYSQL_DATABASE, --mysql-database MYSQL_DATABASE
MySQL数据库名
-c MYSQL_CHARSET, --mysql-charset MYSQL_CHARSET
MySQL字符集,默认utf8
--binlog-file BINLOG_FILE
Binlog文件
--binlog-pos BINLOG_POS
Binlog位置,默认4
--start-time ST 起始时间
--end-time ET 结束时间
--max-workers MAX_WORKERS
线程数,默认4(并发越高,锁的开销就越大,适当调整并发数)
--print 将解析后的SQL输出到终端
--replace 将update转换为replace操作
Example usage:
shell> ./reverse_sql -ot table1 -op delete -H 192.168.198.239 -P 3336 -u admin -p hechunyang -d hcy \
--binlog-file mysql-bin.000124 --start-time "2023-07-06 10:00:00" --end-time "2023-07-06 22:00:00"
/opt/soft/db/applications/rsql
/opt/soft/db/applications/rsql/reverse_sql --print fff70bb4c940-slow.log
[root@centos data]# tail -100f fff70bb4c940-slow.log
/usr/sbin/mysqld, Version: 8.0.34 (MySQL Community Server - GPL). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 2023-10-19T06:29:46.901696Z
# User@Host: root[root] @ [192.168.3.232] Id: 8
# Query_time: 23.128326 Lock_time: 0.000026 Rows_sent: 1 Rows_examined: 10000000
use d01;
SET timestamp=1697696963;
/* ApplicationName=DataGrip 2020.2.2 */ SELECT * FROM `user` WHERE username='jack1';
> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `yourname`@`%`;
> GRANT SELECT ON `test`.* TO `yourname`@`%`;
shell> awk '/^-- SQL执行时间/{filename = "output" ++count ".sql"; print > filename; next} {print > filename}' test_t1_recover.sql
Docker部署使用
shell> wget https://github.com/hcymysql/reverse_sql/archive/refs/heads/reverse_sql_progress.zip
shell> unzip reverse_sql_progress.zip
shell> cd reverse_sql_progress
shell> vim Dockerfile
FROM centos:7
COPY reverse_sql /root/
RUN chmod 755 /root/reverse_sql
shell> docker build -t reverse_sql .
shell> docker run -itd --name reverse_sql reverse_sql /bin/bash
shell> docker exec -it reverse_sql /root/reverse_sql --help
————————————————
版权声明:本文为CSDN博主「万事俱备,就差一个程序员了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhongguowangzhan/article/details/120758389
mysqlbinlog.exe --no-defaults --base64-output=decode-rows -v mdb385-slow.log > 0x01.txt
https://blog.51cto.com/u_16213705/7286435
https://blog.csdn.net/zhongguowangzhan/article/details/120758389
mysqldumpslow的使用:
比如我们要查询按时间返回前5条日志信息,格式如下:
mysqldumpslow -s t -t 5 /var/log/mysql/slowquery_20170303.log
参数说明:
-s:排序方式 按锁的时间l、返回的记录数r、查询的时间t、记录的次数c,倒序的话可以加r
-t:查询前多少条记录
-g:支持正则表达式,以及忽略大小写
在这里顺便说下explain吧
explain用来分析mysql查询结构的主要关注四个参数值:
type、key、rows、extras
访问类型 type: al最差,ref,eq_ref居中,null最好
all->index->range->ref->eq_ref->const或system->null
有无使用索引 key :key为空没有使用索引
找到所需记录要读取的行数:rows,rows值越小越好
extras:在什么方式下找到了所需记录,出现using filesort或using temporary表明效率低下,only index用到了索引,where used用到了where 过滤条件,impossible where 没用到索引
-----------------------------------
mysqldump 函数 mysqldumpslow用法
https://blog.51cto.com/u_14125/6341722

参考
https://www.cnblogs.com/centos-python/articles/12758920.html
修改Mariadb数据库存储路径及日志路径
https://blog.csdn.net/Stonesaul/article/details/129817495
https://blog.csdn.net/zhiqi_l163991102/article/details/131285385
https://cloud.tencent.com/developer/article/2201237?areaSource=102001.4&traceId=Fcm-6csb11-YRw-V7otva
http://haodro.com/archives/298597
https://blog.csdn.net/qq_34745941/article/details/115486804
https://mp.weixin.qq.com/s/KXE0rEjJyebnnd4cEri6Iw

浙公网安备 33010602011771号