mysql 设置skip_name_resolve参数 日志 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolv...

本文详细分析了在Red Hat Enterprise Linux 7环境下安装MySQL 5.7.25时遇到的警告信息,主要涉及skip_name_resolve参数的配置问题。通过调整此参数避免了因DNS解析问题导致的连接超时,并提供了升级到5.7.26以修复相关BUG的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【环境介绍】
  系统环境:Red Hat Enterprise Linux 7 + 5.7.25-enterprise-commercial-advanced-log MySQL Enterprise Server - Advanced Edition (Commercial)

【情况描述】

 在安装完数据库之后,查看日志出现多个Warning信息:

2019-04-26T17:28:33.605994+08:00 0 [Note] Server socket created on IP: '::'.
2019-04-26T17:28:33.652894+08:00 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.653069+08:00 0 [Warning] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.653099+08:00 0 [Warning] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.653630+08:00 0 [Warning] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.653648+08:00 0 [Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.654222+08:00 0 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.707215+08:00 0 [Warning] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
2019-04-26T17:28:33.707301+08:00 0 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.

【情况分析】

skip_name_resolve参数说明:

此变量是根据--skip-name-resolve选项的值设置的。 如果是OFF,mysqld检查客户端连接时解析主机名。 如果它是ON,mysqld只使用IP号码;
在这种情况下,授权表中的所有主机列值必须是IP地址或localhost。数据库验证主机来源,服务器要执行DNS的正向和反向查找,如果DNS出问题,会堆积起来,最终导致连接超时,建议设置该参数。

 查看--skip-name-resolve参数信息:

root@(none) 08:45:14>show variables like 'skip_name_resolve';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | ON    |
+-------------------+-------+
1 row in set (0.01 sec)
root@(none) 08:45:38>system cat /etc/my.cnf|grep skip_name_resolve
skip_name_resolve = on
root@(none) 08:45:50>

 查看用户信息:

root@(none) 08:34:30>select distinct User,Host from mysql.user;
+---------------+-----------+
| User          | Host      |
+---------------+-----------+
| tuan          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.12 sec)
root@(none) 08:43:17>
官方参数信息:
 

 该数据库是新搭建的,没有其他操纵,且初始化时并没有报错,在MOS上面查询,查看跟相似BUG 23329861 - WARNING ABOUT LOCALHOST WHEN USING SKIP-NAME-RESOLVE

查看该BUG信息,该BUG将在5.7.26进行修复:

描述信息跟BUG一致:

 

 查看官方5.7.26文档对此BUG的描述:

 

【对数据库进行升级修复】

  升级过程忽略,查看错误日志信息,已经修复waring:

 

 [Warning] Plugin audit_log reported: 'Audit Log plugin supports a filtering, which has not been installed yet. Audit Log plugin will run in the legacy mode, which will be disabled in the next release.'

为相应的表及函数没有创建:

  • Linux and Unix: share/audit_log_filter_linux_install.sql
  • Windows: share/audit_log_filter_win_install.sql

mysql>SOURCE <path to MySQL base>/share/audit_log_filter_linux_install.sql

mysql> CREATE FUNCTION audit_log_read_bookmark RETURNS STRING SONAME 'audit_log.so';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE FUNCTION audit_log_read RETURNS STRING SONAME 'audit_log.so';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE FUNCTION audit_log_encryption_password_set RETURNS INTEGER SONAME 'audit_log.so';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE FUNCTION audit_log_encryption_password_get RETURNS STRING SONAME 'audit_log.so';
Query OK, 0 rows affected (0.00 sec)

 

转载于:https://www.cnblogs.com/zetanchen/p/10784102.html

