Voici une solution de travail complète pour supprimer les informations DEFINER pour MySQL 5.6.xet Linux. (Testé sur CentOS 6.5).
Habituellement, nous devons remplacer les entrées suivantes de Mysql dump (si prises avec les données et les déclencheurs / routines / fonctions).
/*!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`
Le vidage a été effectué avec la commande mysqldump ci-dessous.
mysqldump -uMYSQLUSER -pPASSWORD DATABASENAME -R > dbdump.sql
Le fichier de vidage requis sans informations DEFINER peut être obtenu avec les trois commandes ci-dessous.
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\`@\`%\`//"
Si le fichier de vidage se trouve dans votre dossier actuel, ignorez [PATH /].
Si les données dans les tables sont très volumineuses, effectuez le vidage dans deux fichiers, dans un fichier de vidage, prenez le vidage avec les données et dans un autre fichier de vidage, prenez le vidage des scripts uniquement (Triggers / Fonctions / Procédures.) Et exécutez les trois ci-dessus. commandes sur le 2ème fichier de vidage (scripts).