数据库中所有表的“ALTER table”

Bas*_*ozz 7 mysql

如何为数据库中的每个表运行以下命令:

ALTER table [table_name] type=innodb;
Run Code Online (Sandbox Code Playgroud)

我不想为每个表手动运行它,而是为数据库中的所有表运行它。顺便说一句:如果你对我为什么运行这个感到好奇:http : //bugs.mysql.com/bug.php? id = 1341 & http://bugs.mysql.com/bug.php?id=1287

Zor*_*che 13

假设您在 my.cnf 上设置了凭据和连接信息,这样的命令可能会执行您想要的操作。

mysql --batch --skip-column-names --execute \
'select concat("alter table ",TABLE_SCHEMA,".",TABLE_NAME," type=innodb;") 
 from information_schema.TABLES where TABLE_SCHEMA="database_name"' | mysql
Run Code Online (Sandbox Code Playgroud)

将 database_name 替换为您的数据库名称。

至于你的主要问题。听起来您想在让 innodb 表变大后回收空间。就像错误所说的那样,处理这个问题的唯一安全方法是使用 mysqldump 导出所有内容。删除文件,然后恢复。

正如那篇文章所指出的那样。您可以启用innodb_file_per_table服务器的 my.cnf 选项将使每个文件作为单独的文件存在。这样可以通过删除/恢复问题表而不是所有内容来回收空间。

  • 非常优雅的解决方案。 (2认同)