返回顶部
首页 > 资讯 > 数据库 >如何为Zabbix MySQL设置独立表空间innodb_file_per_table
  • 926
分享到

如何为Zabbix MySQL设置独立表空间innodb_file_per_table

2024-04-02 19:04:59 926人浏览 独家记忆
摘要

如何为Zabbix Mysql设置独立表空间innodb_file_per_table,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

如何为Zabbix Mysql设置独立表空间innodb_file_per_table,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一台zabbix监控系统后台使用的mysql DB宕掉,连上Mysql DB server看到硬盘快用满了,发现zabbix使用到的MySQL ibdata1文件有300多G,几乎占据了整个硬盘的空间

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        99G   15G   79G  17% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  8.4M  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1       488M  105M  348M  24% /boot
/dev/sda2       378G  355G  4.1G  99% /data
tmpfs           798M     0  798M   0% /run/user/0
# ll
total 371225844
-rw-r----- 1 mysql mysql        16384 Apr 17 21:42 aria_log.00000001
-rw-r----- 1 mysql mysql           52 Apr 17 21:42 aria_log_control
-rw-rw---- 1 mysql mysql      1224704 Apr 22 22:38 ddl_log.log
-rw-r----- 1 mysql mysql 380123480064 Apr 23 13:20 ibdata1
-rw-r----- 1 mysql mysql      5242880 Apr 23 13:20 ib_logfile0
-rw-r----- 1 mysql mysql      5242880 Apr 23 13:20 ib_logfile1
drwx------ 2 mysql mysql         4096 Apr 17 21:42 mysql
drwx------ 2 mysql mysql         4096 Apr 17 21:42 perfORMance_schema
drwx------ 2 mysql mysql         4096 Apr 22 22:38 zabbix

一看db版本,还是使用的MariaDB 5.5.56

# mysql -V
mysql  Ver 15.1 Distrib 5.5.56-MariaDB, for linux (x86_64) using readline 5.1

这个版本的DB会默认使用共用表空间,估计没有设置独立表空间,查看果然:

MariaDB [(none)]> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF    |
+-----------------------+-------+
1 row in set (0.00 sec)

这里使用了共用表空间,即使对zabbix大表历史数据清理并执行alter table xxx engine=innodb;也无法收缩空间。

临时改善对策:

因为磁盘已满,为了让zabbix监控尽快恢复使用,请用户对server临时增加了一块500G硬盘。把DB数据copy到空间更大的新盘,并重新挂载原来盘为/data1,挂载新盘为原/data

开启DB服务后,zabbix监控恢复正常

永久改善对策:

Zabbix MySQL DB使用磁盘过大,虽然已经设置了清理历史分区数据任务,但监控数据过多导致现有保持策略还是会用满硬盘。上面说到共用表空间使用的ibdata1文件无法回收,只能想办法删除一部分历史数据且改用独立表空间。

思想:将DB数据导出备份(大表只备份近期历史数据),删除原有共用表空间ibdata1文件,修改独立表空间配置,再导入备份数据,修改清理历史分区数据策略。

查zabbix DB中各表使用大小:

