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.
Danke für die Tipps!
Es wäre allerdings gut, wenn du weniger Fehler in dem Artikel drin hättest.
(nicht nur Tipp- und Rechtschreibfehler)
Auf welche Fehler genau beziehst du dich?