zabbix经过长时间的运行导致ibdata1文件的数据持续增加,mysql之前是没有配置表空间,InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,久而久之给后续的维护带来障碍
| 表结构 |
含义 |
| history |
历史监控记录,存放数值(int)类型的的监控采集结果相关主要字段含义 |
| history_text |
历史监控记录,存放字符无限制长度的监控采集结果 |
| history_uint |
存放非整形的历史监控信息 |
查看文件大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [root@zabbix ~] -rw-rw---- 1 mysql mysql 39G Mar 23 15:26 /var/lib/mysql/ibdata1
&查看表数据,基本也就是history的数据比较多,可以选择清空 MariaDB [zabbix]> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='zabbix'; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 30574 Current database: zabbix +----------------------------+--------------+------------+ | table_name | total_mb | table_rows | +----------------------------+--------------+------------+ | history | 977.00000000 | 12077740 | | history_log | 0.03125000 | 0 | | history_str | 37.56250000 | 265294 | | history_text | 21.14062500 | 195417 | | history_uint | 563.85937500 | 6866603 |
|
停止zabbix主服务,清理表数据
完全清理历史数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| &我是用docker启动的 [root@zabbix zabbix] [root@zabbix ~] Enter password: &清理表数据 MariaDB > truncate table history; Query OK, 2423866533 rows affected (0.23 sec) &优化表重新组织表数据和相关索引数据的物理存储 MariaDB > optimize table history; 1 row in set (0.02 sec) MariaDB > truncate table history_uint; Query OK, 752790562 rows affected (0.12 sec) MariaDB > optimize table history_uint; 1 row in set (0.03 sec)
|
筛选日期清理历史数据,按照表结构clock字段时间戳
时间:2023-02-27 14:29:02 时间戳:1677479342
1 2 3
| &清理小于2月27之前的数据 MariaDB [(none)]> DELETE FROM history WHERE clock < 1677479342; MariaDB [(none)]> DELETE FROM history_uint WHERE clock < 1677479342;
|
备份原数据,删除ibdata1文件,配置独立表空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| &备份数据 [root@zabbix ~] &停止数据库 [root@zabbix ~] &移动文件到临时目录 [root@zabbix ~] [root@zabbix ~] &配置参数 [root@zabbix ~] [mysqld] innodb_file_per_table=1 &启动mysql [root@zabbix ~] &查看配置已生效 MariaDB [(none)]> show variables like '%per_table%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+
|
恢复数据
我这里的版本为5.5.68-MariaDB,使用mysqldump恢复时报错
1 2 3
| &(1) mysqldump: Got error: 1146: Table XXXXXXXXX‘ doesn‘t exist when using LOCK TABLES 删除/var/lib/mysql/zabbix/所有.frm文件
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| &(2) *mysqldump导入后无效 mysqldump -uroot -p zabbix < zabbix.sql *增加--database参数正常 mysqldump -uroot -p --database zabbix < zabbix.sql *还有一种source文件导入 [root@zabbix ~] MariaDB [(none)]> use zabbix;
Database changed MariaDB [zabbix]> source /root/zabbix.sql Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)
|
启动zabbix
1 2 3 4 5 6
| &我是用docker启动的 [root@zabbix zabbix] &ibdata1文件大小已下降 [root@zabbix zabbix] [root@zabbix mysql] -rw-rw---- 1 mysql mysql 18M Mar 27 15:04 ibdata1
|