我有一台服务器,/
分区大小为 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
答案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
。这允许上传大于临时存储的文件。