Ось повне робоче рішення для видалення інформації про DEFINER для MySQL 5.6.xLinux та LinuxCentOS 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-го дампа (скриптів).