¿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?

Respuestas:



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';

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 !!!


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.