我在这里找到了很棒的文章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
答案 0 :(得分:1)
使用-D
or --database=...
参数指定要用于mysql
命令的数据库。
答案 1 :(得分:1)
尽管该文章中有声明,但您可能不需要经常运行优化表。它真的不会让查询运行得更快。
但是,让我们谈谈你得到的错误以及如何解决它。
查询的第一行输出不是表名,而是列标题,在本例中是您使用的表达式。
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
(我必须创建一个MyISAM表m
,因为我没有正常使用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
您可能还想分隔架构和表名,因为任一名称都可能是保留字。
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`