MySQL Datenbanken einzeln sichern

Möchte man mittels „mysqldump“ die einzelnen Datenbanken einer MySQL-Installation sicheren, so sähe das so für eine Datenbank in etwa so aus:

mysqldump -u root -p<passwort> --result-file=example.sql --databases example

Packt man das nun ein Skript, muss jede Tabelle von Hand in dieses Skript eintragen werden. Allerdings könnte man das ganze auch über den SQL Befehl „SHOW DATABASES“ lösen und das ganze in ein automatisches Skript gießen. Auf der Webseite dev.mensfeld.pl findet man ein solches Skript. Ich habe das ganze kleineren Modifikationen unterzogen (so wird z.B. die „performance_schema“ Tabelle nicht mitgesichert) und auf GitHub zur Verfügung gestellt.

Probleme beim MySQL Dump mit nicht existierenden Nutzern

Unter Linux kann man mittels

mysqldump -u root -p<Passwort> --all-databases --result-file=dump.sql

alle MySQL Datenbanken in eine SQL Datei sichern. Allerdings kann es unter Umständen passieren, das man folgende Meldung bekommt:

mysqldump: Got error: 1449: The user specified as a definer ('u123456789'@'%') does not exist when using LOCK TABLES

Ein Workarround wäre es das ganze mit dem Parameter „–lock-tables=false“ aufzurufen:

mysqldump -u root -p<Passwort> --all-databases --result-file=dump.sql

Allerdings behandelt dies nur die Symptome. Um das Problem zu lösen wird im ersten Schritt der fehlende Nutzer angelegt.

GRANT ALL ON *.* TO 'u123456789'@'%' IDENTIFIED BY 'passwort';

Meist ist ein View oder eine Storaged Procedure in welcher der nicht existierende Nutzer definiert wurde, wie in diesem Beispiel:

ALTER ALGORITHM=UNDEFINED DEFINER=`u123456789`@`%` SQL SECURITY DEFINER VIEW `mana_v_online_chars` AS select `l`.`char_id` AS `char_id`,`l`.`login_date` AS `login_date`,`c`.`user_id` AS `user_id`,`c`.`name` AS `name`,`c`.`gender` AS `gender`,`c`.`level` AS `level`,`c`.`map_id` AS `map_id` from (`mana_online_list` `l` join `mana_characters` `c` on((`l`.`char_id` = `c`.`id`)))

Nachdem der View korrigiert wurde, in dem dort ein gültiger Nutzer angegeben wurde, kann der temporär angelegte Nutzer entfernt werden.

Windows 1.01 testen

Wer schon immer das tiefe und unerklärliche Bedürfnis hatte, Windows in der ersten Version auszuprobieren, der kann dies nun tun. Möglich wird dies mit der Webseite jsmachines.net. Das ganze basiert dabei auf dem unter GPL stehenden PCjs. Dabei handelt es sich um einen IBM PC Emulator, welcher in Javascript geschrieben ist. Der Quelltext soll später auf GitHub zur Verfügung stehen.

Der Windows 1 Emulator in Aktion

Der Windows 1 Emulator in Aktion

Die Windows-Emulation ist neben einigen anderen Emulationen (unter anderem Zork I und DONKEY.BAS) auf der Webseite zu finden.

Probleme mit Themes und Multisite-WordPress

Nachdem ich in einer Multisite-Wordpress Installation das Theme gewechselt hatte, zeigte die entsprechende Seite sowohl im Front- als auch im Backend nur noch eine weiße Seite an. In den PHP Logmeldungen waren auch keine Probleme zu erkennen. Andere Seiten der Installation funktionierten weiterhin ohne Probleme.

Das alte Theme wurde entfernt

Das alte Theme wurde entfernt

Bei einer Multisite-Installation deutet dies meist auf ein Problem mit dem verwendeten Theme hin. Zur Lösung sollte das aktivierte Theme über die Netzwerkverwaltung deinstalliert werden. Anschließend kann man sich wieder in das Backend der Seite einloggen und dort auf ein anderes Theme wechseln.

PHP und date.timezone

Wenn man auf seinem Server in den zu PHP gehörenden Logdateien die Meldung:

PHP message: PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.

findet, sollte man die Variable „date.timezone“ in der „php.ini“ konfigurieren. Für Deutschland würde die Einstellung dabei wie folgt aussehen:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Berlin

Nachdem der PHP-Service neugestartet wurde, gehören diese Warnungen der Vergangenheit an.