2016-08-09 58 views
0

我用命令获取的数据库的一个MySQL转储:填充mysql数据库

mysqldump --single-transaction --all-databases --flush-privileges -h HOST -u USER -p PASSWORD 

我故意用--all-databases标志,以确保我得到了所有我所创造的用户和他们授予的权限。但是当我以root用户的身份运行导入新数据库时,出现此错误:Access denied for user 'root'@'%' to database 'mysql'

是否有将用户和权限从一个数据库复制到另一个数据库的不同方法?

回答

0

我使用SHOW GRANTS语句来获得特权,例如:

SHOW GRANTS FOR [email protected]'%' 

它返回是这样的:

Grants for [email protected]%                             
-------------------------------------------------------------------------------------------------- 
GRANT USAGE ON *.* TO 'foo'@'%' IDENTIFIED BY PASSWORD '*B3CD------------------------------------' 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, EXECUTE ON `db`.* TO 'foo'@'%' 
GRANT SELECT ON `mysql`.`proc` TO 'foo'@'%' 

我可以轻松地输出,加上分号语句结束,进行其他必要的修改,并在另一个数据库上执行它们。

只需重复说明,无论哪个用户我需要迁移。

+0

我想这适用于此。但这有点痛苦。有没有更简化的方法?谢谢! – jamesatha

+0

可能有更简化的方法。这就是我如何做到的。至于采取MySQL数据库的mysqldump,然后试图将批量导入到不同的数据库中......这不是我会做的事情,因为mysql数据库中有很多表除了user,db和tables_priv。我还没有看到(或寻找)关于做这样的事情的任何指示/警告。至于实际的错误信息,我期望这是因为用户'root @'%''没有被定义或错误的密码。 DML更改特权表需要FLUSH PRIVILEGES才能生效。 – spencer7593