ディスクスペースを再利用する必要があったため、サーバーから古いMagentoデータベースを削除しました。データベースのサイズは約16GBでした。データベースが削除されても、そのディスク領域が実際に解放されなかったことに驚きました。
MySQLサーバーを再起動しようとしましたが、それでもそのスペースを占有しています。
重要な場合、MagentoデータベースはinnoDBをかなり頻繁に使用します。
このディスク容量を取り戻すためにできることはありますか?
StackOverflowでInnoDBのクリーンアップ手順を作成しました
https://stackoverflow.com/a/4056261/491757 (2010年10月29日)
ここにあります
Ibdata1を一度だけ縮小するには、次の手順を実行する必要があります。
1)MySQLDumpすべてのデータベースをSQLテキストファイル(SQLData.sqlと呼びます)
2)すべてのデータベースを削除します(mysqlスキーマを除く)
3)mysqlをシャットダウンします
4)/etc/my.cnfに次の行を追加します
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
補足:innodb_buffer_pool_sizeの設定が何であれ、 innodb_log_file_size がinnodb_buffer_pool_sizeの25%であることを確認してください。
5)ibdata1、ib_logfile0、およびib_logfile1を削除します
この時点では、/ var/lib/mysqlにはmysqlスキーマのみが存在するはずです。
6)mysqlを再起動します
これにより、ibdata1が10MBで、ib_logfile0とib_logfile1がそれぞれ1Gで再作成されます。
7)SQLData.sqlをmysqlにリロードします
ibdata1は大きくなりますが、テーブルのメタデータのみが含まれます
各InnoDBテーブルはibdata1の外部に存在します
Mydb.mytableという名前のInnoDBテーブルがあるとします。/var/lib/mysql/mydbに移動すると、テーブルを表す2つのファイルが表示されます。
ibdata1には、InnoDBデータとインデックスが含まれなくなります。
/etc/my.cnfのinnodb_file_per_tableオプションを使用すると、OPTIMIZE TABLE mydb.mytableを実行でき、ファイル/var/lib/mysql/mydb/mytable.ibdは実際に縮小されます。
私はMySQLDBAとしてのキャリアの中でこれを何度も行ってきました
実際、これを初めて行ったとき、50GBのibdata1ファイルを500MBに折りたたんだ。
試してみる。これについてさらに質問がある場合は、私にメールしてください。私を信じて。これは、短期的にも長期的にも機能します。 !!!
現在、削除されたInnoDBデータベースが使用するスペースを再利用する唯一の方法は、すべてのデータベースをダンプし、MySQLを停止し、基になるストレージファイルを削除し、MySQLを再起動し、最後にデータベースダンプをインポートすることです。
MySQLのドキュメントには 詳細情報 これについてあります。