MySQL | MariaDB命令列客戶端常用操作
連線與斷開資料庫
連線資料庫
語法:
$ mysql -h [localhost | IP] -P [port] -u [username] -p [password]
例如:連線本機 ,埠為3306,使用者名稱為root,密碼為:123456,命令為:
$ mysql -u root -p
執行後會提示輸入密碼,此時輸入正確密碼,成功登陸會出現MariaDB命令列提示符。
在MariaDB伺服器登入時可省略-h引數,埠為預設3306埠時可省略-P引數。
斷開資料庫
執行命令:
$ quit
或
$ exit
成功斷開資料庫連線,退出客戶端操作命令列。
密碼維護
通常預設的root使用者在本機登入時沒有密碼的,況且我們也會有修改其他使用者密碼的需求。
使用update語句修改密碼
由於我們的資料庫使用者,統一存在mysql庫的user表中。所以我們使用一下命令更新使用者密碼。
語法:
$ update mysql.user set password = password('newpassword') where user = 'username';
例如:
$ update mysql.user set password = password('123456') where user = 'root';
以上語句將root使用者的密碼修改為123456。
忘記root使用者密碼的處理
當我們忘記root密碼時,意味著我們最高許可權的管理使用者不可用了。
- 此時我們需要在/etc/my.cnf檔案中新增這樣一行內容。
$ vim /etc/my.cnf
- 在[mysqld]下新增,skip-grant-tables。
[mysqld]
skip-grant-tables
3.使用update語句修改密碼,重新登入即可(如果不能使用新密碼登入,重啟MariaDB服務)。
常用配置
核心配置檔案my.cnf
在此,我將簡要說明常用的基本配置,後期我會通過一片單獨的文章說明my.cnf的配置及調優。
- [client]
port = 埠,配置MariaDB的埠。 - [mysqld]
skip-grant-tables,此配置意為,忽略許可權表。
basedir = 絕對路徑,配置MariaDB安裝目錄的絕對路徑。
datadir = 絕對路徑,配置MariaDB安裝資料檔案儲存的絕對路徑。
tmpdir = 絕對路徑,配置MariaDB零時檔案儲存的絕對路徑。
亂碼問題
許可權及使用者管理
MySQL與MariaDB同其他RDBMS略有不同,連線資料庫伺服器,不僅使用使用者名稱稱外,使用者連線資料庫伺服器的客戶端而是連線認證的一部分。
一般不允許使用管理員賬戶遠端連線資料庫,及預設的root使用者。該使用者一般許可權為最大,考慮安全因素,我們通常只會賦予root使用者資料庫伺服器所在機器的本地連線訪問許可權。
MariaDB的賬戶識別
MariaDB的使用者賬號不僅包含使用者名稱,還包含客戶端連線點的主機名、域名、IP地址。這個兩個重要元素組成了賬戶。
資料庫的賬戶與訪問主機的主機名、域名、IP地址組成了賬戶,賬戶與主機相關資訊均需要分別用單引好(’)區分開。
賬號語法:
‘db_id’@’HOSTNAME | 域名 |IP’
其語法以使用者名稱開始,@作為分割符,最後是使用者連線MariaDB伺服器的客戶端連線主機資訊。
例如,root使用者按一下注冊,將只有在DB伺服器本地可連線MariaDB伺服器,外部其他伺服器均無法連線。
‘root’@’127.0.0.1’
例如,需要所有外部主機連線,只需要將連線MariaDB伺服器的客戶端連線主機部分修改為’%’。
‘root’@’%’
MariaDB重複賬號說明
我們假設的場景是這樣的,有兩個名為test的使用者名稱,密碼分別為123和456,一個連線客戶端伺服器的IP為192.168.1.100,另一個我賦予了所有機器均可連線。
例如,我像下面這樣配置了賬號。
‘test’@’192.168.1.100’ (該賬號密碼為123)
‘test’@’%’ (該賬號密碼為456)
現在來說明下,連線成功與否的問題。其實連線成功與否完全取決於我使用第一個還是第二個賬號登入的問題。
MariaDB的重複賬號選用原則是,總是選擇範圍小的。’test’@’192.168.1.100’的範圍小於’test’@’%’,因此如果我在192.168.1.100客戶端伺服器上,使用’test’@’%’賬號的密碼456進行連線。會因為總是選擇賬號選擇範圍小的原則,匹配’test’@’192.168.1.100’ 賬號的密碼應該為123,與我使用的連線密碼456不匹配到時連線失敗。
許可權
MariaDB存在多種許可權(Privileges),從10.0版本開始,使用者可以建立許可權組(Role),並將其賦予某種特定使用者,一個許可權組包含多個許可權。
根據MariaDB的許可權作用範圍,可以將許可權分為伺服器級許可權、資料庫級許可權、表級許可權、儲存程式先關許可權、列級許可權(不常用,故省略說明)。
利用GRANT命令使用許可權,ON子句用於指定資料庫物件。
資料庫物件說明
- .
該物件為整個MariaDB伺服器,privileges_list(許可權列表)中只能用全域性許可權。 - db.
該物件為某個特定資料庫,privileges_list(許可權列表)中可以出現除全域性許可權外的資料庫級、表級、儲存程式級許可權。 - db.table
該物件為某個資料庫的一個表,privileges_list(許可權列表)中只能使用表級許可權。 - db.stored_program
該物件為某個資料庫的一個儲存程式,privileges_list(許可權列表)中只能使用儲存程式級別的許可權。
賦予許可權
語法:
$ GRANT [privileges_list] ON [資料庫物件] TO 'db_id'@'HOSTNAME | 域名 |IP';
$ GRANT [privileges_list] ON [資料庫物件] TO 'db_id'@'HOSTNAME | 域名 |IP' IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT語句為某個特定使用者分配許可權,如果使用者不存在,則會先建立使用者,然後再賦予許可權。所以GRANT語句具有建立使用者同時分配許可權的作用。
privileges_list,指定一個或多個許可權,指定多個許可權時使用都好(,)進行分隔。
ON關鍵字,指定給那個資料庫物件授予許可權。
TO關鍵字,指定獲得許可權的使用者。
IDENTIFIED BY子句,用於給建立的使用者賦予密碼的作用。
末尾的WITH GRANT OPTION子句,指定使用者可以為其他使用者授權的許可權。
重新整理許可權設定
在配置或建立新的使用者許可權後,通常都會執行重新整理命令讓許可權立即生效。命令如下:
$ FLUSH PRIVILEGES;