Вот полное рабочее решение для удаления информации DEFINER для MySQL 5.6.x
Linux и (протестировано CentOS 6.5
).
Обычно мы должны заменить следующие записи из дампа Mysql (если они взяты вместе с данными и триггерами / подпрограммами / функциями).
/*!50013 DEFINER=`MYSQLUSER`@`localhost` SQL SECURITY DEFINER */
/*!50013 DEFINER=`MYSQLUSER`@`%` SQL SECURITY DEFINER */
CREATE DEFINER=`MYSQLUSER`@`%` PROCEDURE `PROCEDURENAME`(
CREATE DEFINER=`MYSQLUSER`@`localhost` PROCEDURE `PROCEDURENAME`(
CREATE DEFINER=`MYSQLUSER`@`%` FUNCTION `FUNCTIONNAME`(
CREATE DEFINER=`MYSQLUSER`@`localhost` FUNCTION `FUNCTIONNAME`(
/*!50003 CREATE*/ /*!50017 DEFINER=`MYSQLUSER`@`%`*/ /*!50003 TRIGGER `TRIGGERNAME`
/*!50003 CREATE*/ /*!50017 DEFINER=`MYSQLUSER`@`localhost`*/ /*!50003 TRIGGER `TRIGGERNAME`
Дамп был получен с помощью следующей команды mysqldump.
mysqldump -uMYSQLUSER -pPASSWORD DATABASENAME -R > dbdump.sql
Требуемый файл дампа без информации DEFINER можно получить с помощью следующих трех команд.
Command-1
sed -i 's|DEFINER=[^*]*\*|\*|g' [PATH/]dbdump.sql
Command-2
find -name [PATH/]dbdump.sql | xargs perl -pi -e "s/ DEFINER=\`MYSQLUSER\`@\`localhost\`//"
Command-3
find -name [PATH/]dbdump.sql | xargs perl -pi -e "s/ DEFINER=\`MYSQLUSER\`@\`%\`//"
Если файл дампа находится в вашей текущей папке, игнорируйте [PATH /].
Если данные в таблицах очень большие, возьмите дамп в двух файлах, в одном файле дампа возьмите дамп с данными, а в другом файле дампа возьмите дамп только сценариев (триггеры / функции / процедуры.) И запустите три вышеуказанных команды на 2-м файле дампа (скриптов).