Mysql优化所有数据库中的一个表

Mysql优化所有数据库中的一个表

我在 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”,如果有,它将对其进行优化。

相关内容