使用過(guò) MySQL 的都知道怎么鏈接,就是通過(guò)客戶(hù)端軟件Navicat,官方的 MySQ LWorkBench 或者其他進(jìn)行客戶(hù)端進(jìn)行鏈接。本文說(shuō)四種鏈接 MySQL 的方式,最后一種可能讓你大漲見(jiàn)識(shí)。
1. 本地 socket 鏈接
通過(guò)之前文章,大家肯定都知道如何安裝了。安裝之后也進(jìn)行了登錄,如下方式:
$ mysql -uroot -p # 回車(chē),輸入密碼就可登錄了
其實(shí)完整的鏈接方式是這樣的:
$ mysql [-S /tmp/mysql.sock] -uroot -p # 中括號(hào)的內(nèi)容被省略了
MySQL 默認(rèn) socket 的目錄是 /tmp/mysql.sock,具體可查看配置,如下:
# 首先登錄 MySQL
mysql> show variables like 'socket';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| socket | /tmp/mysql.sock |
+---------------+-----------------+
1 row in set (0.08 sec)
其實(shí)在 MySQL 本機(jī)鏈接還可以將 -uroot -p 省略,只需要簡(jiǎn)單配置即可。打開(kāi) /etc/my.cnf 輸入如下內(nèi)容:
[client]
user=root
password=124
socket=/tmp/mysql.sock
這樣只需要在命令行終端輸入:mysql 就可鏈接了。如下:
$ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 252
Server version: 5.7.36 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
(root@localhost) [(none)]>
2. 通過(guò) TCP/IP 協(xié)議遠(yuǎn)程鏈接
這個(gè)是大家最常用的方式,使用客戶(hù)端就是這種方式,客戶(hù)端鏈接大家都會(huì),我就不演示了,下面我演示一下,如何在 Linux 下遠(yuǎn)程鏈接 MySQL,具體如下:
$ mysql -h 192.168.1.100 -P 3306 -uroot -p
這樣鏈接得有個(gè)前提,root 用戶(hù)必須允許遠(yuǎn)程鏈接,具體可查看 MySQL 權(quán)限一節(jié)。
3. 啟用 SSL
現(xiàn)在所有的瀏覽器訪(fǎng)問(wèn)就建議使用 https,MySQL也不落后,也支持加密鏈接。具體就是在安裝時(shí)是否啟用了 SSL,如下:
$> bin/mysql_ssl_rsa_setup # 鏈接MySQL啟用SSL,即加密鏈接
如何知道鏈接的 MySQL 是否使用了 SSL 呢?其實(shí)在登錄 MySQL 之后,輸入 status 或者 \s 可查看鏈接狀態(tài):
(root@localhost) [(none)]> status
--------------
mysql Ver 14.14 Distrib 5.7.36, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 253
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 5.7.36 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 3 days 22 hours 31 min 55 sec
注意 SSL 那一行,Not in use 本地鏈接是不啟用加密鏈接的,當(dāng)然本地鏈接也沒(méi)有必要使用加密鏈接。如果是遠(yuǎn)程登錄:
(sontek@192.168.1.100) [(none)] status
--------------
mysql Ver 14.14 Distrib 5.7.36, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 8
Current database:
Current user: sontek@120.244.158.5
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 5.7.36 MySQL Community Server (GPL)
Protocol version: 10
Connection: 192.168.1.100 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 8 min 18 sec
再次查看 SSL,此時(shí)啟用了加密鏈接。
當(dāng)然了,默認(rèn)肯定是使用 SSL 加密鏈接的,但是客戶(hù)端也可以不使用 SSL 加密鏈接:
$ mysql -h192.168.1.100 -usontek -p --ssl-mode=DISABLED # 不啟用加盟鏈接
此時(shí)鏈接到 MySQL 查看鏈接狀態(tài)就是 SSL Not in use
但是為了安全,也可以設(shè)置登錄某個(gè)用戶(hù)時(shí),強(qiáng)制使用 SSL
$> alter user 'sontek'@'%' require ssl; # 強(qiáng)制啟用 ssl 登錄, 此時(shí)不能禁用 SSL 登錄了
4. 啟用 x509,采用證書(shū)的方式登錄 MySQL
雖然啟用 SSL加密鏈接 MySQL 已經(jīng)很安全了,但是在銀行或者保險(xiǎn)等安全系數(shù)要求更高的系統(tǒng)這還遠(yuǎn)遠(yuǎn)不夠。MySQL 還支持使用證書(shū)進(jìn)行鏈接。
首先給用戶(hù)啟用 x509,操作如下:
(root@localhost) [(none)]> alter user 'sontek'@'%' require x509; # 啟用 x509
Query OK, 0 rows affected (0.00 sec)
下載證書(shū)到本地,如果在安裝時(shí)候執(zhí)行了 bin/mysql_ssl_rsa_setup ,那么在 MySQL 數(shù)據(jù)目錄就會(huì)有如下文件:
$ ls -l *.pem
-rw------- 1 mysql mysql 1676 Mar 3 13:50 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Mar 3 13:50 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Mar 3 13:50 client-cert.pem
-rw------- 1 mysql mysql 1680 Mar 3 13:50 client-key.pem
-rw------- 1 mysql mysql 1676 Mar 3 13:50 private_key.pem
-rw-r--r-- 1 mysql mysql 452 Mar 3 13:50 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Mar 3 13:50 server-cert.pem
-rw------- 1 mysql mysql 1680 Mar 3 13:50 server-key.pem
只需要將 client-cert.pem 和 client-key.pem 下載到本地即可。
$> sz $MYSQL_DATA/client-cert.pem, $MYSQL_DATA/client-key.pem # $MYSQL_DATA 你的數(shù)據(jù)目錄
配置客戶(hù)端鏈接,如圖:

如果不配置 SSL 標(biāo)簽的兩個(gè)認(rèn)證文件,則鏈接不成功,具體大家可以自己試試。
至此,MySQL 常用的鏈接方式都說(shuō)完了,下一篇說(shuō)一下 MySQL 權(quán)限管理,敬請(qǐng)期待......
大家加油?。。?/strong>