MySQL 是流行的关系型数据库管理系统,当你需要在不同的服务器之间迁移数据时,常常需要将数据库中的用户和权限也同时导出来。下面介绍如何使用 MySQL 命令行导出用户。
$ mysql -u USERNAME -pEnter password: PASSWORD
其中,USERNAME 为 MySQL 用户名,PASSWORD 为密码。如果密码为空,可以直接输入回车。
mysql>SELECT User, Host FROM mysql.user;+------------------+-----------+| User | Host |+------------------+-----------+| root | localhost || mysql.session | localhost || mysql.sys | localhost || debian-sys-maint | localhost |+------------------+-----------+4 rows in set (0.00 sec)
通过以上命令可以查看当前数据库中的用户和主机信息。
mysql>SELECT CONCAT('CREATE USER ''', user, '''@''', host, ''' IDENTIFIED BY ''password'';') FROM mysql.user; >/tmp/create_users.sql
将以上命令执行后,会将创建用户的语句保存在 /tmp/create_users.sql 文件中。其中,password 可以替换为具体的密码。
mysql>SELECT CONCAT('GRANT ', GROUP_CONCAT(DISTINCT privilege_type SEPARATOR ', '), ' ON *.* TO ''', user, '''@''', host, '''') FROM mysql.user LEFT JOIN mysql.db ON (mysql.user.User = mysql.db.User AND mysql.user.Host = mysql.db.Host) LEFT JOIN mysql.tables_priv ON (mysql.user.User = mysql.tables_priv.User AND mysql.user.Host = mysql.tables_priv.Host) LEFT JOIN mysql.columns_priv ON (mysql.user.User = mysql.columns_priv.User AND mysql.user.Host = mysql.columns_priv.Host) WHERE mysql.user.User != '' and mysql.user.Host != '' and mysql.user.User NOT LIKE 'mysql.%' GROUP BY mysql.user.User, mysql.user.Host INTO OUTFILE '/tmp/grant_users.sql';
以上命令会将各个用户的权限授予语句保存在 /tmp/grant_users.sql 文件中。
至此,我们成功导出了数据库中的用户和用户相应的权限。