分析MySQL用户中的百分号%是否包含localhost?
分析MySQL用户中的百分号%是否包含localhost?
在操作MySQL时,我们经常会遇到一个问题:有时只创建了%的账号,可以通过localhost连接,有时候却不可以,这让人很是困惑。网上搜索也找不到满意的答案,因此,本文就来详细分析一下MySQL用户中的百分号%是否包含localhost。
1. 两种连接方式
这里说的两种连接方式指的是执行mysql命令时,-h参数填的是localhost还是IP。两种连接方式的区别如下:
-h参数为localhost
当-h参数为localhost的时候,实际上是使用socket连接的(默认连接方式),例如:
[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -u test_user -p -h localhost
Enter password:
=========省略===========
mysql> status
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 9
Current database:
Current user: test_user@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.21-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
登录后,复制从Current user可以看到用户是test_user@localhost,连接方式为Localhost via UNIX socket。
-h参数为IP
当-h参数为IP的时候,实际上是使用TCP连接的,例如:
[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -u test_user -p -h 127.0.0.1
Enter password:
=========省略===========
mysql> status
--------------
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 11
Current database:
Current user: test_user@127.0.0.1
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.21-log MySQL Community Server (GPL)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: utf8
登录后,复制从Current user可以看到用户是test_user@127.0.0.1,连接方式为TCP/IP。
2. 不同版本的差别
测试方法就是看能不能连接,如果不想看测试过程可以拉到最后看结论。
2.1 MySQL 8.0创建用户
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.11 |
+-----------+
1 row in set (0.00 sec)
mysql> create user test_user@'%' identified by 'test_user';
Query OK, 0 rows affected (0.07 sec)
登录后,复制使用localhost登录
[root@mysql-test-72 ~]# /usr/local/mysql80/bin/mysql -u test_user -p -h localhost
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.11 MySQL Community Server - GPL
=========省略===========
mysql> status
--------------
/usr/local/mysql80/bin/mysql Ver 8.0.11 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
Connection id: 9
Current database:
Current user: test_user@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.11 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
...
登录后,复制使用IP登录
[root@mysql-test-72 ~]# /usr/local/mysql80/bin/mysql -u test_user -p -h 127.0.0.1
Enter password:
=========省略===========
mysql> status
--------------
/usr/local/mysql80/bin/mysql Ver 8.0.11 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
Connection id: 8
Current database:
Current user: test_user@127.0.0.1
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.11 MySQL Community Server - GPL
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: utf8
...
登录后,复制结果显示8.0版本的MySQL,%包括localhost。
2.2 MySQL 5.7创建%用户
db83-3306>> create user test_user@'%' identified by 'test_user';
Query OK, 0 rows affected (0.00 sec)
登录后,复制使用localhost登录
[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -u test_user -p -h localhost
=========省略===========
mysql> status
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 9
Current database:
Current user: test_user@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.21-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
....
登录后,复制使用IP登录
[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -u test_user -p -h 127.0.0.1
Enter password:
=========省略===========
mysql> status
--------------
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib

-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql的触发器是什么级的 2023-05-14 07:00:02
-
mysql如何修改字段类型 2023-05-14 07:00:02
-
如何解决mysql服务1067错误问题 2023-05-14 07:00:02