Berikut adalah solusi kerja lengkap untuk menghapus informasi DEFINER untuk MySQL 5.6.x
dan Linux. (Diuji pada CentOS 6.5
).
Biasanya kita harus mengganti entri berikut dari Mysql dump (jika diambil bersama dengan data dan pemicu / rutinitas / fungsi).
/*!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`
Dump diambil dengan perintah di bawah mysqldump.
mysqldump -uMYSQLUSER -pPASSWORD DATABASENAME -R > dbdump.sql
File dump yang diperlukan tanpa informasi DEFINER dapat diperoleh dengan tiga perintah di bawah ini.
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\`@\`%\`//"
Jika file dump ada di folder Anda saat ini, abaikan [PATH /].
Jika data dalam tabel sangat besar maka ambil dump dalam dua file, di satu file dump ambil dump dengan data dan di file dump lainnya hanya mengambil dump dari skrip (Pemicu / Functions / Prosedur.) Dan menjalankan tiga di atas perintah pada file dump (skrip) ke-2.