Mysql

mysqldump 佔用大量空間

  • April 30, 2020

我有一台伺服器,/分區大小為 20GB。

數據庫儲存在/mnt/mysql-data大小為 500GB 的分區中。

現在問題來了。每當我執行mysqldump它時,它都會將分區填充/到 100%。我已經tmpdir/mnt/mysql-data/tmp. 我的數據庫總共大約 40GB,現在我想備份它們,/mnt/mysql-data/backups但我無法繼續,因為/分區已滿 100%。我的 mysqldump 命令是:mysqldump --all-databases > /mnt/s3share/backup.sql";

伺服器詳情:

  • 10.2.22-MariaDB-log MariaDB 伺服器
  • CentOS Linux 版本 7.7.1908(核心)
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  217M  7.6G   3% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/xvda2       24G  2.4G   20G  11% /
/dev/xvda1      976M  168M  757M  19% /boot
tmpfs           1.6G     0  1.6G   0% /run/user/1000
/dev/xvdc1      500G  123G  378G  25% /mnt/mysql-data
tmpfs           1.6G     0  1.6G   0% /run/user/1001
MariaDB [db_inbox]> show global variables like "%tmp%";
+----------------------------+----------------------+  
| Variable_name              | Value                |  
+----------------------------+----------------------+  
| default_tmp_storage_engine |                      |  
| encrypt_tmp_disk_tables    | OFF                  |  
| encrypt_tmp_files          | OFF                  |  
| innodb_tmpdir              |                      |  
| max_tmp_tables             | 32                   |  
| slave_load_tmpdir          | /mnt/mysql-data/tmp  |  
| tmp_disk_table_size        | 18446744073709551615 |  
| tmp_memory_table_size      | 16777216             |  
| tmp_table_size             | 16777216             |  
| tmpdir                     | /mnt/mysql-data/tmp  |  
+----------------------------+----------------------+  
10 rows in set (0.00 sec)                              

更新#1:

我忘了提到*.sql備份正在寫入/mnt/s3share/backups/安裝的文件夾,s3fs並且它的記憶體必須寫入,這可能是在創建 sql 轉儲時被填滿/tmp的原因。/但是,當我執行備份並觀察/tmp變化時,它沒有顯示任何增長。但是當我執行lsof命令時,/tmp我可以看到大量文件被刪除。會是這樣嗎?

好的,我可以通過將 s3bucket 記憶體目錄/tmp/mnt/mysql-data/tmp.

我幾乎不知道它fuse.s3fs正在寫入,/tmp並且無法跟踪使用哪個文件正在增長du -h /tmp

我正在執行的程式碼是mysqldump --all-databases > /mnt/s3share/backup.sqls3share 的安裝位置,fuse.s3fs並且有一個記憶體目錄定位/tmp。這就是為什麼我認為mysqldump導致 root 上所有不斷增長的儲存使用/

將記憶體目錄更改為 後fuse.s3fs/mnt/mysql-data/tmp問題就解決了。

這是我之前的安裝命令/tmp

datastore /mnt/s3share fuse _netdev,allow_other,use_cache=/tmp,passwd_file=$PASSWDFILE 0 0

那麼這是新的安裝命令/mnt/mysql-data/tmp

datastore /mnt/s3share fuse _netdev,allow_other,use_cache=/mnt/mysql-data/tmp,passwd_file=$PASSWDFILE 0 0

查看您的 innodb_% 變數和數據目錄。在其他地方可能還有類似表空間的東西。

如果做不到這一點,請在 mysqldump 執行時使用 du 查看 root 膨脹出現的目錄。

引用自:https://serverfault.com/questions/1013129