web-dev-qa-db-ja.com

Magento MySQLデータベースを削除した後、ディスク領域を再利用します

ディスクスペースを再利用する必要があったため、サーバーから古いMagentoデータベースを削除しました。データベースのサイズは約16GBでした。データベースが削除されても、そのディスク領域が実際に解放されなかったことに驚きました。

MySQLサーバーを再起動しようとしましたが、それでもそのスペースを占有しています。

重要な場合、MagentoデータベースはinnoDBをかなり頻繁に使用します。

このディスク容量を取り戻すためにできることはありますか?

5
Josh Pennington

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つのファイルが表示されます。

  • mytable.frm(ストレージエンジンヘッダー)
  • mytable.ibd(mydb.mytableのテーブルデータとテーブルインデックスのホーム)

ibdata1には、InnoDBデータとインデックスが含まれなくなります。

/etc/my.cnfのinnodb_file_per_tableオプションを使用すると、OPTIMIZE TABLE mydb.mytableを実行でき、ファイル/var/lib/mysql/mydb/mytable.ibdは実際に縮小されます。

私はMySQLDBAとしてのキャリアの中でこれを何度も行ってきました

実際、これを初めて行ったとき、50GBのibdata1ファイルを500MBに折りたたんだ。

試してみる。これについてさらに質問がある場合は、私にメールしてください。私を信じて。これは、短期的にも長期的にも機能します。 !!!

8
RolandoMySQLDBA

現在、削除されたInnoDBデータベースが使用するスペースを再利用する唯一の方法は、すべてのデータベースをダンプし、MySQLを停止し、基になるストレージファイルを削除し、MySQLを再起動し、最後にデータベースダンプをインポートすることです。

MySQLのドキュメントには 詳細情報 これについてあります。

1
Michael Hampton