设为首页 收藏本站
查看: 1211|回复: 0

[经验分享] 从Linux系统磁盘空间不足引发的Zabbix服务器数据库迁移

[复制链接]

尚未签到

发表于 2019-1-25 07:49:39 | 显示全部楼层 |阅读模式
          之前一直没有去关心Zabbbix服务器存储空间问题,最近Zabbix报警提示/根目录磁盘空间不足,于是登录Zabbix看了一下,发现根目录只有1.3MB了,这怎么办了?第一个想到的是扩展根目录,结果发现不是用的LVM,采用的是标准的,心想也还可以救,就和Windows一样将D盘、E盘删除,再将D盘的空间扩展给C盘就OK啊,于是开始着手操作(注意提前备份虚拟机,最好做一个快照,出问题了好恢复)
[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,发现这是不太可能的,因为需要扩展sda2需要umount /dev/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  

  随后谷歌发现zabbix的数据库它的表模式是共享表空间模式,随着数据增长ibdata1会越来越大,性能方面也会有影响,而且innodb把数据和索引都放在ibdata1下。
  共享表空间模式:
  InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,增删数据库的时候ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。
  独立表空间模式:
  优点:   
1、每个表都有自已独立的表空间。     
2、每个表的数据和索引都会存在自已的表空间中。     
3、可以实现单表在不同的数据库中移动。     
4、空间可以回收(drop/truncate table方式操作表空间不能自动回收)  
5、对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。     
缺点:     
单表增加比共享空间方式更大。
  结论:     
共享表空间在Insert操作上有一些优势,但在其它都没独立表空间表现好,所以我们要改成独立表空间。当启用独立表空间时,需要调整innodb_open_files参数。
  但是这里还有一个问题,就是就算我们将现在的空间调整出来了,但是因为我们的根目录本身只有10G,后面数据库大了,还是会出现这种情况,所以我们还是得调整数据库,将它存放的位置移除根目录,同时调整为独立表空间,来一劳永逸的解决这个问题。
  首先先在虚拟机上添加一个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中也存在一些数据。
  由于数据量太大,按照普通的方式delete数据的话基本上不太可能。
  所以决定直接采用truncate table的方式来快速清空这些表的数据,再使用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  

  启动服务以后,我们需要检测一下独立表空间的功能是否已经正常开启,当为ON时说明已经开启
[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  

  这时候我们再检测数据库及磁盘空间,会发现数据库已经存放至/ZabbixDB/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  

  至此,Zabbix磁盘空间不足及数据库存储位置迁移完成。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-667191-1-1.html 上篇帖子: zabbix之微信企业号报警 下篇帖子: centos 安装部署 zabbix3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表