我在 mysqlcheck 手册中看到,有一个 --tables 选项可以覆盖该数据库选项,但是没有很好地解释。
我正在尝试运行 mysqlcheck -o 并且希望它优化每个数据库中都存在的特定表,但仅限于该表。
**我想我可能表达得不够清楚
我有 250 个数据库,它们都包含表 api_log。我想运行一个命令,该命令将只优化表 api_log,但针对 mysql 服务器拥有的每个数据库。
例如:
mysqlcheck -o --tables api_log -A
显然,这个特定的代码片段不起作用,但它表达了我想要实现的目标。我不想优化每个数据库中的每个表,只想优化所有 250 个数据库中存在的一个表。
答案1
您可以像这样优化单个表:
mysqlcheck -u root -o 数据库名称 表名称
例如,这个将优化'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”,如果有,它将对其进行优化。