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

MySQL:MyISAMテーブルのibdataファイルサイズを削減

    ibdata1とMyISAMは相互に排他的です。

    最初にすべきことは、両方のストレージエンジンを使用するテーブルの数を数えることです。

    SELECT COUNT(1) EngineCount,engine
    FROM information_schema.tables
    WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
    GROUP BY engine;
    

    一部のテーブルがInnoDBの場合:

    InnoDBのクリーンアップを実行する

    MyISAMテーブルのみがあり、InnoDBテーブルがない場合:

    まず、InnoDBDoの痕跡をすべて削除します。

    STEP01)これをmy.cnfに追加します

    [mysqld]
    skip-innodb
    

    STEP02)service mysql restart

    STEP03)rm -f /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile*

    これらの手順の後、次のように各MyISAMテーブルの圧縮を実行できます。

    MyISAMであるテーブルmydb.mytableに対して、次のいずれかを実行します。

    • OPTIMIZE TABLE mydb.mytable;
    • ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;

    すべてのMyISAMテーブルを最適化する場合は、これを行うためのシェルスクリプトを次に示します...

    MYSQL_USER=root
    MYSQL_PASS=rootpassword
    MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
    SQL="SELECT CONCAT('OPTIMIZE TABLE ',table_schema,'.',table_name,';') "
    SQL="${SQL} FROM information_schema.tables "
    SQL="${SQL} WHERE engine='MyISAM' AND table_schema NOT IN "
    SQL="${SQL} ('information_schema','performance_schema','mysql')"
    mysql ${MYSQL_CONN} -ANe"${SQL}" > GlobalMyISAMOptmizeTable.sql
    less GlobalMyISAMOptmizeTable.sql
    

    スクリプトを視覚的に信頼したら、実行するだけです

    mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql
    

    試してみてください!!!

    UPDATE 2012-07-25 09:52 EDT

    MyISAMの圧縮に関する私の提案の1つを明確にしたいと思います

    先ほど言いました

    • OPTIMIZE TABLE mydb.mytable;
    • ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;

    これらのコマンドは機械的に同じです。 OPTIMIZE TABLE MyISAMテーブルのデフラグを実行してから、ANALYZE TABLEを実行します 新しいインデックス統計を計算します。

    機械的に言えば、これはALTER TABLE mydb.mytable ENGINE=MyISAM;です。 する:

    CREATE TABLE mydb.mytabletmp LIKE mydb.mytable;
    INSERT INTO mydb.mytabletmp SELECT * FROM mydb.mytable;
    ALTER TABLE mydb.mytable RENAME mydb.mytablezap;
    ALTER TABLE mydb.mytabletmp RENAME mydb.mytable;
    DROP TABLE mydb.mytablezap;
    


    1. Laravel-テーブルを動的に作成する(移行なし)

    2. フェッチされる前の行の値

    3. T-SQLを使用して外部キー制約を一時的に無効にするにはどうすればよいですか?

    4. PHPでクロスデータベースクエリを作成するにはどうすればよいですか?