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

Я вижу в mysqlcheck руководстве, что существует опция для - таблицы, который переопределяет ту опцию баз данных, но это не хорошо объяснено.

Я пытаюсь выполнить mysqlcheck-o, и я хочу, чтобы он оптимизировал определенную таблицу, которая существует в каждой базе данных, но только той таблице.

** Я думаю, что не мог быть достаточно ясным

У меня есть 250 баз данных, что все содержат таблицу api_log. Я хочу выполнить единственную команду, которая оптимизирует просто таблицу api_log, но на каждой базе данных, которую имеет mysql сервер.

Например:

mysqlcheck -o --tables api_log -A

Очевидно, этот определенный отрывок не будет работать, но он выражает то, что я хотел бы выполнить. Я не хочу оптимизировать каждую таблицу в каждой базе данных, всего одна таблица, которая существует во всех 250 базах данных.

1
задан 10 November 2014 в 08:00
1 ответ

Можно оптимизировать одну таблицу следующим образом :

mysqlcheck -u root -o database_name table_name

т.е. оптимизировать таблицу 'user' базы данных 'mysql'.

$ mysqlcheck -u root -o mysql user 
mysql.user                                         OK

edit

Для случая, когда у вас сотни баз данных; вы можете скриптировать эту процедуру как

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', если оно есть, то вы можете оптимизировать ее.

.
2
ответ дан 3 December 2019 в 21:10

Теги

Похожие вопросы