從Linux系統磁碟空間不足引發的Zabbix伺服器資料庫遷移

來源:互聯網
上載者:User

標籤:zabbix資料庫空間不足   ibdata1佔用空間過大   zabbixibdata1佔用空間過大   

        之前一直沒有去關心Zabbbix伺服器儲存空間問題,最近Zabbix警示提示/根目錄磁碟空間不足,於是登入Zabbix看了一下,發現根目錄只有1.3MB了,這怎麼辦了?第一個想到的是擴充根目錄,結果發現不是用的LVM,採用的是標準的,心想也還可以救,就和Windows一樣將D盤、E盤刪除,再將D盤的空間擴充給C盤就OK啊,於是開始著手操作(注意提前備份虛擬機器,最好做一個快照,出問題了好恢複)

[[email protected] /]# 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的,會提示裝置忙。看來這個方案被推翻的(因為我只知道通過這一種方式來進行擴充標準類型的磁碟,也許有其它好的方法我不知道的。)

[[email protected] /]# 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的資料庫的原因。

[[email protected] 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_logfile1drwx------. 2 mysql mysql 4.0K 11月 16 17:10 mysqlsrwxrwxrwx  1 mysql mysql    0 12月 29 13:45 mysql.sockdrwx------. 2 mysql mysql 4.0K 11月 16 17:10 performance_schemadrwx------. 2 mysql mysql 8.0K 11月 16 17:17 zabbix_db


隨後Google發現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、添加磁碟並格式化磁碟

[[email protected]_server /]# fdisk /dev/sdb[[email protected]_server /]# mkfs.xfs -f /dev/sdb1[[email protected]_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、掛載磁碟並設定開機自動掛載

[[email protected]_server /]# mkdir /ZabbixDB[[email protected]_server /]# mount /dev/sdb1 /ZabbixDB[[email protected]_server /]# vi /etc/fstab[[email protected]_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)停止相關服務,避免寫入資料

[[email protected]_server /]# systemctl stop zabbix-server[[email protected]_server /]# systemctl stop httpd


3)清空曆史資料

[[email protected]_server /]# mysql -uroot -pmysql > use zabbix;Database changedmysql > 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)備份資料庫

[[email protected]_server /]# mysqldump -uroot -p zabbix_db > /home/zabbix_db.sql


5)停止資料庫並刪除共用資料表空間資料檔案

[[email protected]_server /]# systecmtl stop mariadb[[email protected]_server /]# cd /var/lib/mysql[[email protected]_server /]# rm -rf ib*


4、遷移資料庫存放位置

[[email protected]_server /]# mkdir /ZabbixDB/DB[[email protected]_server /]# chown -vR mysql:mysql /ZabbixDB/DB[[email protected]_server /]# chmod -vR 700 /etc/ZabbixDB/DB[[email protected]_server /]# cp -av /var/lib/mysql* /ZabbixDB/DB[[email protected]_server /]# vi /etc/my.cnf[mysqld]#可以修改InnoDB為獨立資料表空間模式,每個資料庫的每個表都會產生一個資料空間。innodb_file_per_table=1#修改資料庫存放目錄datadir=/ZabbixDB/DB/mysqlsocket=/var/lib/mysql/mysql.sock


再啟動資料庫服務

[[email protected]_server /]# systemctl start mariadb


啟動服務以後,我們需要檢測一下獨立資料表空間的功能是否已經正常開啟,當為ON時說明已經開啟

[[email protected]_server /]#mysql -u root -pMariaDB [(none)]> show variables like ‘%per_table%‘;+-----------------------+-------+| Variable_name         | Value |+-----------------------+-------+| innodb_file_per_table | ON    |+-----------------------+-------+1 row in set (0.00 sec)


5、還原資料庫

[[email protected]_server /]# mysqldump -uroot -p zabbix < /data/zabbix_db.sql或[[email protected]_server /]# mysql -uroot -p zabbix < /data/zabbix_db.sql


6、恢複相關服務

[[email protected]_server /]# systemctl start zabbix-server[[email protected]_server /]# systemctl start httpd


這時候我們再檢測資料庫及磁碟空間,會探索資料庫已經存放至/ZabbixDB/DB/mysql目錄,而根目錄空間恢複正常了。

[[email protected]_server mysql]# pwd/ZabbixDB/DB/mysql[[email protected]_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


#磁碟空間

[[email protected]_server mysql]# df -lh檔案系統 容量 已用 可用 已用% 掛載點/dev/sda2       9.8G  3.1G  6.8G   31% //dev/sdb1       100G  1.9G   99G    2% /ZabbixDB


至此,Zabbix磁碟空間不足及資料庫儲存位置遷移完成。

本文出自 “系統營運【SystemDevOps】” 部落格,謝絕轉載!

從Linux系統磁碟空間不足引發的Zabbix伺服器資料庫遷移

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.