web-dev-qa-db-ja.com

すべてのテーブルをInnoDBからMyISAMに変換する簡単な方法

以前は、これを使用します:

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;

すべてのテーブル名を1つずつ書き込むのではなく、データベース内のすべてのテーブルを変換する簡単な方法を探しています

13
cewebugil

私はmysql自体でこれを行う方法を認識していませんが、単純なシェルスクリプトで機能します。

TABLES=$(mysql -pXXXXXXX -uXXXXXXX --skip-column-names -B -D $DB -e 'show tables')
for T in $TABLES
do
    mysql -pXXXXX -uXXXXX -D $DB -e "ALTER TABLE $T ENGINE=MYISAM"
done
11
Insyte

MySQLを使用して、スクリプトを作成して実行できます。

これはデータベースdbname内のすべてのInnoDBテーブルをMyISAMに変換します

CONVERT_SCRIPT=Convert_dbname_InnoDB_to_MyISAM.sql
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE table_schema='dbname' AND engine='InnoDB';" > ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

これにより、すべてのInnoDBテーブルがMyISAMに変換されます

CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" > ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

テーブルの変換をスレーブに複製したくない場合は、SET SQL_LOG_BIN=0;を最初の行として。このようにして、最初にスレーブのみを変換し、次にマスターを後で変換することにより、マスター/スレーブ設定で変換をテストできます。

これにより、データベースdbnameのすべてのInnoDBテーブルがMyISAMに変換され、他のサーバーには複製されません

CONVERT_SCRIPT=Convert_dbname_InnoDB_to_MyISAM.sql
echo "SET SQL_LOG_BIN=0;" > ${CONVERT_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE table_schema='dbname' AND engine='InnoDB';" >> ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

これにより、すべてのInnoDBテーブルがMyISAMに変換され、他のサーバーには複製されません

CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
echo "SET SQL_LOG_BIN=0;" > ${CONVERT_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" >> ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

試してみる !!!

7
RolandoMySQLDBA

この問題が解決しない場合は、この方法で実行できます。この回答はWebサイトで見つかりました。それは私に大いに役立ちます:

Shell> mysql -u username -p -e "SELECT concat('ALTER TABLE ', TABLE_NAME,' ENGINE=MYISAM;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE'" | tail -n+2 >> alter.sql

usernameおよびdb_nameの値を独自の値で更新します。

スクリプトを実行すると、次の名前でファイルが保存されます:alter.sqlファイルを開き、phpmyadminまたはmysqlコマンドラインでコンテンツを実行します。

乾杯!

0
mayoralito