Я вижу в руководстве mysqlcheck, что есть опция для --tables, которая переопределяет эту опцию базы данных, но это не очень хорошо объяснено.
Я пытаюсь запустить mysqlcheck -o, и я хочу, чтобы он оптимизировал конкретную таблицу, которая существует в каждой базе данных, но только в этой таблице.
** Думаю, я недостаточно ясно выразился
У меня 250 баз данных, каждая из которых содержит таблицу api_log. Я хочу запустить одну команду, которая оптимизирует только таблицу api_log, но для каждой базы данных, которая есть на сервере mysql.
Например:
mysqlcheck -o --tables api_log -A
Очевидно, этот конкретный фрагмент не будет работать, но он выражает то, чего я хотел бы достичь. Я не хочу оптимизировать каждую таблицу в каждой базе данных, только одну таблицу, которая существует во всех 250 базах данных.
Вы можете оптимизировать одну таблицу следующим образом:
mysqlcheck -u root -o имя_базы_данных имя_таблицы
например этот оптимизирует таблицу user базы данных mysql.
$ 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», если оно есть, оптимизирует его.