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


13

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

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;

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


1
より簡単な方法は?それは私にはとても簡単に見えます。
ゾレダチェ

5
スクリプトを使用して目標を達成する方法を学びます。
トム・オコナー

回答:


11

私は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

1
外部キーチェックを無効にする方法
-realtebo

7

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

これにより、データベース内のすべてのInnoDBテーブルがdbnameMyISAMに変換されます

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;、最初の行として入力してください。この方法では、最初にスレーブのみを変換し、その後マスターを変換することにより、マスター/スレーブ設定で変換をテストできます。

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

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}

試してみる !!!


あなたはおそらくたいと思う現実の世界でMyIsam2InnoDBから行くSET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; どこかのMySQL 5.7以降NO_ZERO_DATEバイパスへ-ソースstackoverflow.com/questions/9192027/...
アントニーギブス

あなたはおそらくたいと思う現実の世界でMyIsam2InnoDBから行くSET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; どこかのMySQL 5.7以降NO_ZERO_DATEバイパスへ-ソースstackoverflow.com/questions/9192027/...
アントニーギブス

0

まだこの問題を抱えている人のために、あなたはそれを行うためにこの方法に従うことができます、私はウェブサイトでこの答えを見つけました。それは私を大いに助けます:

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

アップデート usernamedb_name独自の値を持つ値。

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

乾杯!


-1

私はこの種のものにワンライナーを好む。これは、最も受け入れられている回答の1行版です。

これは、MySQLのユーザー名とパスワードがに設定されている場合に機能します~/.my.cnf

D=your_db; for t in $(mysql $D -B -e 'SHOW TABLES'); do mysql $D -e "ALTER TABLE $t ENGINE=MyISAM"; done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.