我正在运行MySQL 8.0.23并尝试备份/还原过程。因此,我创建了一个具有以下权限的用户"dump@localhost“:
> Grants for dump@localhost
> GRANT PROCESS ON *.* TO `dump`@`localhost`
> GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON `mydb`.* TO `dump`@`localhost`创建这样的备份:
mysqldump -u dump -p -n -d -t -R mydb > test.sql该命令执行,但sql文件中没有过程。
--
-- Dumping routines for database 'mydb'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2021-12-25 17:21:39但是,如果我使用自己的用户帐户而不是“转储”或也使用root,它将转储过程。
根据MySQL 8文档,所提供的权利应该是足够的:https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
mysqldump至少需要转储表的SELECT特权,显示转储视图的视图,转储触发器的触发器,不使用--单事务选项的锁表,以及(截至MySQL 8.0.21)如果没有使用--不使用表空间选项的进程。如选项说明中所述,某些选项可能需要其他特权。
我的一个典型程序是这样的:
create
definer = root@localhost procedure SUM_prices_d()
INSERT IGNORE INTO SUM_prices_d
...我失去了什么权利?
发布于 2021-12-25 16:57:34
你很可能还需要一笔赠款:
GRANT SELECT ON mysql.proc TO `dump`@`localhost`;原因:转储存储过程需要读取mysql.proc
-例程,-R包括输出中转储数据库的存储例程(过程和函数)。此选项需要全局SELECT特权。使用-例程生成的输出包含创建过程和创建函数语句来创建例程.
您可能需要按以下方式调整赠款
GRANT PROCESS,SELECT ON *.* TO `dump`@`localhost`或为转储存储过程的唯一目的创建单独的用户。
GRANT PROCESS,SELECT ON *.* TO `dump_storedprocs`@`localhost`https://dba.stackexchange.com/questions/305385
复制相似问题