サーバーがあり、/
パーティションのサイズは20GBです。
データベースは/mnt/mysql-data
パーティションに保存され、サイズは500GBです。
ここに問題があります。 mysqldump
を実行すると、/
パーティションが100%いっぱいになります。すでにtmpdir
を/mnt/mysql-data/tmp
に移動しました。私のデータベースは全体で約40 GBですが、/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
フォルダーに書き込まれ、そのキャッシュが/tmp
に書き込まれている必要があることを忘れました。これが、理由である可能性があります。 SQLダンプの作成中に/
がいっぱいになります。ただし、バックアップを実行して/tmp
の変更を監視すると、成長が見られません。 /tmp
でlsof
コマンドを実行すると、巨大なファイルが削除されているのがわかります。これでいいの?
OK、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
Innodb_%変数とdatadirを見てください。テーブルスペースのようなものがまだどこかにある可能性があります。
それができない場合は、mysqldumpの実行中にduを使用してルート膨張が発生するディレクトリを確認してください。