从Linux系统磁盘空间不足引发的Zabbix服务器数据库迁移

从Linux系统磁盘空间不足引发的Zabbix服务器数据库迁移,第1张

从Linux系统磁盘空间不足引发的Zabbix服务器数据库迁移

之前没有关注过Zabbix服务器的存储空问题。最近Zabbix警告说根盘空之间缺,我登录Zabbix发现根目录只有1.3MB,怎么办?第一个想法是展开根目录。结果发现没有用LVM,是标准的。我以为可以挽回。就像Windows一样,我删除了D盘和E盘,然后把D盘的空扩展到了C盘。于是我开始 *** 作(注意提前备份虚拟机,最好拍个快照,出了问题还能恢复)。

[root@zabbixserver /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda2       9.8G  9.8G  1.3M  100% / /dev/sda5       6.2G   33M  6.1G    1% /home /dev/sda1       197M  143M   55M   73% /boot


看文件系统,我需要扩展的是sda2,也就是说我需要删除sda3,sda4,sda5来扩展sda2。我发现这个可能性不大,因为需要umount/dev/sda2来扩展sda2,系统盘无法umount,会提示设备忙。看来这个方案被推翻了(因为我只知道这样扩展标准型磁盘。也许还有其他我不知道的好方法。)

[root@zabbixserver /]# fdisk -l 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘标签类型:dos 磁盘标识符:0x0003dc46 设备 Boot      Start         End      Blocks   Id  System /dev/sda1   *        2048      411647      204800   83  Linux /dev/sda2          411648    20891647    10240000   83  Linux /dev/sda3        20891648    29083647     4096000   82  Linux swap / Solaris /dev/sda4        29083648    41943039     6429696    5  Extended /dev/sda5        29085696    41943039     6428672   83  Linux


现在磁盘无法扩展。看来只能检测哪个文件占用空的空间大,然后从这个文件着手解决问题。通过检测到/var/lib/mysql/下的libdata1文件过大,达到了6.7G(检测方法:du-sh/*,然后一步一步),我立刻想到了zabbix的数据库的原因。

[root@zabbixserver mysql]# ls -lh 总用量 6.7G -rw-rw----. 1 mysql mysql  16K 12月  1 14:15 aria_log.00000001 -rw-rw----. 1 mysql mysql   52 12月  1 14:15 aria_log_control -rw-rw----. 1 mysql mysql 6.7G 12月 29 14:24 ibdata1 -rw-rw----. 1 mysql mysql 5.0M 12月 29 14:24 ib_logfile0 -rw-rw----. 1 mysql mysql 5.0M 12月 29 14:21 ib_logfile1 drwx------. 2 mysql mysql 4.0K 11月 16 17:10 mysql srwxrwxrwx  1 mysql mysql    0 12月 29 13:45 mysql.sock drwx------. 2 mysql mysql 4.0K 11月 16 17:10 performance_schema drwx------. 2 mysql mysql 8.0K 11月 16 17:17 zabbix_db


然后Google发现zabbix的数据库有一个共享表空的表模式。随着数据的增长,ibdata1会越来越大,性能也会受到影响。此外,innodb将数据和索引都放在ibdata1下。

共享表之间的模式空:

默认情况下,InnoDB会将InnoDB引擎的所有数据库表数据存储在一个共享的空room:ibdata1中。添加或删除数据库时,ibdata1文件不会自动收缩,单个数据库的备份也会成为问题。通常情况下,只能通过mysqldump导出数据,然后再导入来解决这个问题。

独立表之间的模式空:

优点:
1。每个表都有自己独立的表空。
2。每个表的数据和索引都将存储在自己的table空中。
3。单个表可以在不同的数据库中移动。
4、空可以回收(drop/truncatetable不能自动回收)
5。对于使用独立表空的表,无论怎么删除,空之间的表都是可以回收的。
缺点:
单桌涨幅大于合租空。

结论:
共享表空在插入 *** 作上有一定优势,但不如其他独立表空,只好改成独立表空。启用独立表空时,需要调整参数innodb_open_files。

但是这里还有一个问题,就是即使我们调整了当前的空房间,还是会出现这种情况,因为我们的根目录本身只有10G,后面的数据库比较大,所以还是要调整数据库,把它的存储位置从根目录中去掉,调整到一个独立的table空房间,才能一劳永逸的解决这个问题。

首先给虚拟机添加一个100G的磁盘,然后对磁盘进行分区,将磁盘挂载到/ZabbixDB目录下,备份数据库,将数据库存储位置迁移到ZabbixDB目录下,然后将数据库修改为独立表空模式,再恢复数据库。

1.添加磁盘并格式化。

[root@zabbix_server /]# fdisk /dev/sdb [root@zabbix_server /]# mkfs.xfs -f /dev/sdb1 [root@zabbix_server /]# fdisk -l 磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xabdf27bd 设备 Boot      Start         End      Blocks   Id  System /dev/sdb1            2048   209715199   104856576   83  Linux


2.挂载磁盘并设置启动自动挂载。

[root@zabbix_server /]# mkdir /ZabbixDB [root@zabbix_server /]# mount /dev/sdb1 /ZabbixDB [root@zabbix_server /]# vi /etc/fstab [root@zabbix_server /]# /dev/sdb1 /ZabbixDB xfs default 1 2


3.备份数据库

因为当前数据库比较大,所以我们先来看看哪些表的历史数据比较多。

MariaDB [zabbix_db]> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='zabbix_db'; +----------------------------+---------------+------------+ | table_name                 | total_mb      | table_rows | +----------------------------+---------------+------------+ | events                     |  116.76562500 |     904289 | | history                    |  555.81250000 |    7038124 | | history_uint               | 5674.50000000 |   59219866 | | trends                     |   46.57812500 |     581682 | | trends_uint                |  270.95312500 |    2228048 | +----------------------------+---------------+------------+ 113 rows in set (0.05 sec)


可以看到history和history_uint的历史数据最多。

另外,在trends,trends_uint中有一些数据。

因为数据量大,用普通的方式删除数据基本不可能。

所以我们决定直接使用truncatetable快速清空空这些表的数据,然后使用mysqldump导出数据,删除共享表空之间的数据文件,重新导入数据。

2)停止相关服务,避免写入数据。

[root@zabbix_server /]# systemctl stop zabbix-server [root@zabbix_server /]# systemctl stop httpd


3)清除空历史数据

[root@zabbix_server /]# mysql -uroot -p mysql > use zabbix; Database changed mysql > truncate table history; Query OK, 123981681 rows affected (0.23 sec) mysql > optimize table history; 1 row in set (0.02 sec) mysql > truncate table history_uint; Query OK, 57990562 rows affected (0.12 sec) mysql > optimize table history_uint; 1 row in set (0.03 sec)


4)备份数据库

[root@zabbix_server /]# mysqldump -uroot -p zabbix_db > /home/zabbix_db.sql


5)停止数据库并删除共享表空之间的数据文件

[root@zabbix_server /]# systecmtl stop mariadb [root@zabbix_server /]# cd /var/lib/mysql [root@zabbix_server /]# rm -rf ib*


4.迁移数据库存储位置。

[root@zabbix_server /]# mkdir /ZabbixDB/DB [root@zabbix_server /]# chown -vR mysql:mysql /ZabbixDB/DB [root@zabbix_server /]# chmod -vR 700 /etc/ZabbixDB/DB [root@zabbix_server /]# cp -av /var/lib/mysql* /ZabbixDB/DB [root@zabbix_server /]# vi /etc/my.cnf [mysqld] #可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。 innodb_file_per_table=1 #修改数据库存放目录 datadir=/ZabbixDB/DB/mysql socket=/var/lib/mysql/mysql.sock


重新启动数据库服务

[root@zabbix_server /]# systemctl start mariadb


服务启动后,我们需要检查独立表之间的功能空是否已经正常开启,开启时表示已经开启。

[root@zabbix_server /]#mysql -u root -p MariaDB [(none)]> show variables like '%per_table%'; +-----------------------+-------+ | Variable_name         | Value | +-----------------------+-------+ | innodb_file_per_table | ON    | +-----------------------+-------+ 1 row in set (0.00 sec)


5.恢复数据库

[root@zabbix_server /]# mysqldump -uroot -p zabbix < /data/zabbix_db.sql 或 [root@zabbix_server /]# mysql -uroot -p zabbix < /data/zabbix_db.sql


6.恢复相关服务。

[root@zabbix_server /]# systemctl start zabbix-server [root@zabbix_server /]# systemctl start httpd


此时,当我们在数据库和磁盘空之间进行检查时,会发现数据库已经存储在/zabbixb/db/mysql目录中,而根目录空则恢复正常。

[root@zabbix_server mysql]# pwd /ZabbixDB/DB/mysql [root@zabbix_server mysql]# ls -l 总用量 29712 -rwxrwxrwx. 1 mysql mysql    16384 12月 29 18:16 aria_log.00000001 -rwxrwxrwx. 1 mysql mysql       52 12月 29 18:16 aria_log_control -rwxrwxrwx. 1 mysql mysql     8820 12月 29 16:42 columns_priv.frm -rwxrwxrwx. 1 mysql mysql        0 12月 29 16:42 columns_priv.MYD -rwxrwxrwx. 1 mysql mysql     4096 12月 29 16:42 columns_priv.MYI -rwxrwxrwx. 1 mysql mysql     9582 12月 29 16:42 db.frm -rwxrwxrwx. 1 mysql mysql      880 12月 29 16:42 db.MYD -rwxrwxrwx. 1 mysql mysql     5120 12月 29 16:42 db.MYI


#磁盘之间空

[root@zabbix_server mysql]# df -lh 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda2       9.8G  3.1G  6.8G   31% / /dev/sdb1       100G  1.9G   99G    2% /ZabbixDB


至此,Zabbixdisk空不足,数据库存储位置迁移完成。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/777926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存