我有一台服务器,/
分区大小为 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
我可以看到大量文件被删除。会是这样吗?
查看您的 innodb_% 变量和数据目录。在其他地方可能还有类似表空间的东西。
如果做不到这一点,请在 mysqldump 运行时使用 du 查看 root 膨胀出现的目录。
好的,我可以通过将 s3bucket 缓存目录
/tmp
从/mnt/mysql-data/tmp
.我几乎不知道它
fuse.s3fs
正在写入,/tmp
并且无法跟踪使用哪个文件正在增长du -h /tmp
我正在运行的代码是
mysqldump --all-databases > /mnt/s3share/backup.sql
s3share 的安装位置,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