将所有表从 InnoDB 转换为 MyISAM 的更简单方法

cew*_*gil 13 mysql innodb myisam

以前,我使用这个:

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Run Code Online (Sandbox Code Playgroud)

我正在寻找更简单的方法来转换数据库中的所有表,而不是一个一个地写每个表名

Ins*_*yte 11

我不知道在 mysql 本身中有什么方法可以做到这一点,但是一个简单的 shell 脚本可以完成这项工作:

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
Run Code Online (Sandbox Code Playgroud)


Rol*_*DBA 7

您可以使用 MySQL 编写脚本并执行它:

这会将数据库中的每个 InnoDB 表转换dbname为 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}
Run Code Online (Sandbox Code Playgroud)

这会将每个 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}
Run Code Online (Sandbox Code Playgroud)

如果您不想将表的转换复制到 Slaves,只需放在SET SQL_LOG_BIN=0;第一行即可。这样,您可以通过先转换从站然后再转换主站来测试主/从设置中的转换。

这会将数据库中的每个 InnoDB 表转换dbname为 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}
Run Code Online (Sandbox Code Playgroud)

这会将每个 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}
Run Code Online (Sandbox Code Playgroud)

试一试 !!!