MySQL DEFINER hell

Leider schafft es mysqldump nicht die DEFINER weg zu lassen.
Dadurch kann man ein Problem mit dem DEFINER bekommen wenn man von einer anderen Maschine einen Dump einspielen will.
DEFINER:

  • DEFINER = `skip-grants user`@`skip-grants host`
  • DEFINER = root@localhost

Dazu kommen DEFINER mit dem Usernamen des Systems.

Außer, im generierten Dump per „suchen & ersetzen“ die DEFINER zu entfernen, gibt es wohl keine Lösung.

Lösung bei AWS funktioniert:

-- remove
sed -i -e 's/DEFINER=`root`@`localhost`//g' dump.sql
sed -i -e 's/DEFINER=`skip-grants user`@`skip-grants host`//g' dump.sql
-- find & replace
sed -i -e 's/DEFINER=`root`@`localhost`/DEFINER=`masteruser`@`%`/g' dump.sql

mysqlpump

Dann gibt es seit 5.6 mysqlpump:

sudo mysqlpump dbname --skip-definer > /home/allapow/dump.sql
# Dump progress: 1/9 tables, 0/719 rows
# mysqlpump: [ERROR] (1449) The user specified as a definer ('skip-grants user'@'skip-grants host') does not exist
# Dump process encountered error and will not continue.
# Speicherzugriffsfehler