Gibt es einen Befehl, um alle MySQL-Tabellen einzeln automatisch zu optimieren?

8

Ich führe die folgende Befehlszeilenanweisung aus, um eine Tabelle zu optimieren: optimize table tablename;

Gibt es einen Befehl oder eine Anweisung, mit der alle Tabellen einzeln für die ausgewählte Datenbank optimiert werden können?

ursitesion
quelle

Antworten:

14

Normalerweise verwende ich mysqlcheck mit der Kombination --optimize und --databases. mysqlcheck ist eine Befehlszeilenschnittstelle, mit der Administratoren Tabellen überprüfen, optimieren und reparieren können.

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

Hier ist das MySQL-Dokument: http://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html

Max.

Maxime Fouilleul
quelle
Diskussion verschoben, um zu chatten
ursitesion
4

Sie können das Informationsschema verwenden, um die Anweisungen zu generieren, die Sie benötigen:

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

Sie können ein Skript erstellen und alle Tabellen in einer einzigen Zeile platzieren

ALLE TABELLEN IN DER AKTUELLEN DATENBANK

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

ALLE TABELLEN IN ALLEN BENUTZERDATENBANKEN

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

VERSUCHE ES !!!

RolandoMySQLDBA
quelle
Dies scheint auf meinem Server lange zu dauern und ich kann keinen Fortschritt sehen. Können Sie eine Ausgabe hinzufügen, welche Tabelle in der Schleife optimiert ist?
Rubo77
Ich habe Ihr Skript angepasst, um alle Datenbanken so zu optimieren, dass es einzeln
ausgeführt wird