mysqldump 占用大量空间

mysqldump 占用大量空间

我有一台服务器,/分区大小为 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原因。但是,当我运行备份并观察变化时,它没有显示任何增长。但当我执行命令时,我可以看到大量文件被删除。可能是这样吗?//tmplsof/tmp

答案1

查看您的 innodb_% 变量和 datadir。可能在其他地方还有表空间之类的东西。

如果失败,请在 mysqldump 运行时使用 du 查看根膨胀出现的目录。

答案2

好的,我可以通过将 s3bucket 缓存目录从 移动到/tmp来解决这个问题/mnt/mysql-data/tmp

我几乎不知道这fuse.s3fs是在写入/tmp,并且没有办法跟踪哪个文件正在使用du -h /tmp

我运行的代码是mysqldump --all-databases > /mnt/s3share/backup.sql使用 s3share 安装的fuse.s3fs,并且具有缓存目录目标/tmp。这就是我认为mysqldump导致根上所有存储使用量不断增长的原因/

将缓存目录更改为后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

答案3

如果您使用 s3fs 1.88 或更高版本,则默认每 5 GB 将部分文件刷新到 s3fs,通过 控制-o max_dirty_data。这允许上传大于临时存储的文件。

相关内容