Cara sederhana untuk mengonversi semua tabel dari InnoDB ke MyISAM

13

Sebelumnya, saya menggunakan ini:

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;

Saya mencari cara yang lebih sederhana untuk mengonversi semua tabel dalam database, daripada menulis setiap nama tabel satu per satu

cewebugil
sumber
1
Lebih sederhana bagaimana? Itu terlihat sangat sederhana bagi saya.
Zoredache
5
Belajar menggunakan skrip untuk mencapai tujuan Anda.
Tom O'Connor

Jawaban:

11

Saya tidak mengetahui cara untuk melakukan ini di mysql sendiri, tetapi skrip shell sederhana akan melakukan pekerjaan:

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
Insyte
sumber
1
cara menonaktifkan pemeriksaan kunci asing?
realtebo
7

Anda dapat menggunakan MySQL untuk membuat skrip dan menjalankannya:

Ini akan mengonversi setiap tabel InnoDB dalam database dbnameke 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}

Ini akan mengonversi setiap tabel InnoDB ke 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}

Jika Anda tidak ingin konversi tabel direplikasi ke Slave, cukup masukkan SET SQL_LOG_BIN=0;sebagai baris pertama. Dengan begitu, Anda dapat menguji konversi dalam pengaturan Master / Slave dengan hanya mengonversi Slave terlebih dahulu dan kemudian Master nanti.

Ini akan mengonversi setiap tabel InnoDB dalam database dbnameke MyISAM dan tidak mereplikasi ke server lain

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}

Ini akan mengonversi setiap tabel InnoDB ke MyISAM dan tidak meniru ke server lain

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}

Cobalah !!!

RolandoMySQLDBA
sumber
Pergi dari MyIsam2InnoDB di dunia nyata Anda mungkin ingin SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; tempat untuk memotong no_zero_date sejak mysql 5.7 - Source stackoverflow.com/questions/9192027/…
Antony Gibbs
Pergi dari MyIsam2InnoDB di dunia nyata Anda mungkin ingin SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; tempat untuk memotong no_zero_date sejak mysql 5.7 - Source stackoverflow.com/questions/9192027/…
Antony Gibbs
0

Bagi mereka yang masih memiliki masalah ini, Anda dapat mengikuti cara ini untuk melakukannya, saya menemukan jawaban ini di situs web. Ini sangat membantu saya:

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

Perbarui usernamedan db_namenilai dengan nilai Anda sendiri.

Setelah menjalankan skrip, itu akan menyimpan file dengan nama: alter.sql Buka file dan jalankan konten pada phpmyadminatau mysqlbaris perintah Anda.

Bersulang!

mayoralito
sumber
-1

Saya lebih suka satu kalimat untuk jenis barang ini. Ini adalah versi satu-baris dari jawaban yang paling diterima.

Ini berfungsi jika Anda memasukkan nama pengguna dan kata sandi MySQL Anda ~/.my.cnf.

D=your_db; for t in $(mysql $D -B -e 'SHOW TABLES'); do mysql $D -e "ALTER TABLE $t ENGINE=MyISAM"; done
kqw
sumber