如何從命令行管理MySQL數(shù)據(jù)庫(kù)和用戶
本教程介紹了如何使用命令行來創(chuàng)建和管理MySQL或MariaDB數(shù)據(jù)庫(kù)和用戶。 MySQL是***的開源關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。 MySQL服務(wù)器允許我們創(chuàng)建大量用戶和數(shù)據(jù)庫(kù)并授予適當(dāng)?shù)臋?quán)限,以便用戶可以訪問和管理數(shù)據(jù)庫(kù)。
在你開始之前
在開始本教程之前,我們假設(shè)您已經(jīng)在系統(tǒng)上安裝了MySQL或MariaDB服務(wù)器。 所有命令將作為root用戶在MySQL提示符內(nèi)執(zhí)行。
要打開MySQL提示符,輸入以下命令并在提示時(shí)輸入MySQL root用戶密碼:
- mysql -u root -p
創(chuàng)建一個(gè)新的MySQL數(shù)據(jù)庫(kù)
要?jiǎng)?chuàng)建新的MySQL或MariaDB數(shù)據(jù)庫(kù),請(qǐng)運(yùn)行以下命令,只需將database_name替換為要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)的名稱即可:
- CREATE DATABASE database_name;
輸出:
- Query OK, 1 row affected (0.00 sec)
如果您嘗試創(chuàng)建一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù),您將看到以下錯(cuò)誤消息:
- ERROR 1007 (HY000): Can't create database 'database_name'; database exists
為避免出現(xiàn)錯(cuò)誤,如果您嘗試創(chuàng)建的名稱相同的數(shù)據(jù)庫(kù)存在,則可以使用以下命令:
- CREATE DATABASE IF NOT EXISTS database_name;
輸出:
- Query OK, 1 row affected, 1 warning (0.00 sec)
在上面的輸出中,您可以看到查詢OK,這意味著查詢成功,并且有1個(gè)警告告訴我們數(shù)據(jù)庫(kù)已經(jīng)存在,并且沒有創(chuàng)建新的數(shù)據(jù)庫(kù)。
列出所有MySQL數(shù)據(jù)庫(kù)
我們可以使用以下命令列出MySQL或MariaDB服務(wù)器上存在的所有數(shù)據(jù)庫(kù):
- SHOW DATABASES;
輸出:
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | database_name |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 5 rows in set (0.00 sec)
information_schema,mysql,performance_schema和sys數(shù)據(jù)庫(kù)是在安裝時(shí)創(chuàng)建的,它們存儲(chǔ)有關(guān)所有其他數(shù)據(jù)庫(kù),系統(tǒng)配置,用戶,權(quán)限和其他重要數(shù)據(jù)的信息。 這些數(shù)據(jù)庫(kù)對(duì)于MySQL安裝的正確功能是必需的。
刪除一個(gè)MySQL數(shù)據(jù)庫(kù)
要?jiǎng)h除MySQL或MariaDB,請(qǐng)運(yùn)行以下命令:
- DROP DATABASE database_name;
輸出:
- Query OK, 0 rows affected (0.00 sec)
如果您嘗試刪除不存在的數(shù)據(jù)庫(kù),您將看到以下錯(cuò)誤消息:
- ERROR 1008 (HY000): Can't drop database 'database_name'; database doesn't exist
為了避免這個(gè)錯(cuò)誤,你可以使用下面的命令:
- DROP DATABASE IF EXISTS database_name;
輸出:
- Query OK, 0 rows affected, 1 warning (0.00 sec)
在上面的輸出中,您可以看到Query OK,這意味著查詢成功,并且有1個(gè)警告告訴我們數(shù)據(jù)庫(kù)不存在。
創(chuàng)建一個(gè)新的MySQL用戶帳戶
MySQL中的用戶帳戶由用戶名和主機(jī)名部分組成。
要?jiǎng)?chuàng)建一個(gè)新的MySQL或MariaDB用戶帳戶,請(qǐng)運(yùn)行以下命令,只需將'database_user'替換為您要?jiǎng)?chuàng)建的用戶的名稱即可:
- CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';
在上面的命令中,我們將主機(jī)名部分設(shè)置為localhost,這意味著該用戶將只能從本地主機(jī)(即從運(yùn)行MySQL服務(wù)器的系統(tǒng))連接到MySQL服務(wù)器。 如果您想授予來自其他主機(jī)的訪問權(quán)限,只需使用遠(yuǎn)程計(jì)算機(jī)IP更改本地主機(jī),或者為主機(jī)部分使用'%'通配符,這意味著用戶帳戶將能夠從任何主機(jī)連接。
與使用數(shù)據(jù)庫(kù)時(shí)一樣,在嘗試創(chuàng)建已存在的用戶帳戶時(shí)可避免出現(xiàn)錯(cuò)誤,您可以使用:
- CREATE USER IF NOT EXISTS 'database_user'@'localhost' IDENTIFIED BY 'user_password';
輸出:
- Query OK, 0 rows affected, 1 warning (0.00 sec)
更改MySQL用戶帳戶密碼
更改MySQL或MariaDB用戶帳戶密碼的語(yǔ)法取決于您在系統(tǒng)上運(yùn)行的服務(wù)器版本。
您可以通過發(fā)出以下命令找到您的服務(wù)器版本:
- mysql --version
如果你有MySQL 5.7.6或更高版本或MariaDB 10.1.20及更新版本,要更改密碼,請(qǐng)使用以下命令:
- ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';
如果您有MySQL 5.7.5及更高版本或MariaDB 10.1.20及更高版本,請(qǐng)使用:
SET PASSWORD FOR 'database_user'@'localhost' = PASSWORD('new_password');
在這兩種情況下,輸出應(yīng)如下所示:
- Query OK, 0 rows affected (0.00 sec)
列出所有MySQL用戶帳戶
我們可以通過查詢mysql.users表來列出所有MySQL或MariaDB用戶帳戶:
- SELECT user, host FROM mysql.user;
輸出應(yīng)該如下所示。 此輸出列出了在Ubuntu機(jī)器上運(yùn)行的MySQL 5.7服務(wù)器的默認(rèn)用戶以及我們之前添加的兩個(gè)額外用戶帳戶'database_user'@'%'和'database_user'@'localhost'。
輸出:
- +------------------+-----------+
- | user | host |
- +------------------+-----------+
- | database_user | % |
- | database_user | localhost |
- | debian-sys-maint | localhost |
- | mysql.session | localhost |
- | mysql.sys | localhost |
- | root | localhost |
- +------------------+-----------+
- 6 rows in set (0.00 sec)
刪除MySQL用戶帳戶
要?jiǎng)h除用戶帳戶,請(qǐng)使用以下命令:
- DROP USER 'database_user@'localhost';
輸出:
- DROP USER 'database_user@'localhost';
如果您嘗試刪除不存在的用戶帳戶,則會(huì)發(fā)生錯(cuò)誤。
- ERROR 1396 (HY000): Operation DROP USER failed for 'database_user'@'localhost'
與處理數(shù)據(jù)庫(kù)時(shí)一樣,以避免錯(cuò)誤可以使用:
- DROP USER IF EXISTS 'database_user'@'localhost';
輸出:
- Query OK, 0 rows affected, 1 warning (0.00 sec)
授予MySQL用戶帳戶的權(quán)限
有多種類型的權(quán)限可以授予用戶帳戶。 您可以在這里找到MySQL支持的完整權(quán)限列表。 在本指南中,我們將通過幾個(gè)例子:
要通過特定數(shù)據(jù)庫(kù)將用戶帳戶的所有權(quán)限擴(kuò)大,請(qǐng)使用以下命令:
- GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';
要將所有權(quán)限擴(kuò)展到所有數(shù)據(jù)庫(kù)上的用戶帳戶,請(qǐng)使用以下命令:
- GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';
要通過數(shù)據(jù)庫(kù)中特定的表格將所有權(quán)限提供給用戶帳戶,請(qǐng)使用以下命令:
- GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';
如果您只想授予特定數(shù)據(jù)庫(kù)類型的用戶帳戶的特定權(quán)限,請(qǐng)執(zhí)行以下操作:
- GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';
撤銷MySQL用戶帳戶的權(quán)限
如果您需要從用戶帳戶中撤銷一個(gè)或多個(gè)權(quán)限或所有權(quán)限,則語(yǔ)法與授予它的幾乎相同。 例如,如果要通過特定數(shù)據(jù)庫(kù)撤消用戶帳戶的所有特權(quán),請(qǐng)使用以下命令:
- REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';
顯示MySQL用戶帳戶權(quán)限
要查找授予特定MySQL用戶帳戶類型的權(quán)限:
- SHOW GRANTS FOR 'database_user'@'localhost';
顯示:
- +---------------------------------------------------------------------------+
- | Grants for database_user@localhost |
- +---------------------------------------------------------------------------+
- | GRANT USAGE ON *.* TO 'database_user'@'localhost' |
- | GRANT ALL PRIVILEGES ON `database_name`.* TO 'database_user'@'localhost' |
- +---------------------------------------------------------------------------+
- 2 rows in set (0.00 sec)
結(jié)論
本教程只介紹基礎(chǔ)知識(shí),但對(duì)于任何想要了解如何從命令行管理MySQL數(shù)據(jù)庫(kù)和用戶的人來說,這應(yīng)該是一個(gè)很好的開始。
OK,就這樣! 如果您有任何問題或反饋,請(qǐng)隨時(shí)發(fā)表評(píng)論。
Ubuntu 16.04 上安裝 MySQL 5.7 教程 https://www.linuxidc.com/Linux/2017-05/143864.htm