Bashscript zur Optimierung der WordPress-Datenbank

veröffentlicht am 02. Juni 2011

Ich versuche, die Plugin-Anzahl meiner WordPress-Installationen möglichst gering zu halten. Trotzdem möchte ich auf bestimmte Funktionen nicht verzichten. Bis vor kurzem hatte ich noch WP-DBManager und WP-Optimize im Einsatz. Die beiden Plugins sind nun rausgeflogen und ich habe mir die Funktionen, die ich von den Plugins benutzt habe, in ein kompaktes Bashscript verpackt und als Cronjob auf meinem Server eingerichtet.

Das Script sollte keinesfalls einfach übernommen, sondern an die eigenen Bedürfnisse angepasst werden. So möchte man z.B. nicht alle ungenehmigten Kommentare automatisch löschen lassen. In dem Fall einfach die entsprechenden Zeilen mit einem Rautezeichen auskommentieren oder löschen. Ich empfehle auch, die Datenbank vor den Optimierungen automatisch sichern zu lassen – man kann nie vorsichtig genug sein.
#! /bin/bash

# Korrekte Parameteranzahl überprüfen
if [ $# -ne 4 ];
then
	echo "Usage: wordpress-cleanup <Database> <Table-Prefix> <Username> <Password>"
	exit 0
fi

# Variablen deklarieren
DATABASE=$1
WPPREFIX=$2
USERNAME=$3
PASSWORD=$4

# MySQL-Queries ausführen
mysql -u$USERNAME -p$PASSWORD $DATABASE <<EOF

	# Revisionen und automatische Speicherungen löschen
	DELETE FROM ${WPPREFIX}posts WHERE post_type=’revision’;

	# Automatisch angelegte Entwürfe löschen
	DELETE FROM ${WPPREFIX}posts WHERE post_type=’auto-draft’;

	# Als Spam markierte Kommentare löschen
	DELETE FROM ${WPPREFIX}comments WHERE comment_approved=’spam’;

	# Kommentare aus dem Papierkorb löschen
	DELETE FROM ${WPPREFIX}comments WHERE comment_approved=’trash’;

	# Nicht genehmigte Kommentare löschen
	DELETE FROM ${WPPREFIX}comments WHERE comment_approved=’0′;

EOF

# Tabellen auslesen
TABLES=`mysql -u$USERNAME -p$PASSWORD $DATABASE -se ‘SHOW TABLES’`

# Tabellen durchgehen
for TABLE in $TABLES;
do

	# Tabellen optimieren
	mysql -u$USERNAME -p$PASSWORD $DATABASE -e "OPTIMIZE TABLE $TABLE" > /dev/null

	# Tabellen reparieren
	mysql -u$USERNAME -p$PASSWORD $DATABASE -e "REPAIR TABLE $TABLE" > /dev/null

done

Wenn ihr noch weitere Optimierungen für die WordPress-Datenbank habt, werde ich die entsprechenden Vorschläge prüfen und ggf. in das Script einpflegen.

Kommentare

Hallo Patrick,

nettes Script hast du dir da zusammengebastelt – gerade der Teil mit den Revisionen killen gefällt mir besonders gut. Ich würde es aber nicht gerade als Cron-Script einbauen.

Ich nutze derzeit automysqlbackup (das Bash-Script) zum Sichern, wo ich als Pre-Command meine Optimierungen mache. Kleiner Tipp wenn du’s versuchst: Nicht die mysql Datenbank (die vom Server selbst) mitsichern, da das nicht sauber geht.

Kommentar #1 von Stargazer am 17. Juni 2011


Also ich habe alle Befehle (optimieren und sichern) in einem Script, wobei ich zuerst sichere und dann optimiere. Die Sicherungen werden 14 Tage lang aufbewahrt, sodass die Optimierung auch per cronjob gemacht wird.

Bei meinem Backup-Script lasse ich nur die Tabelle information_schema nicht mitsichern, da es hierbei zu Fehlermeldungen kommt. Die MySQL-Verwaltunsgtabelle wird zwar mitgesichert (kann auch unter Umständen sinnvoll sein), habe diese aber noch nie wieder eingespielt. Schaden kann die Sicherung auf jeden Fall nicht :)

Kommentar #2 von Patrick am 17. Juni 2011


@Stargazer: Ach du meintest automysqlbackup von Sourceforge. Ich dachte du meintest das Script, das ich selber mal hier veröffentlicht habe.

Kommentar #3 von Patrick am 20. Juni 2011


Hey Patrick!

Cooles Script!

Habe bei mir noch ‚check tables‘ am Anfang eingebaut, weil ich erst checken und dann ggf. reparieren will. Sieht etwa so aus:


TABLES=$(mysql -u$USERNAME -p$PASSWORD $DATABASE 'show tables')
TABLES=$(echo $TABLES|sed -e 's/ /,/g')
if mysql -u$USERNAME -p$PASSWORD $DATABASE -N -s -e "check tables $TABLES extended"|grep -qv OK$; then
echo "checking tables failed"|mail -s '[db-backup]' webadmin@localhost
exit
fi

Läuft übrigens bei mir auch als cron-job und sichert anschließend die gesamte Datenbank.

Kommentar #4 von Bernhard am 08. September 2011


Hinterlasse einen Kommentar