首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqldump所有数据库,包括用户/密码和授权

mysqldump所有数据库,包括用户/密码和授权
EN

Database Administration用户
提问于 2021-09-15 16:35:55
回答 2查看 7.1K关注 0票数 2

我正在运行10.5.12-MariaDB,并试图对包括用户帐户/密码和赠款在内的所有数据库进行完全备份,但不知怎么的,我无法获得授权的备份,所以我遗漏了一些东西。

举例说明。

采取完全备份

代码语言:javascript
复制
old-DB # mysqldump --opt --all-databases > /root/openstack.sql

恢复到新的DB服务器

代码语言:javascript
复制
new-DB # mysql < openstack.sql

现在,我可以看到mysql.user表中的所有数据库和所有用户,但是所有用户都缺少授权。

示例:

代码语言:javascript
复制
old-DB # mysql -e 'show grants for glance';
+-------------------------------------------------------------------------------------------------------+
| Grants for glance@%                                                                                   |
+-------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `glance`@`%` IDENTIFIED BY PASSWORD '*6FE1E5E532A9189C900FB696AC9DEF84CDE2194A' |
| GRANT ALL PRIVILEGES ON `glance`.* TO `glance`@`%`                                                    |
+-------------------------------------------------------------------------------------------------------+

在新的DB服务器上缺少它

代码语言:javascript
复制
new-DB# mysql -e 'show grants for glance';
ERROR 1141 (42000) at line 1: There is no such grant defined for user 'glance' on host '%'

所以我做了

代码语言:javascript
复制
old-DB# mysql --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

现在,MySQLUserGrants.sql拥有所有用户授予的命令,所以我只需复制“粘贴所有命令”并将其粘贴到新-DB中,我得到了以下错误:

代码语言:javascript
复制
MariaDB [(none)]> GRANT USAGE ON *.* TO `glance`@`%` IDENTIFIED BY PASSWORD '*6FE1E5E532A9189C900FB696AC9DEF84CDE2194A';
ERROR 1133 (28000): Can't find any matching row in the user table

问题是,我如何采取完整的mysql备份,其中包括一切,甚至包括赠款。(或者我是不是漏掉了什么?)

EN

回答 2

Database Administration用户

发布于 2021-09-15 17:04:02

是。您可以使用--system交换机。这只存在于MariaDB版本的mysqldump中,尽管您可以使用它从MySQL数据库转储。

system=users将为您的用户转储CREATE USER ...GRANT ...语句,并授予:

代码语言:javascript
复制
mysqldump --opt --system=users --insert-ignore --all-databases > /root/openstack.sql

在导入转储时,--insert-ignore选项对于避免与现有用户发生冲突非常重要。该选项将导致CREATE USER IF NOT EXISTS语句,而不仅仅是CREATE USER语句。

要真正包含所有内容,请使用--system=all

请参阅MariaDB KB 米斯德手册页中的文档(搜索--system)。

这是最近的一个特性,已经移植到MariaDB 10.2和更高版本。

票数 3
EN

Database Administration用户

发布于 2021-09-15 18:48:35

从逻辑上说,你在做正确的事情,支持助学金。

大约7.5年前,我推荐了同样的方法:导出所有MySQL用户

您还可以使用pt-表演-赠款并将FLUSH PRIVILEGES;附加到输出中。

代码语言:javascript
复制
(
   pt-show-grants ...
   echo "FLUSH PRIVILEGES;"
) > user_grants.sql
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/299650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档