一:mysql連接簡介
1、linux下mysql的連接方式有三種:
| 本地mysql命令連接 |
| 客戶端命令連接 |
| 腳本語言封裝方法連接 |
2、linux下mysql的連接方法有兩種:
| TCP/IP協議連接 |
| mysql.sock連接 |
二:mysql配置文件my.cnf的三個區塊講解

[client]區塊是mysql客戶端連接mysql服務器時讀取本地的my.cnf參數信息;
[mysql]區塊是mysql客戶端和mysql服務器部署在同一台機器上,並且利用mysql命令連接mysql服務器時讀取本地的my.cnf參數信息;
[mysqld]區塊是mysql服務器啟動時讀取本地的my.cnf參數信息。
三、mysql客戶端和mysql服務器部署在同一台機器上面
1、需要證明的結論:
①mysql客戶端和mysql服務器部署在同一台機器上面時,用mysql命令連接本地mysql服務器指定localhost這個地址,不需要指定mysql服務器端口,讀取[mysql]區塊的配置信息,並且通過mysql.sock方法連接mysql服務器;
②mysql客戶端和mysql服務器部署在同一台機器上面時,用mysql -h127.0.0.1連接mysql服務器讀取[client]區塊的配置信息,通過TCP/IP協議方法連接mysql服務器,並且默認指定3306端口;
③mysql客戶端和mysql服務器部署在同一台機器上面時,用python腳本登入mysql服務器相當於客戶端方式登入,不讀取my.cnf配置文件,只是python用自己的模塊封裝客戶端參數信息。
2、開始證明以上結論:
①mysql客戶端和mysql服務器部署在同一台機器上面時,用mysql命令連接本地mysql服務器指定localhost這個地址,不需要指定mysql服務器端口,讀取[mysql]區塊的配置信息,並且通過mysql.sock方法連接mysql服務器;
第一步:
執行如下mysql命令連接mysql服務器

帶上密碼連接成功:

得出結論:
mysql客戶端和mysql服務器部署在同一台機器時,執行mysql命令登入,默認指定localhost這個主機地址去連接;
第二步:
修改mysql服務器端口號並且重載mysql服務
[mysqld] port=3307
連接正常:

得出結論:
mysql客戶端和mysql服務器部署在同一台機器上面時,執行mysql命令登入,不需要指定mysql服務器開放的端口;
第三步:
my.cnf的初始配置參數:
[mysql]
socket=/tmp/mysql.sock
可以成功登入mysql服務器

修改后的my.cnf配置參數:
[mysql]
socket=/tmp/mysql.sock_1
出現如下報錯:

得出結論:
mysql客戶端和mysql服務器部署在同一台機器上面時,用mysql命令連接本地mysql服務器指定localhost這個地址,不需要指定mysql服務器開放的端口,讀取[mysql]區塊的配置信息,並且通過mysql.sock方法連接mysql服務器;
到此為止關於結論①證明完畢!
②mysql客戶端和mysql服務器部署在同一台機器上面時,用mysql -h127.0.0.1連接mysql服務器讀取[client]區塊的配置信息,通過TCP/IP協議方法連接mysql服務器,並且默認指定3306端口;
第一步:
my.cnf的初始配置參數:
[client] port=3306 [mysqld] port=3306
可以成功登入mysql服務器

修改my.cnf配置參數:
[client] port=3307 [mysqld] port=3306
連接mysql服務器報錯:

指定端口連接mysql服務器:

得出結論:
mysql客戶端和mysql服務器部署在同一台機器上面時,用mysql -h 127.0.0.1連接mysql服務器讀取的的[client]這個區塊的配置信息,走的是TCP/IP協議方法連接的,並且如果不指定端口則默認3306端口;
到此為止關於結論②證明完畢!
③mysql客戶端和mysql服務器部署在同一台機器上面時,用python腳本登入mysql服務器相當於客戶端方式登入,不讀取my.cnf配置文件,只是python用自己的模塊封裝客戶端參數信息。
第一步:
python腳本
#!/usr/bin/env python # -*- coding:utf-8 -*- import MySQLdb def main(): #conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='123', port=3306) conn = MySQLdb.connect(host='localhost', user='root', passwd='123', port=3306) cur = conn.cursor() cur.execute("show databases") print cur.fetchall() conn.commit() cur.close() conn.close() if __name__ == '__main__': main()
執行結果如下:

MySQLdb源碼中有如下解釋:

得出結論:
mysql客戶端和mysql服務器部署在同一台機器上面時,用python腳本登入mysql服務器相當於客戶端方式登入,不讀取my.cnf配置文件,只是python自己模塊封裝的客戶端參數信息。
到此為止關於結論③證明完畢!
四、mysql客戶端和mysql服務器部署在不同機器上面
1、需要證明的結論:
①mysql客戶端和mysql服務器部署在不同機器上面時,用mysql -h192.168.163.130 -p123登入mysql服務器讀取本機[client]參數信息,通過TCP/IP協議連接;
2、開始證明以上結論:
①mysql客戶端和mysql服務器部署在不同機器上面時,用mysql -h192.168.163.130 -p123登入mysql服務器讀取本機[client]參數信息,通過TCP/IP協議連接;
第一步:
mysql客戶端my.cnf配置信息:
[client] port=3306
mysql服務器my.cnf配置信息:
[mysqld] port=3306
可以正常連接:

第二步:
mysql客戶端my.cnf配置信息:
[client]
port=3307
mysql服務器my.cnf配置信息:
[mysqld]
port=3306
連接mysql服務器報錯:

指定mysql服務器端口連接,則成功:

得出結論:
mysql客戶端和mysql服務器部署在不同機器上面時,用mysql -h192.168.163.130 -p123登入mysql服務器讀取本機[client]參數信息,通過TCP/IP協議連接;
以上內容希望可以幫助你更深刻了解linux下mysql的連接方式
筆者寄語:大多數IT人掌握的知識都是花拳綉腿,只有少部分人不忘初心;加油!!!
