如何导出和导入现有用户(及其权限!)

2024-01-11

我有一个现有的 MySQL 实例(测试),包含 2 个数据库和几个用户,每个用户对每个数据库都有不同的访问权限。

我现在需要复制其中一个数据库(进入生产环境)和用户与之相关。

复制数据库是easy https://stackoverflow.com/a/21091197/1864054:

Export:

mysqldump --no-data --tables -u root -p secondb >> secondb_schema.sql

Import:

mysql -u root -p -h localhost secondb < secondb_schema.sql

但是,我没有找到一种直接的导出和导入方法users, 来自命令行(mysql内部或外部)。

如何导出和导入user https://stackoverflow.com/a/1135251/1864054,从命令行?


Update:到目前为止,我已经找到了实现此目的的手动(因此容易出错)步骤:

-- lists all users
select user,host from mysql.user;

然后找到它的补助金:

-- find privilege granted to a particular user
show grants for 'root'@'localhost'; 

Then manually使用上面“show grants”命令的结果中列出的授权创建用户。

我更喜欢更安全、更自动化的方式。有吗?


我发现导出用户的最简单方法之一是使用 Percona 的工具 pt-show-grants。 Percona 工具包是免费的,易于安装,易于使用,并且有大量文档。 这是显示所有用户或特定用户的简单方法。它以 SQL 格式列出了他们的所有资助和输出。我将举例说明如何显示 test_user 的所有授权:

shell> pt-show-grants --only test_user

该命令的输出示例:

GRANT USAGE ON *.* TO 'test_user'@'%' IDENTIFIED BY PASSWORD '*06406C868B12689643D7E55E8EB2FE82B4A6F5F4';
GRANT ALTER, INSERT, LOCK TABLES, SELECT, UPDATE ON `test`.* TO 'test_user'@'%';

我通常将输出重定向到一个文件中,这样我就可以编辑我需要的内容,或者将其加载到 mysql 中。

或者,如果您不想使用 Percona 工具并希望转储所有用户,则可以按以下方式使用 mysqldump:

shell> mysqldump mysql --tables user db > users.sql

注意: --flush-privileges 不起作用,因为整个数据库没有被转储。这意味着您需要手动运行它。

shell> mysql -e "FLUSH PRIVILEGES"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何导出和导入现有用户(及其权限!) 的相关文章

随机推荐