¿Hay algún comando para optimizar todas las tablas de MySQL una por una automáticamente?

8

Ejecuto debajo de la instrucción de línea de comando para optimizar una tabla: optimize table tablename;

¿Hay algún comando o declaración que pueda optimizar todas las tablas una por una de la base de datos seleccionada?

ursitesion
fuente

Respuestas:

14

Usualmente uso mysqlcheck con la combinación --optimize y --databases. mysqlcheck es una interfaz de línea de comandos para que los administradores verifiquen, optimicen y reparen tablas.

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

Aquí está el documento de MySQL: http://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html

Max.

Maxime Fouilleul
fuente
La discusión se trasladó al chat
ursitesion
4

Puede usar el esquema de información para generar las declaraciones que necesita:

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

Puede escribirlo y colocar todas las tablas en una sola línea.

TODAS LAS TABLAS EN LA BASE DE DATOS ACTUAL

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

TODAS LAS TABLAS EN TODAS LAS BASES DE DATOS DEL USUARIO

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

DARLE UNA OPORTUNIDAD !!!

RolandoMySQLDBA
fuente
Esto parece llevar mucho tiempo en mi servidor y no puedo ver un progreso. ¿Puedes agregar alguna salida que tabla está optimizada en el bucle?
rubo77
Adapte su script para optimizar todas las bases de datos para que se ejecute una por una: stackoverflow.com/a/33541722/1069083
rubo77