连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质上是进程通信。如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。MySQL数据库提供的连接方式从本质上看都是上述提及的进程通信方式。
TCP/IP 连接
TCP/IP套接字方式是MySQL数据库在任何平台下都提供的连接方式,也是网络中使用得最多的一种方式。这种方式在TCP/IP连接上建立一个基于网络的连接请求,一
般情况下客户端(client)在一台服务器上,而MySQL实例(server)在另一台服务器上,这两台机器通过一个TCP/IP网络连接。例如用户可以在Windows服务器下请求一台远程Linux服务器下的MySQL实例,如下所示:
mysql -h 127.0.0.1 -P 3306 -u root -p
这里需要注意的是,在通过TCP/IP连接到MySQL实例时,MySQL数据库会先检查user表,用来判断发起请求的客户端IP是否允许连接到MySQL实例。
使用ssl加密传输
{message type="warning" content="这部分都是基于5.7版本的实操,如果是5.6的话,估计要有点不大一样,ssl连接主要针对tcp/ip这种远程连接用的"/}
使用ssl连接,可能会对连接性能有点影响,不是非常机密的数据,不使用ssl问题也不大。
首先,我们看下我们的服务器是否支持ssl连接
show variables like '%ssl%';
如果不支持,可以参考mysql安装的时候,ssl安装步骤:https://www.xiaoqiuyinboke.cn/archives/104.html,安装完重启即可
然后修改强制用户必须使用ssl进行连接
alter user 'test'@'%' require x509;
然后下载数据库目录下的client*.pem给客户端
# 这三个文件
client-cert.pem
client-key.pem
ca.pem
UNIX域套接字 连接
在Linux和UNIX环境下,还可以使用UNIX域套接字。UNIX域套接字其实不是一个网络协议,所以只能在MySQL客户端和数据库实例在一台服务器上的情况下使用。用户可以在配置文件中指定套接字文件的路径,如--socket=/tmp/mysql.sock。当数据库实例启动后,用户可以通过下列命令来进行UNIX域套接字文件的查找:
SHOW variables LIKE 'socket';
在知道了UNX域套接字文件的路径后,就可以使用该方式进行连接了,-hlocalhost,就代表是用socket的方式进行连接:
mysql -uroot -S /tmp/mysql.socket1
# 等效
mysql -hlocalhost -uroot -S /tmp/mysql.socket1
如果省略-h参数的话默认就是localhost,所以可以简写
mysql -uroot -S /tmp/mysql.socket1
-S /tmp/mysql.sock
参数也可以可以省略,默认是/tmp/mysql.sock,如果sock文件是这个的话,可以简写。
mysql -uroot
一般只有在mysql服务器上,使用mysql客户端
进行连接的时候才会使用这种方式,然而客户端和mysql在同一台服务器上的概率是很低的,所以用到的场景不多。