如何为数据库中的每个表运行以下命令:
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 选项将使每个文件作为单独的文件存在。这样可以通过删除/恢复问题表而不是所有内容来回收空间。
归档时间: |
|
查看次数: |
13327 次 |
最近记录: |