我在mysqlcheck手册中看到,有一个选项可以覆盖那个数据库选项,但是没有很好的解释。
我试图运行mysqlcheck -o,我希望它优化每个数据库中存在的特定表,但只有该表。
**我想我可能不够清楚
我有250个数据库,都包含表api_log。 我想运行一个命令,只会优化表api_log,但在每个数据库的MySQL服务器。
例如:
mysqlcheck -o --tables api_log -A
显然这个特定的代码片段不起作用,但它expression了我想要完成的事情。 我不想优化每个数据库中的每个表,只有一个表存在于所有250个数据库中。
你可以像这样优化单个表:
mysqlcheck -u root -o database_name table_name
比如这个会优化'mysql'数据库的表'user'。
$ mysqlcheck -u root -o mysql user mysql.user OK
编辑
对于有数百个数据库的情况, 你可以像这样编写这个程序
table_name='api_log' mysql -NB -u root -e 'show databases' | while read db_name do if mysql -NB -u root "$db_name" -e 'show tables' | egrep -wq "$table_name"; then echo "Optimizing $db_name.$table_name" mysqlcheck -u root -o "$db_name" "$table_name" fi done
这将跨越所有的数据库,并检查是否有表名为“api_log”,如果它会优化它。