Назад | Перейти на главную страницу

Mysql оптимизирует одну таблицу во всех базах данных

Я вижу в руководстве 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», если оно есть, оптимизирует его.