select TABLE_NAME,(sum(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024 from information_schema.tables 
where table_schema="zabbix"
GROUP BY TABLE_NAME
ORDER BY 2 DESC
TABLE_NAME (sum(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024 
history_uint 104518.12500000 
history 24653.62500000 
trends_uint 5394.67187500 
events 2808.06250000 
event_recovery 1188.37500000 
trends 1111.68750000 
history_str 200.14062500

1.停止zabbix服务

# systemctl stop zabbix-server

2.导出zabbix DB除两个最大历史表之外基本表结构和数据
# mysqldump -h227.0.0.1 -uroot -p'passWord' --default-character-set=utf8 --databases zabbix -R --ignore-table=zabbix.history --ignore-table=zabbix.history_uint --log-error=zabbix_base.log > zabbix_base.sql

主要参数说明:

-R 导出procedure 和function

--ignore-table 指定不想导出的表名,如果有多个表不想导出就写多个--ignore-table

3.导出zabbix DB history和history_uint 近7天表数据和结构

因为zabbix table中保存的是时间戳,查出时间对应的时间戳

MariaDB [(none)]> select unix_timestamp('2020-4-16');
+-----------------------------+
| unix_timestamp('2020-4-16') |
+-----------------------------+
|                  1586966400 |
+-----------------------------+
1 row in set (0.00 sec)

导出history近7天表数据和结构

# mysqldump -h227.0.0.1 -uroot -p'password' --default-character-set=utf8 --databases zabbix --tables history --where="clock > 1586966400" --log-error=history.log > history.sql

导出history_uint近7天表数据和结构

# mysqldump -h227.0.0.1 -uroot -p'password' --default-character-set=utf8 --databases zabbix --tables history_uint --where="clock > 1586966400" --log-error=history_uint.log > history_uint.sql

4.关闭DB服务

# systemctl stop mariadb.service

5. 修改innodb_file_per_table独立表空间参数

# vi /etc/my.cnf
innodb_file_per_table=1

6.删除ibdata1和日志文件(注:操作之前尽量做好备份)

# rm -rf ibdata1 
# rm -rf ib_logfile0
# rm -rf ib_logfile1

注,删除ibdata1主要为了释放空间,重启DB服务后会自动重建一个空的。删除日志文件是为了避免下面error出现:

[Note] InnoDB: The first innodb_system data file 'ibdata1' did not exist. A new tablespace will be created!
[ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.

7.开启DB服务

# systemctl start mariadb.service

注,开启DB后,ibdata1虽然被删除了,但zabbix DB依然存在,只是DB下面table无法访问了

8. 导入上面备份出来的数据

# mysql -uroot -ppassword -h227.0.0.1 zabbix < zabbix_base.sql
# mysql -uroot -ppassword -h227.0.0.1 zabbix < history.sql
# mysql -uroot -ppassword -h227.0.0.1 zabbix < history_uint.sql

至此,共用表空间改为独立表空间完成,且/data硬盘使用空间大幅收缩(/data1为临时对策时加的盘,为迁移前DB文件大小)

[root@vswhzb01 mysql]# du -sh *
16K     aria_log.00000001
4.0K    aria_log_control
128M    ibdata1
64M     ib_logfile0
5.0M    ib_logfile0_old
64M     ib_logfile1
5.0M    ib_logfile1_old
1016K   mysql
212K    performance_schema
41G     zabbix
[root@vswhzb01 mysql]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        99G   16G   79G  17% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  8.4M  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1       488M  105M  348M  24% /boot
tmpfs           798M     0  798M   0% /run/user/0
/dev/sda2       378G   55G  304G  16% /data
/dev/sdb1       493G  355G  113G  76% /data1

9.开启zabbix服务

# systemctl start mariadb.service

10.最后,记得调整历史分区删除策略,不然监控数据多了硬盘还是会用完

注:zabbix历史分区删除设定可参考之前文章 Http://blog.itpub.net/25583515/viewspace-2638892/

DROP PROCEDURE IF EXISTS zabbix.partition_maintenance_all;
DELIMITER $$ 
CREATE PROCEDURE `partition_maintenance_all`(SCHEMA_NAME VARCHAR(32)) 
BEGIN 
                CALL partition_maintenance(SCHEMA_NAME, 'history', 30, 24, 7); 
                CALL partition_maintenance(SCHEMA_NAME, 'history_log', 30, 24, 7); 
                CALL partition_maintenance(SCHEMA_NAME, 'history_str', 30, 24, 7); 
                CALL partition_maintenance(SCHEMA_NAME, 'history_text', 30, 24, 7); 
                CALL partition_maintenance(SCHEMA_NAME, 'history_uint', 15, 24, 7); 
                CALL partition_maintenance(SCHEMA_NAME, 'trends', 180, 24, 7); 
                CALL partition_maintenance(SCHEMA_NAME, 'trends_uint', 180, 24, 7); 
END$$ 
DELIMITER ;

后续,因为已经使用了独立表空间innodb_file_per_table设定,即使硬盘再次被DB用满,使用drop partition等方式可以释放OS磁盘空间

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 如何为Zabbix MySQL设置独立表空间innodb_file_per_table

本文链接: https://lsjlt.com/news/60307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何为Zabbix MySQL设置独立表空间innodb_file_per_table
    如何为Zabbix MySQL设置独立表空间innodb_file_per_table,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所...
    99+
    2024-04-02
  • InnoDB 引擎独立表空间 innodb_file_per_table
    InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据...
    99+
    2024-04-02
  • MySQL5.6开始可以使用独立表空间, innodb_file_per_table=1
    MySQL5.6开始可以使用独立表空间: ...
    99+
    2024-04-02
  • Mysql InnoDB 共享表空间和独立表空间
    前言:学习mysql的时候总是习惯性的和oracle数据库进行比较。在学习mysql InnoDB的存储结构的时候也免不了跟oracle进行比较。Oracle的数据存储有表空间、段、区、块、数据文件;m...
    99+
    2024-04-02
  • MySQL Innodb独立表空间的配置及优缺点
    这篇文章主要讲解了“MySQL Innodb独立表空间的配置及优缺点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL Innodb独立表空间的配置及...
    99+
    2024-04-02
  • 独立ip空间访问怎么设置
    独立IP空间访问的设置需要根据具体的情况来进行,以下是一些常见的设置步骤:1. 确定需要访问的IP地址:在购买独立IP空间后,需要确...
    99+
    2023-06-11
    独立ip空间 空间
  • 独立ip空间租用怎么设置
    独立IP空间租用需要以下设置:1. 获取IP地址:向网站空间服务提供商(ISP)租用一个或多个IP地址。2. 配置DNS:在DNS服...
    99+
    2023-06-17
    独立ip空间 空间
  • mysql无备份恢复创建独立表空间
    本篇内容主要讲解“mysql无备份恢复创建独立表空间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql无备份恢复创建独立表空间”吧!创建恢复库 点...
    99+
    2024-04-02
  • MySQL中怎么判断InnoDB表是独立表空间还是共享表空间
    MySQL中怎么判断InnoDB表是独立表空间还是共享表空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、独立表空间优缺点1. 优点:(1...
    99+
    2024-04-02
  • 独立ip空间虚拟主机怎么设置
    以下是独立IP空间虚拟主机设置的步骤:1、购买独立IP空间虚拟主机首先需要购买独立IP空间虚拟主机,根据自己的需求和预算选择相应的主...
    99+
    2023-03-15
    独立ip空间虚拟主机 虚拟主机 空间
  • 虚拟主机独立ip空间怎么设置
    您可以按照以下步骤设置虚拟主机独立IP空间:1. 登录您的虚拟主机控制面板。2. 找到“IP地址管理”或“IP地址分配”等相关选项。...
    99+
    2023-06-08
    独立ip空间 空间
  • MySQL判别InnoDB表是独立表空间还是共享表空间的方法详解
    前言 InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file...
    99+
    2024-04-02
  • MySQL innoDB独立表空间和共享表空间的优点和缺点是什么
    本篇文章给大家分享的是有关MySQL innoDB独立表空间和共享表空间的优点和缺点是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • ORACLE如何为索引单独创建表空间
    小编给大家分享一下ORACLE如何为索引单独创建表空间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!       Oracle 数据库的逻辑结构是由...
    99+
    2024-04-02
  • windows bios如何设置独立显卡
    今天小编给大家分享一下windows bios如何设置独立显卡的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。bios设置独立...
    99+
    2023-07-02
  • mysql表空间大小怎么设置
    在MySQL中,表空间大小可以通过以下方式进行设置: 使用ALTER TABLE命令来调整表的存储引擎和表空间大小。例如,可以通过...
    99+
    2024-04-09
    mysql
  • win10如何设置全局独立显卡
    在Windows 10中,你可以通过以下步骤设置全局独立显卡:1.右键点击桌面空白处,选择"NVIDIA 控制面板"(如果你的独立显...
    99+
    2023-09-04
    win10
  • WordPress如何设置独立的Description和Keywords
    本篇内容主要讲解“WordPress如何设置独立的Description和Keywords”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“WordPress如何设...
    99+
    2023-02-22
    wordpress description keywords
  • oracle如何建立用户和表空间
    要在Oracle数据库中建立用户和表空间,可以按照以下步骤操作:1. 登录到Oracle数据库。2. 使用管理员权限的用户(如sys...
    99+
    2023-08-31
    oracle
  • mysql不允许为空如何设置
    在MySQL中,可以通过使用NOT NULL约束来禁止某列为空。在创建表的时候,可以在列的定义中使用NOT NULL关键字来设置该列...
    99+
    2023-08-31
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作