Existe-t-il une commande pour optimiser automatiquement toutes les tables MySQL une par une?

8

J'exécute l'instruction de ligne de commande ci-dessous pour optimiser une table: optimize table tablename;

Existe-t-il une commande ou une instruction qui peut optimiser toutes les tables une par une de la base de données sélectionnée?

ursitesion
la source

Réponses:

14

J'utilise habituellement mysqlcheck avec la combinaison --optimize et --databases. mysqlcheck est une interface de ligne de commande permettant aux administrateurs de vérifier, d'optimiser et de réparer les tables.

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

Voici le document MySQL: http://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html

Max.

Maxime Fouilleul
la source
Discussion déplacée vers le chat
ursitesion
4

Vous pouvez utiliser le schéma d'informations pour générer les instructions dont vous avez besoin:

SELECT Concat('OPTIMIZE TABLE ',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES 
   WHERE table_schema='yourdb';
Mihai
la source
1

Vous pouvez l'écrire et placer toutes les tables sur une seule ligne

TOUTES LES TABLES DE LA BASE DE DONNÉES ACTUELLE

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}"

TOUS LES TABLEAUX DANS TOUTES LES BASES DE DONNÉES UTILISATEUR

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}"

ESSAIE !!!

RolandoMySQLDBA
la source
Cela semble prendre beaucoup de temps sur mon serveur et je ne vois aucun progrès. pouvez-vous ajouter une sortie quelle table est optimisée dans la boucle?
rubo77
J'ai adapté votre script pour optimiser toutes les bases de données afin qu'il soit exécuté un par un: stackoverflow.com/a/33541722/1069083
rubo77