使用 MyISAM 优化所有 MySQL 个表

Optimize all MySQL tables using MyISAM

我在这里找到了很棒的文章http://www.empulsegroup.com/?p=342

但是当我尝试时:

root@vps:~# for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; do mysql -e "optimize table $i"; done
ERROR 1046 (3D000) at line 1: No database selected
  1. 你能给我一些使用它的例子吗?
  2. 如何优化 --all-databases?

非常感谢您的宝贵时间。

您使用 -D or --database=... 参数指定要用于 mysql 命令的数据库。

尽管那篇文章中有声明,您可能不需要经常运行 优化table。它确实不会使查询 运行 快得多。

但让我们谈谈您遇到的错误以及如何修复它。

查询的第一行输出不是 table 名称,而是列标题,在本例中是您使用的表达式。

for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; 
do
  echo "$i";
done

输出:

concat(table_schema,".",table_name)
test.m

(我必须创建一个 table m 是 MyISAM,因为我通常不使用 MyISAM,我建议 you should not use MyISAM either。)

如果您想跳过列标题,请使用 -N--skip-column-names 选项。

for i in `mysql -N -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; 
do
  echo "$i";
done

输出:

test.m

您可能还想分隔模式和 table 名称,因为这两个名称都可能是保留字。

for i in `mysql -N -e 'select concat("\`",table_schema,"\`.\`",table_name,"\`") from information_schema.tables where engine="MyISAM"'`; 
do
  echo "$i";
done

输出:

`test`.`m`