MySQL 是流行的關系型數據庫管理系統,當你需要在不同的服務器之間遷移數據時,常常需要將數據庫中的用戶和權限也同時導出來。下面介紹如何使用 MySQL 命令行導出用戶。
1. 登錄 MySQL
$ mysql -u USERNAME -p Enter password: PASSWORD
其中,USERNAME 為 MySQL 用戶名,PASSWORD 為密碼。如果密碼為空,可以直接輸入回車。
2. 查看用戶
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)
通過以上命令可以查看當前數據庫中的用戶和主機信息。
3. 導出用戶
mysql>SELECT CONCAT('CREATE USER ''', user, '''@''', host, ''' IDENTIFIED BY ''password'';') FROM mysql.user; >/tmp/create_users.sql
將以上命令執行后,會將創建用戶的語句保存在 /tmp/create_users.sql 文件中。其中,password 可以替換為具體的密碼。
4. 導出用戶權限
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 文件中。
至此,我們成功導出了數據庫中的用戶和用戶相應的權限。