Есть ли какая-нибудь команда для оптимизации всех таблиц MySQL по одной автоматически?

8

Я выполняю ниже оператор командной строки, чтобы оптимизировать таблицу: optimize table tablename;

Существует ли какая-либо команда или оператор, который может оптимизировать все таблицы одну за другой выбранной базы данных?

ursitesion
источник

Ответы:

14

Я обычно использую mysqlcheck с комбинацией --optimize и --databases. mysqlcheck - это интерфейс командной строки для администраторов для проверки, оптимизации и исправления таблиц.

mysqlcheck -uroot -p --optimize --databases myDatabase

Вот документация по MySQL: http://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html

Максимум.

Максим Фуйе
источник
Обсуждение перенесено в чат
ursitesion
4

Вы можете использовать информационную схему для генерации необходимых операторов:

SELECT Concat('OPTIMIZE TABLE ',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES 
   WHERE table_schema='yourdb';
Михай
источник
1

Вы можете написать скрипт и поместить все таблицы в одну строку

ВСЕ ТАБЛИЦЫ В ТЕКУЩЕЙ БАЗЕ ДАННЫХ

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQL_DATA=mydb
TBLLIST=""
COMMA=""
SQL="SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE()"
for TBL in `mysql ${MYSQL_CONN} -D${MYSQL_DATA} -ANe"${SQL}"`
do
    TBLLIST="${TBLLIST}${COMMA}${TBL}"
    COMMA=","
done
SQL="OPTIMIZE TABLE ${TBLLIST};"
mysql ${MYSQL_CONN} -D${MYSQL_DATA} -ANe"${SQL}"

ВСЕ ТАБЛИЦЫ В ВСЕХ БАЗАХ ПОЛЬЗОВАТЕЛЕЙ

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
TBLLIST=""
COMMA=""
SQL="SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE"
SQL="${SQL} table_schema NOT IN ('information_schema','mysql','performance_schema')"
for DBTB in `mysql ${MYSQL_CONN} -ANe"${SQL}"`
do
    TBLLIST="${TBLLIST}${COMMA}${DBTB}"
    COMMA=","
done
SQL="OPTIMIZE TABLE ${TBLLIST};"
set -x
mysql ${MYSQL_CONN} -ANe"${SQL}"

ДАЙТЕ ЭТО ПОПРОБУЙТЕ !!!

RolandoMySQLDBA
источник
Кажется, это занимает много времени на моем сервере, и я не вижу прогресса. Можете ли вы добавить вывод, какая таблица оптимизирована в цикле?
rubo77
Я адаптировал ваш сценарий для оптимизации всех баз данных, чтобы он запускался один за другим: stackoverflow.com/a/33541722/1069083
rubo77