sql >> データベース >  >> RDS >> Mysql

MySQLでibdata1ファイルを縮小/パージする方法

    そのibdata1 縮小しないことは、MySQLの特に厄介な機能です。 ibdata1 すべてのデータベースを削除し、ファイルを削除してダンプをリロードしない限り、ファイルを実際に縮小することはできません。

    ただし、インデックスを含む各テーブルが個別のファイルとして保存されるようにMySQLを構成できます。そのようにしてibdata1 大きくなることはありません。 BillKarwinのコメントによると これは、MySQLのバージョン5.6.6以降でデフォルトで有効になっています。

    少し前にやった。ただし、テーブルごとに個別のファイルを使用するようにサーバーを設定するには、my.cnfを変更する必要があります。 これを有効にするには:

    [mysqld]
    innodb_file_per_table=1
    

    https://dev.mysql .com / doc / refman / 5.6 / en / innodb-file-per-table-tablespaces.html

    ibdata1からスペースを再利用したい場合 実際にファイルを削除する必要があります:

    1. mysqldumpを実行します mysqlを除くすべてのデータベース、プロシージャ、トリガーなどの およびperformance_schema データベース
    2. すべてのデータベースを削除します上記の2つのデータベースを除く
    3. mysqlを停止します
    4. ibdata1を削除します およびib_log ファイル
    5. mysqlを起動します
    6. ダンプから復元

    手順5でMySQLを起動すると、ibdata1 およびib_log ファイルが再作成されます。

    今、あなたは行く準備ができています。分析用の新しいデータベースを作成すると、テーブルは別のibd*に配置されます。 ibdata1にないファイル 。通常、データベースをすぐに削除するため、ibd* ファイルは削除されます。

    http://dev.mysql.com/doc/refman /5.1/en/drop-database.html

    あなたはおそらくこれを見たことがあるでしょう:
    http://bugs.mysql.com /bug.php?id=1341

    コマンドALTER TABLE <tablename> ENGINE=innodbを使用する またはOPTIMIZE TABLE <tablename> ibdata1からデータとインデックスページを抽出して、ファイルを分離することができます。ただし、上記の手順を実行しない限り、ibdata1は縮小されません。

    information_schemaについて 、それは必要ではなく、ドロップすることもできません。実際には、テーブルではなく、読み取り専用ビューの集まりにすぎません。そして、それらに関連付けられたファイルはなく、データベースディレクトリもありません。 informations_schema はメモリdb-engineを使用しており、mysqldの停止/再起動時にドロップおよび再生成されます。 https://dev.mysql.com/doc/を参照してくださいrefman / 5.7 / en / information-schema.html



    1. SQLコマンド

    2. byte []をC#からSQLServerデータベースに保存します

    3. コマンドラインを使用してデータベースをインポートする方法

    4. 制限を超えると、主キーIDはどうなりますか?