问题:如何从我的开发系统导出数据库内容(包括触发器)并将数据导入到活动服务器,而不会在触发器触发时运行到错误1449 ?对不同用户使用触发器(MySQL错误1449)
在最近的一个php项目中,我广泛使用了mysql触发器,但是在从开发部署我的数据库到实时系统时遇到了一个问题。
E.g.我的触发器中的一个被定义如下
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER update_template BEFORE UPDATE ON template
FOR EACH ROW BEGIN
SET new.mod_date := now();
END */;;
DELIMITER ;
这触发了我的开发系统上使用的用户根@
本地主机这产生在上述语句中的[email protected]
子句定义的(通过使用mysqldump
生成的输出)。
根@本地不存在作为这会导致当过扳机被触发以下错误直播服务器上的用户(例如,通过使用update templates set...
)通过现场系统用户
1449:该指定为一个定义(“根” @“localhost”的)用户不存在
目前我使用mysqldump --add-drop-table --user=root -p my_project > export.sql
出口和mysql -u devuser -p my_project < export.sql
导入数据。
出口/进口作品无懈可击。只有当我通过sql操作数据并触发了一个触发器时才会出现该错误。
编辑:
MySQL的版本是47年5月5日(生活和DEV)
什么版本的MySQL使用?从MySQL的5.7.8版开始,您可以使用['--skip-definer'](http://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html#option_mysqlpump_skip-definer)。 – wchiquito
谢谢你的提示,不幸的是不是我的选择,但添加到http://stackoverflow.com/questions/9446783/remove-definer-clause-from-mysql-dumps/ – maxhb