<think>我们正在解决MySQL5.7中配置skip-name-resolve后,使用localhost无法连接的问题。根据引用[3],当使用skip-name-resolve时,MySQL服务器不会解析主机名,因此授权表中的主机名形式将被忽略,只能使用IP地址或特殊名称。而localhost在Unix系统中通常通过socket文件连接,但在配置skip-name-resolve后可能会影响本地连接。问题分析:在MySQL中,当启用skip-name-resolve选项时,MySQL将禁用DNS主机名解析。这意味着在授权表中,所有主机列的值必须是IP地址或'localhost'(但这里有一个特殊点)。但是,当使用skip-name-resolve时,对于本地连接,通常我们使用localhost或者127.0.0.1。然而,localhost在Unix系统上默认是通过Unixsocket文件(如/tmp/mysql.sock)连接的,而不是TCP/IP。而skip-name-resolve只影响TCP/IP连接的主机名解析,不影响socket连接。但是,当我们使用skip-name-resolve时,如果我们尝试用localhost通过TCP/IP连接(比如指定端口为3306),那么MySQL会尝试将其解析为IP,但由于禁用了DNS解析,它可能无法解析,从而导致连接失败。解决方案:1.确保使用socket连接:使用localhost连接时,确保它使用的是Unixsocket而不是TCP/IP。在连接字符串中,指定socket文件路径(如果有必要)或者不指定host(默认使用socket)或指定host为localhost(在Unix系统中默认使用socket)。例如,在命令行中:`mysql-uroot-p`或`mysql-uroot-p-hlocalhost`会使用socket连接。2.如果必须使用TCP/IP连接,则使用127.0.0.1代替localhost:因为当使用skip-name-resolve时,授权表中必须使用IP地址。因此,我们需要确保在授权表中有一条记录是针对127.0.0.1的。例如,创建一个用户并授权:CREATEUSER'myuser'@'127.0.0.1'IDENTIFIEDBY'mypassword';GRANTALLPRIVILEGESON*.*TO'myuser'@'127.0.0.1';然后连接时使用:`mysql-umyuser-p-h127.0.0.1-P3306`3.检查授权表中是否有'localhost'或'127.0.0.1'的授权记录:在mysql数据库中,执行:SELECThost,userFROMmysql.user;查看是否有如下记录:host:'localhost'->用于socket连接host:'127.0.0.1'->用于TCP/IP连接4.注意:在skip-name-resolve启用的情况下,授权表中使用主机名(如'myhost')的账户将无法通过TCP/IP连接(除非使用IP地址),因为主机名不会被解析。5.另外,确保MySQL服务器绑定了127.0.0.1地址。在配置文件(如my.cnf)中检查:bind-address=127.0.0.1或者注释掉bind-address行(这样会绑定所有接口)或者设为0.0.0.0(同样绑定所有)但根据安全要求设置。6.检查连接方式:如果使用localhost作为主机名,但MySQL客户端却试图使用TCP/IP连接(比如指定了端口或协议),那么可能连接失败。在启用skip-name-resolve后,应该避免使用主机名进行TCP连接。具体步骤:步骤1:确认skip-name-resolve已启用查看my.cnf文件(通常位于/etc/my.cnf或/etc/mysql/my.cnf),在[mysqld]部分有:skip-name-resolve步骤2:检查用户权限登录MySQL(如果还能用其他方式登录的话,比如用root通过socket登录):mysql-uroot-p#默认使用socket连接然后运行:SELECThost,userFROMmysql.user;确保有用户可以从'127.0.0.1'访问。如果没有,创建用户或修改已有用户的host为'127.0.0.1'。例如,如果原来有用户'root'@'localhost',但你想通过TCP/IP连接,那么需要有一个'root'@'127.0.0.1'的用户。注意,'localhost'和'127.0.0.1'在MySQL中被视为不同的主机。步骤3:修改连接命令在应用程序或命令行中,使用127.0.0.1代替localhost。步骤4:重启MySQL服务(如果需要)修改配置或用户权限后,可能需要重启服务(修改权限不需要重启,但修改bind-address需要)。如果问题仍然存在,检查错误日志(通常在/var/log/mysql/mysqld.log)以获取更多信息。注意:在Unix系统上,即使启用了skip-name-resolve,使用localhost作为主机名仍然可以通过socket连接。所以,如果你使用localhost连接失败,可能是因为你强制使用了TCP/IP连接(例如,指定了--protocol=TCP或者指定了-P3306端口),这时客户端就会尝试TCP连接,而由于skip-name-resolve,服务器将无法解析localhost,因此连接被拒绝(除非你有一个用户授权从127.0.0.1连接)。总结:当启用skip-name-resolve时,建议本地连接使用以下方式:-使用socket:连接字符串中不指定主机或指定主机为localhost,不指定端口(或指定socket文件)-使用TCP/IP:使用IP地址127.0.0.1,并确保用户有127.0.0.1的权限。因此,对于你的问题,配置skip-name-resolve后,使用localhost无法连接,可能是因为你在连接时使用了TCP/IP(如指定端口)而授权表中没有对应的IP地址授权。请尝试用127.0.0.1代替localhost进行TCP连接,或者使用socket连接。相关问题:1.如何检查MySQL中的用户权限?2.skip-name-resolve选项有什么作用?3.MySQL中localhost和127.0.0.1有什么区别?4.如何配置MySQL以使用Unixsocket连接?</think> ### MySQL 5.7配置skip-name-resolve后localhost连接问题解决方案 #### 问题原因分析 当MySQL 5.7启用`skip-name-resolve`时,服务器会**禁用DNS解析**,此时: 1. 所有连接请求必须通过**IP地址或特殊名称**认证 2. `localhost`在Unix系统中默认解析为`::1`(IPv6)或`127.0.0.1`(IPv4),但DNS解析被跳过 3. 授权表中的`'user'@'localhost'`条目失效(需改为IP形式) 4. 若客户端强制使用主机名连接,会触发错误: ```log Host 'localhost' is not allowed to connect to this MySQL server ``` --- #### 完整解决方案 **步骤1:修改用户权限** ```sql -- 创建或修改用户为IP授权(二选一) CREATE USER 'your_user'@'127.0.0.1' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'127.0.0.1'; -- 或修改现有localhost用户 UPDATE mysql.user SET host='127.0.0.1' WHERE host='localhost'; FLUSH PRIVILEGES; ``` **步骤2:调整连接方式** ```bash # 使用127.0.0.1代替localhost连接 mysql -u your_user -p -h 127.0.0.1 -P 3306 ``` **步骤3:检查绑定地址(可选)** 在`my.cnf`中确认: ```ini [mysqld] bind-address = 127.0.0.1 # 确保绑定IPv4 skip-name-resolve # 保持启用状态 ``` **步骤4:验证Socket连接(Unix系统专用)** ```bash # 直接使用socket连接(绕过TCP/IP) mysql -u root -p --protocol=socket ``` --- #### 关键注意事项 1. **权限表差异** MySQL将`'user'@'localhost'`和`'user'@'127.0.0.1'`视为**不同账户**,需分别授权[^3] 2. **IPv6处理** 如需支持`::1`: ```sql CREATE USER 'user'@'::1' IDENTIFIED BY 'password'; ``` 3. **应用连接配置** 在JDBC等连接串中修改: ```properties jdbc:mysql://127.0.0.1:3306/dbname?useSSL=false ``` --- #### 故障排查命令 ```sql -- 检查有效用户 SELECT user, host FROM mysql.user WHERE host IN ('127.0.0.1', '::1'); -- 查看连接方式 SHOW VARIABLES LIKE 'skip_networking'; # 应返回OFF ``` > 📌 **诊断提示**:若仍失败,检查错误日志位置: > ```bash > tail -f /var/log/mysql/error.log > ``` > 常见错误:`--skip-name-resolve`与`bind-address=::1`冲突导致IPv6解析失败[^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值