在MySQL中可以通过指定 --protocol参数,选择连接MySQL的协议。
连接协议(Connection Protocals):
--protocol={TCP|SOCKET|PIPE|MEMORY}
TCP/IP (ALL)
-Transmission Control Protocal/Internet Protocal
-Connection:local & remote
-Supports Clasic & X protocol
Socket file (Unix including Linux/Mac)
-Connection:local
-Supports Clasic & X protocol
Named Pipe (Win)
-Connection:local
-Supports Clasic
Shared Memory (Win)
-Connection:local
-Supports Clasic
参考:
https://dev.mysql.com/doc/refman/8.0/en/connection-options.html#option_general_protocol
>4.2.3 Command Options for Connecting to the Server
在Windows环境中,和Unix Sockets连接MySQL相似,可以用Named Pipe协议连接MySQL。
下面介绍如何使用Named Pipe连接MySQL的步骤。
查看是否启用Named Pipe连接。
mysql> SHOW GLOBAL VARIABLES LIKE 'named_pipe';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| named_pipe | OFF |
+---------------+-------+
1 row in set, 1 warning (0.04 sec)
mysql>
如果值是ON,则表示启用;OFF表示禁用状态。
例:
# The next three options are mutually exclusive to SERVER_PORT below.
# skip-networking
enable-named-pipe
# shared-memory
# shared-memory-base-name=MYSQL
# The Pipe the MySQL Server will use.
socket=MYSQL
※ my.ini文件的位置可以通过【mysql --help】命令中的Default options内容查看。
例:
Default options are read from the following files in the given order:
C:\windows\my.ini C:\windows\my.cnf C:\my.ini C:\my.cnf E:\Soft\MySQL8.0\my.ini E:\Soft\MySQL8.0\my.cnf```
net stop <MySQL服务名>
net start <MySQL服务名>
例:
C:\Users\Administrator>net stop mysql80
MySQL80 服务正在停止.
MySQL80 服务已成功停止。
C:\Users\Administrator>net start mysql80
MySQL80 服务正在启动 ..
MySQL80 服务已经启动成功。
3.查看Named Pipe连接启用状态。
C:\Users\Administrator>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, 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.
mysql> SHOW GLOBAL VARIABLES LIKE 'named_pipe';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| named_pipe | ON |
+---------------+-------+
1 row in set, 1 warning (0.01 sec)
mysql> SHOW VARIABLES LIKE 'socket';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| socket | MYSQL |
+---------------+-------+
1 row in set, 1 warning (0.01 sec)
mysql> exit
Bye
通过指定–protocol=pipe,客户端可以使用Named Pipe连接MySQL服务器。
C:\Users\Administrator>mysql --protocol=pipe -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, 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.
mysql> \s
--------------
mysql Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL)
Connection id: 10
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 8.0.28 MySQL Community Server - GPL
Protocol version: 10
Connection: Named pipe: MySQL
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: gbk
Conn. characterset: gbk
UNIX socket: MySQL
Binary data as: Hexadecimal
Uptime: 7 min 22 sec
Threads: 2 Questions: 16 Slow queries: 0 Opens: 137 Flush tables: 3 Open tables: 56 Queries per second avg: 0.036
--------------
mysql>
不指定Socket的时候,会使用默认的Named pipe: MySQL。
C:\Users\Administrator>mysql --protocol=pipe -u root -p --socket=MYSQL
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, 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.
mysql> \s
--------------
mysql Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL)
Connection id: 11
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 8.0.28 MySQL Community Server - GPL
Protocol version: 10
Connection: Named pipe: MYSQL
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: gbk
Conn. characterset: gbk
UNIX socket: MYSQL
Binary data as: Hexadecimal
Uptime: 13 min 4 sec
Threads: 2 Questions: 25 Slow queries: 0 Opens: 138 Flush tables: 3 Open tables: 57 Queries per second avg: 0.031
--------------
mysql> exit
Bye
当服务器Named Pipe连接未启用的时候,使用Named Pipe连接会报如下的错误:
C:\Users\Administrator>mysql --protocol=pipe -u root -prootroot
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2017 (HY000): Can't open named pipe to host: . pipe: MySQL (2)
可参考如上的方法在服务器端进行相应的配置。
本文介绍了在Windows环境中,如何使用Named Pipe协议连接MySQL数据库的方法。