成功启动MySQL服务器程序之后,就可以接着启动客户端程序来连接这个服务器。 bin 目录下有许多客户端程序,比方说 mysqladmin 、 mysqldump 、 mysqlcheck 等等。这里我们重点要关注的是可执行文件 mysql ,通过这个可执行文件可以让我们和服务器程序进程交互,也就是发送请求,接收服务器的处理结果。启动这个可执行文件时一般需要一些参数,格式如下:
mysql -h主机名 -u用户名 -p密码
各个参数的意义如下: |参数名|含义| |:--:|:--| | -h |表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填 localhost 或者 127.0.0.1 。也可以写作 --host=主机名 的形式。| | -u |表示用户名。也可以写作 --user=用户名 的形式。| | -p |表示密码。也可以写作 --password=密码 的形式。|
如果我们想断开客户端与服务器的连接并且关闭客户端的话,可以在 mysql> 提示符后输入下边任意一个命令:
1. quit
2. exit
3. \q
比如我们输入 quit 试试:
mysql> quit Bye
输出了 Bye 说明客户端程序已经关掉了。注意注意注意,这是关闭客户端程序的方式,不是关闭服务器程序的方式。
1.4.1 连接注意事项
最好不要在一行命令中输入密码。在执行 mysql 连接服务器的时候可以不显式的写出密码,就像这样:
mysql -hlocalhost -uroot -p
点击回车之后才会提示你输入密码:
Enter password:
mysql 的各个参数的摆放顺序没有硬性规定,也就是说你也可以这么写:
mysql -p -u root -h localhost
如果你的服务器和客户端安装在同一台机器上, -h 参数可以省略,就像这样:
mysql -u root -p
如果你使用的是类 UNIX 系统,并且省略 -u 参数后,会把你登陆操作系统的用户名当作 MySQL 的用户名去处理。
1.5 客户端与服务器连接的过程
1.5.1 TCP/IP
真实环境中,数据库服务器进程和客户端进程可能运行在不同的主机中,它们之间必须通过网络来进行通讯。MySQL 采用 TCP 作为服务器和客户端之间的网络通信协议。在网络环境下,每台计算机都有一个唯一的 IP地址 ,如果某个进程有需要采用 TCP 协议进行网络通信方面的需求,可以向操作系统申请一个 端口号 ,这是一个整数值,它的取值范围是 0~65535 。这样在网络中的其他进程就可以通过 IP地址 + 端口号 的方式来与这个进程连接,这样进程之间就可以通过网络进行通信了。
MySQL 服务器启动的时候会默认申请 3306 端口号,之后就在这个端口号上等待客户端进程进行连接,用书面一点的话来说, MySQL 服务器会默认监听 3306 端口。
如果 3306 端口号已经被别的进程占用了或者我们单纯的想自定义该数据库实例监听的端口号,那我们可以在启动服务器程序的命令行里添加 -P 参数来明确指定一下端口号,比如这样:
mysqld -P3307
这样 MySQL 服务器在启动时就会去监听我们指定的端口号 3307 。
如果客户端进程想要使用 TCP/IP 网络来连接到服务器进程,比如我们在使用 mysql 来启动客户端程序时,在 -h 参数后必须跟随 IP地址 来作为需要连接的服务器进程所在主机的主机名,如果客户端进程和服务器进程在一台计算机中的话,我们可以使用 127.0.0.1 来代表本机的 IP地址 。另外,如果服务器进程监听的端口号不是默认的 3306 ,我们也可以在使用 mysql 启动客户端程序时使用 -P 参数(大写的 P ,小写的 p 是用来指定密码的)来指定需要连接到的端口号。比如我们现在已经在本机启动了服务器进程,监听的端口号为 3307 ,那我们启动客户端程序时可以这样写:
mysql -h127.0.0.1 -uroot -P3307 -p
在启动服务器程序的命令 mysqld 和启动客户端程序的命令 mysql 后边都可以使用 -P 参数。
1.5.2 命名管道和共享内存
客户端进程和服务器进程之间可以考虑使用 命名管道 或 共享内存 进行通信。不过启用这些通信方式的时候需要在启动服务器程序和客户端程序时添加一些参数:
使用 命名管道 来进行进程间通信
需要在启动服务器程序的命令中加上 --enable-named-pipe 参数,然后在启动客户端程序的命令中加入 --pipe 或者 --protocol=pipe 参数。
使用 共享内存 来进行进程间通信
需要在启动服务器程序的命令中加上 --shared-memory 参数,在成功启动服务器后, 共享内存 便成为本地客户端程序的默认连接方式,不过我们也可以在启动客户端程序的命令中加入 --protocol=memory 参数来显式的指定使用共享内存进行通信。
不过需要注意的是,使用 共享内存 的方式进行通信的服务器进程和客户端进程必须在同一台 Windows 主机中。
1.5.3 Unix域套接字文件
如果我们的服务器进程和客户端进程都运行在同一台操作系统为类 Unix 的机器上的话,我们可以使用 Unix域套接字文件 来进行进程间通信。如果我们在启动客户端程序的时候指定的主机名为 localhost ,或者指定了 --protocol=socket 的启动参数,那服务器程序和客户端程序之间就可以通过 Unix 域套接字文件来进行通信了。MySQL 服务器程序默认监听的 Unix 域套接字文件路径为 /tmp/mysql.sock ,客户端程序也默认连接到这个Unix 域套接字文件。如果我们想改变这个默认路径,可以在启动服务器程序时指定 socket 参数,就像这样:
mysqld --socket=/tmp/a.txt
这样服务器启动后便会监听 /tmp/a.txt 。在服务器改变了默认的 UNIX 域套接字文件后,如果客户端程序想通过 UNIX 域套接字文件进行通信的话,也需要显式的指定连接到的 UNIX 域套接字文件路径,就像这样:
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p
这样该客户端进程和服务器进程就可以通过路径为 /tmp/a.txt 的 Unix 域套接字文件进行通信了。