查看进程

该命令可查看mysql的连接数及执行的命令、链接IP等

-- 只列出前100条
SHOW PROCESSLIST;
-- 全列出
SHOW FULL PROCESSLIST;

查看进程数截图:
file

在表中搜索内容

不知道要搜索的内容在哪个表里,可以批量搜索

-- 搜索所有表中包含的列名,如"name"
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE column_name LIKE '%name%'

-- 搜索zkeco库里,行数超过10行的表
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'zkeco' -- 替换为您的数据库名称
  AND TABLE_ROWS > 10;

占用空间最大的表

统计 MySQL 数据库中各个数据库的大小,降序排序

SELECT 
    table_schema AS 'Database',
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 3) AS 'Size (GB)'
FROM 
    information_schema.tables
GROUP BY 
    table_schema
ORDER BY 
    SUM(data_length + index_length) DESC;

统计 MySQL 数据库中各个表的大小,降序排序

SELECT
    table_schema AS `Database`,
    table_name AS `Table`,
    ROUND(((data_length + index_length) / (1024 * 1024 * 1024)), 2) AS `Size (GB)`
FROM
    information_schema.TABLES
WHERE
    table_schema NOT IN ('information_schema' , 'performance_schema', 'mysql')
ORDER BY (data_length + index_length) DESC
LIMIT 20;

计算每个表的实际占用空间(data_length + index_length)、可用空间(data_free)和碎片率:

SELECT 
    table_schema AS 'Database',
    table_name AS 'Table',
    engine AS 'Engine',
    ROUND(data_length / 1024 / 1024, 2) AS 'Data Size (MB)',
    ROUND(index_length / 1024 / 1024, 2) AS 'Index Size (MB)',
    ROUND(data_free / 1024 / 1024, 2) AS 'Free Space (MB)',
    ROUND((data_length + index_length + data_free) / 1024 / 1024, 2) AS 'Total Size (MB)',
    ROUND(data_free / (data_length + index_length + data_free) * 100, 2) AS 'Fragmentation (%)'
FROM 
    information_schema.tables
WHERE 
    table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND engine = 'InnoDB'
ORDER BY 
    data_free DESC;

对碎片率高的表运行以下命令,以实现:
重建表,整理碎片,释放未使用的空间到文件系统。

OPTIMIZE TABLE your_database.your_table;

查看/设置并发数

并发数是指同一时刻数据库能处理多少个请求。由最大连接数和最大用户数决定。

最大连接数(max_connections):当前数据库的最大连接数,不区分用户。上限是16384
最大用户连接数(max_user_connections):当前数据库用户所能连接的连接数,0为不限制。

但并不是设置越大越好。因为MySQL会为每个连接提供缓冲区,意味着消耗更多的内存。

-- 查看最大连接数
SHOW VARIABLES LIKE '%max_connections%';
-- 设置最大连接数
SET GLOBAL MAX_CONNECTIONS = 1024;

-- 查看用户最大连接数(重启失效。要想永久生效修改配置文件)
SHOW VARIABLES LIKE '%max_user_connections%';
#-- 设置用户最大连接数(重启失效。要想永久生效修改配置文件)
set GLOBAL max_user_connections = 0;

日志保留天数

Mysql数据库由于业务原因,数据量增长迅速,binlog日志会增加较多,占用大部分磁盘空间。
出于节约空间考虑,可进行删除多余binary日志,并设置定期删除操作。
使用以下命令可以控制binlog日志文件保留时间,超过保留时间的binlog日志会被自动删除

-- mysql8.0以下版本查看当前数据库日志binlog保存时效 以天为单位,默认0 永不过期,最多只能设置99天
show variables like 'expire_logs_days';
-- 设置保留天数。(重启失效。要想永久生效修改配置文件)
set global expire_logs_days=60;

通过binlog恢复数据

开启binlog

通过以下命令查看是否开启了binlog

show variables like '%log_bin%';

通过改命令也可以查看binlog的保存位置
file

binlog保存位置

查看当前正在写入的binlog文件
file
在服务器上也能在上述路径汇总找到binlog记录的文件
file

测试恢复文件

修改前的数据:
file
修改后数据:
file
查询要恢复事件的起始位置:

show binlog EVENTS in 'mysql-bin.005105'

可看到起始位置是564结束为止是1163
file

恢复数据

(待补充)

释放磁盘空间

数据库的操作日志(如事务日志)可能会占用大量空间,清理无用数据后并不会立即释放磁盘空间。比如执行的delete命令并不会实际释放mysql的磁盘占用。需要通过其他操作释放空间。

找出哪些表未释放空间

首先通过查询 information_schema 来列出所有数据库和表的空间使用情况。
data_free: 显示未释放的空间。这个值越大,说明表中存在未使用的空间。

SELECT
    table_schema,
    table_name,
    ROUND(data_length / 1024 / 1024 / 1024, 2) AS data_length_gb,
    ROUND(index_length / 1024 / 1024 / 1024, 2) AS index_length_gb,
    ROUND((data_length + index_length) / 1024 / 1024 / 1024, 2) AS total_length_gb,
    ROUND(data_free / 1024 / 1024 / 1024, 2) AS data_free_gb
FROM
    information_schema.tables
ORDER BY
    data_free DESC;

file
比如要释放db_rong360.t_outprd_cust的空间

1. 使用 OPTIMIZE TABLE

OPTIMIZE TABLE 命令可以帮助你回收未使用的空间并重建表。注意,这个命令会锁表。在执行期间无法对这个表的数据进行读写操作。
执行以下 SQL 命令:

OPTIMIZE TABLE db_rong360.t_outprd_cust;

2. 使用 pt-online-schema-change

如果你的表很大,且你希望在不锁定表的情况下优化,可以使用 pt-online-schema-change 工具。执行以下命令:

sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release setup ps80  # 或选择适合的版本
sudo yum install percona-toolkit
# 验证安装
pt-online-schema-change --version

使用工具在线优化表

pt-online-schema-change --alter "ENGINE=InnoDB" D=db_rong360,t=t_outprd_cust --host=数据库地址 --port=3306 --user=用户名 --password=密码
版权所有,转载注明来源