Tag Archives: MySQL

WordPress DB Backup & Restore

Das Sichern und Rücksichern einer WordPress Datenbank (MySQL) kommt bei mir nicht jeden Tag vor, daher habe ich die wichtigsten Schritte nachfolgend kurz zusammengefasst:

Datenbanken finden

Die von WordPress verwendete Datenbank kann in der wp-config.php gefunden werden. Um eine Übersicht aller Datenbanken zu erhalten:

1
mysql --user=user_name --password=your_password
1
2
3
4
5
6
7
8
9
10
11
12
SHOW DATABASES;
+--------------------+
| DATABASE           |
+--------------------+
| information_schema |
| wordpress          |
| mysql              |
+--------------------+
3 ROWS IN SET (0.00 sec)
 
quit
Bye

Datenbank sichern

Ist die richtige Datenbank gefunden, kann diese in eine Datei (etwa backup.sql) gesichert werden:

1
2
mysql --user=user_name \
--password=your_password db_name > backup.sql

Datenbank anlegen

Für die Rücksicherung wird eine Datenbank sowie ein neuer Benutzer mit Kennwort entsprechend der wp-config.php angelegt:

1
mysql --user=user_name --password=your_password
1
2
3
4
5
6
7
CREATE DATABASE db_name;
CREATE USER @localhost IDENTIFIED BY 'your_password';
GRANT ALL ON db_name.* TO user_name@localhost;
 
SHOW DATABASES LIKE 'db_name';
SELECT Host, USER FROM mysql.user WHERE USER LIKE 'user_name';
SHOW grants FOR user_name@localhost;

Datenbank zurücksichern

Jetzt kann die Datenbank zurückgesichert werden:

1
2
mysql --user=user_name \
--password=your_password db_name < backup.sql

MySQL Speicherbedarf senken

Kleinere LAMP-Instanzen laufen heute meist in virtuellen Server-Umgebungen, hier ist Speicher knapp bemessen. Mit dem Abschalten der InnoDB Database Engine lässt sich MySQL deutlich abspecken.

Schritt 1 — prüfen ob InnoDB als Engine verwendet wird:

1
2
3
4
5
6
7
8
9
10
$mysql_pass=your_password
mysql -p$mysql_pass -e "select distinct ENGINE FROM information_schema.TABLES"
+--------------------+
| ENGINE             |
+--------------------+
| MEMORY             |
| MyISAM             |
| CSV                |
| PERFORMANCE_SCHEMA |
+--------------------+

Im Beispiel taucht InnoDB nicht auf und kann daher deaktiviert werden.

Schritt 2 — InnoDB deaktivieren

Sollte eine Datenbank InnoDB-Tabellen haben, lässt sich die DB-Engine mit folgende Script auf MyISAM umstellen. (Vorher Backup anlegen!)

1
2
3
4
5
mysql_pass='your_password'
db='your_database'
for t in `mysql -p$mysql_pass --skip-column-names -B -e "select table_name FROM information_schema.TABLES where engine = 'innodb'"`; do
    mysql -p$mysql_pass $db -e "ALTER TABLE $t ENGINE=MYISAM";
done

Schritt 3 — InnoDB deaktivieren

Unter Debian/Ubuntu lässt sich die InnoDB Engine in der Konfigurationsdatei /etc/mysql/my.cnf mit folgenden Zeilen deaktivieren:

1
2
innodb=OFF
default_storage_engine=MyISAM

Schritt 4 — Test

sudo service mysql restart
mysqladmin -u root -p$mysql_pass var | grep have_innodb

#Vorher
| have_innodb        | YES

#Nachher
| have_innodb        | DISABLED

Ergebnis

Munin-memory
Im Chart sind zwei Senkung des für Anwendungen allokierte Speichers (committed) sichtbar.
Die erste Senkung ist auf die oben beschriebene Anpassung der MySQL-Konfiguration zurückzuführen. Die zweite Senkung wurde duch eine Anpassung der Apache Konfiguration verursacht.