MySQL 8.0免安装部署与排错:my.ini配置到服务注册

发布时间:2026/10/26 17:43:20
MySQL 8.0免安装部署与排错:my.ini配置到服务注册 简介这是一份面向开发者、数据库初学者与运维测试人员的 MySQL 8.0 免安装压缩包主要解决本机快速部署、环境复用以及临时项目联调时反复安装配置的问题可用于 SQL 练习、版本验证、轻量测试库搭建和多环境切换等场景也适合需要便携数据库环境的读者。压缩包共 420 个文件整体约 186.28MB囊括 exe、dll、xml、sql、ini、bat 等可执行组件、配置脚本与示例文件也包含 sdi、ibd、ibdata1、undo 及日志文件等实例元数据和 InnoDB 存储结构相关资料目录层次较完整。已有 594 人学习下载具备一定的使用参考价值。资源保留服务端程序、客户端工具、启动脚本、my.ini 配置入口与说明文件解压后即可获得一套独立运行的 MySQL 8.0 环境便于读者围绕数据库连接、脚本执行、参数调整、字符集配置和项目适配进行自主验证与学习。1. 为什么我还在用 mysql8.0 免安装包一台不敢乱动的机器上个月给一台内部测试机配环境机器上压着两个跑了三年的老系统谁都不敢碰。装 MySQL 安装版要走 Installer、写注册表、改系统服务万一跟机器上已有的东西打架回滚都麻烦。最后我选的还是 mysql8.0 免安装包也就是官方那个 ZIP Archive解压、写配置文件、初始化、注册服务全流程不到二十分钟卸载时把服务删掉、目录一删就干净了。这就是 mysql 免安装 版本最实在的价值它对系统是“无痕”的所有东西都在一个目录里mysql数据库 的数据文件、日志、配置你都能一眼看到。但免安装也意味着没有向导帮你兜底版本选错、my.ini 少一行、初始化参数写反都会在启动那一步翻车而且报错还藏在 error log 里。这篇记录写给我自己也写给第一次给 mysql8 做免安装部署的人。2. 解压与目录规划mysql-8.0 免安装包解压后到底有什么2.1 选包ZIP Archive 和那几个容易看错的包名先把包的类别分清楚。官方下载页面上同一个 8.0 版本会挂出好几行MySQL Installer、ZIP Archive、ZIP Archive Debug Binaries Test Suite、还有 Source Code。免安装要的是ZIP Archive那一行Windows 平台选 64 位Linux 平台对应的是通用二进制包 tar.xz不是源码包。包名通常长这样8.0.4x 里的 x 按你实际下载到的小版本替换mysql-8.0.4x-winx64.zipDebug 包不要下。它带调试符号体积差不多翻倍跑起来还慢除非你要拿 mysqld 做崩溃分析否则纯属给自己找事。Source Code 更不用碰那是编译用的编译完还得自己处理依赖跟“免安装”三个字没关系。小版本怎么挑我的习惯是取 8.0 系列里当前最新的补丁版本。8.0 是个长期维护的大版本小版本之间配置写法基本一致但认证插件、参数弃用这些细节在 8.0.2x 到 8.0.4x 之间有变化越新的小版本资料越对得上。别去下 5.7 的包再套 8.0 的配置文件这是新手最常见的错配5.7 允许lower_case_table_names在启动时随便改8.0 从初始化那一刻就锁死了两边的 my.ini 不能通用。还有一点要提前知道8.0 默认认证插件是caching_sha2_password5.7 是mysql_native_password。如果你这台库要给一些老客户端、老驱动连第一次就规划好认证方式别等上线了再改改起来要动账号密码。2.2 解压路径为什么我把 mysql 放在 D 盘根目录下解压这个动作本身没技术含量位置选错才是麻烦的开始。三条硬规矩我每次部署都照做第一路径里不要有空格。C:\Program Files\这种带空格的路径在某些命令行拼接场景下会把参数截断服务注册时特别容易出问题。第二路径里不要有中文。my.ini 里basedir和datadir写中文路径mysqld 读配置时的编码处理不一定如你所愿报错信息还特别难懂。第三不要放在系统盘的用户目录下面。C:\Users\xxx\这种路径受 UAC 和用户权限影响注册成服务后服务是以系统账户跑的可能读写不到你的用户目录。我一般这样规划basedir 和 datadir 分开放用途路径示例说明程序目录 basedirD:/mysql/mysql-8.0.4x-winx64解压出来的原始目录升级时整个替换数据目录 datadirD:/mysql/data独立出来升级时不动日志目录D:/mysql/logserror log、slow log 放这里临时目录 tmpdirD:/mysql/tmp大排序、大查询临时文件把 data 从 basedir 里拆出来是免安装版最值得做的一件事。MySQL 小版本升级通常只需要下载新的 zip 解压到新目录、改一下 basedir 指向、重启服务data 目录原地不动数据一行不丢。如果 data 还在 basedir 里面升级就得整个目录替换风险立刻上一个量级。data 和 logs、tmp 这几个目录Windows 下手动建好就行注意空目录不能被 git 之类的工具吞掉建完确认一下确实存在。Linux 上的思路一样只是目录约定不同对照着看项目Windows ZIPLinux 通用二进制程序目录D:/mysql/mysql-8.0.4x-winx64/usr/local/mysql数据目录D:/mysql/data/data/mysql/data配置文件basedir 下my.ini/etc/my.cnf服务方式mysqld --install注册 Windows 服务systemd unit 或 mysqld_safe运行账户系统服务账户独立的 mysql 用户chown -R mysql:mysqlLinux 那边多一步权限处理解压完目录属主还是 root必须chown -R mysql:mysql /usr/local/mysql /data/mysql否则初始化时 mysqld 写不进 datadir报错信息里只会说“Permission denied”不会告诉你具体缺哪个权限。glibc 版本也要留意8.0 的通用二进制包对 glibc 有最低要求很老的发行版可能跑不起来这种机器就老老实实走源码编译或者换包。2.3 先别初始化用 mysqld -V 确认运行库齐全解压完先别急着敲初始化命令做一次最小验证。把 bin 目录加进 PATH这一步是为了后面所有命令都不用写全路径:: 临时生效只在当前窗口有效适合先试 set PATHD:\mysql\mysql-8.0.4x-winx64\bin;%PATH% :: 永久生效需要重开命令行窗口 setx PATH %PATH%;D:\mysql\mysql-8.0.4x-winx64\bin逻辑说明set只影响当前 cmd 会话关掉就没了适合验证阶段用setx写进用户环境变量永久生效但它有两个坑——第一%PATH%在setx执行时会被展开成当时的完整路径如果 PATH 特别长可能超过 1024 字符被截断第二它对已经打开的窗口无效。所以我一般先用set验证确认没问题再改系统环境变量对话框或者用setx之后立刻检查一遍。PATH 加好之后跑一句mysqld -V正常输出类似mysqld Ver 8.0.4x for Win64 on x86_64。这一句能跑通说明三件事都正常bin 目录进的没错、VC 运行库齐全、可执行文件没被杀毒软件截断。如果这里就报“找不到 VCRUNTIME140_1.dll”别往下走了先装微软的 VC 运行库8.0 是 VS2015 之后工具链编译的免安装包里不带这个运行库。这个问题后面第 5 章还会细说它是免安装部署里出现频率最高的翻车点。3. my.ini 配置与初始化mysql8 免安装的第一份配置文件3.1 my.ini 放在哪位置、文件名、编码三件事免安装版没有任何默认配置文件必须自己写。名字就叫my.iniWindows 下放在 basedir 根目录Linux 下是my.cnf一般放/etc/my.cnf。文件名和后缀都不能错my.ini.txt、my.conf、my.ini.bak一律不认。位置这块有个容易被忽略的点mysqld找配置文件的顺序是命令行--defaults-file指定优先没指定就去默认路径搜。Windows 上的默认搜索路径包括C:\my.ini、C:\Windows\my.ini、basedir 下的my.ini等。所以哪怕你把文件放对了只要注册服务时没显式指定也可能读到别处的老配置——这点在 4.1 节会展开讲。编码问题值得单独说一句。用记事本另存为 UTF-8 时默认会带 BOM 头mysqld 读到文件第一行就懵了报的错跟配置内容毫无关系查起来极其费劲。我一般用 VS Code 保存右下角确认编码是UTF-8而不是UTF-8 with BOM实在只有记事本就选 ANSI。3.2 一份能直接抄的 my.ini 模板下面这份是我用了很多次的模板删掉了跟具体机器绑定的部分剩下的都能直接用[mysqld] # 程序目录指向解压出来的 mysql-8.0.4x-winx64 basedirD:/mysql/mysql-8.0.4x-winx64 # 数据目录必须独立于 basedir且初始化前为空 datadirD:/mysql/data # 监听端口默认 3306同机多实例时改成 3307 之类 port3306 # 8.0 服务端默认字符集强烈建议显式写 character-set-serverutf8mb4 collation-serverutf8mb4_0900_ai_ci # 认证插件需要兼容老客户端时改成 mysql_native_password default_authentication_plugincaching_sha2_password # 表名大小写策略Windows 下一般设 1初始化后不可修改 lower_case_table_names1 # 最大连接数按机器内存和业务量调默认 151 偏小 max_connections500 # 错误日志所在目录必须提前建好mysqld 不会自动创建 log-errorD:/mysql/logs/error.log # 慢查询日志排查性能问题必备 slow_query_log1 slow_query_log_fileD:/mysql/logs/slow.log long_query_time2 [client] port3306 default-character-setutf8mb4 [mysql] default-character-setutf8mb4参数挨个解释重点说几个真会出事的。basedir和datadir统一用正斜杠/。Windows 下习惯写反斜杠但 ini 文件里单反斜杠会被当成转义符D:\mysql\data里的\m、\d都可能被误解。要么全用正斜杠要么写双反斜杠D:\\mysql\\data前者更清爽。lower_case_table_names1表示表名存小写、比较不区分大小写跟 Windows 文件系统行为一致。这个参数在 8.0 里只能在初始化那一刻定下来初始化完成后再改mysqld 直接拒绝启动。如果这台库以后可能迁到 Linux就得提前想好Linux 上这个参数默认是 0两边不一致会导致迁移后SELECT * FROM User和select * from user的行为完全不同。我一般 Windows 下保持 1迁移时统一在目标端重新建表结构不做物理文件拷贝。default_authentication_plugin这个参数在 8.0 后期版本已经被标记为弃用新的写法是authentication_policy但它到 8.0.4x 都还能正常生效只会打一条警告。如果你手上的客户里有 5.x 时代的驱动改这个参数是最省事的兼容方案比逼着业务方全量升级驱动现实得多。log-error指定的目录必须先存在。这是新手最容易踩的一脚datadir 不存在 mysqld 会自动创建log-error 的父目录不存在就直接启动失败而且失败的提示非常隐蔽因为错误本来该写进那个日志文件里结果文件都建不出来。3.3 初始化 datadir--initialize 和 --initialize-insecure 怎么选配置写好开始第一次初始化。这一步会把 datadir 从空目录变成一套完整的系统表空间做错了只能删库重来所以命令要看清楚:: 方式一生成随机 root 密码输出在控制台推荐 mysqld --defaults-fileD:\mysql\my.ini --initialize --console :: 方式二root 空密码只适合本机临时库 mysqld --defaults-fileD:\mysql\my.ini --initialize-insecure --console两个参数的区别就一句话--initialize给 root 生成一串随机临时密码首次登录必须改--initialize-insecure把 root 密码设成空登录时直接回车省事但危险。我默认用第一种临时密码在输出里长这样[Note] A temporary password is generated for rootlocalhost: kq3Rt!9xLm2p这串东西只在控制台出现这一次没记下来就得走第 5 章的密码找回流程。--console的作用是把日志打到当前窗口不加这个参数输出会按log-error的配置写进文件很多人敲完命令看到窗口一片空白以为成功了其实密码已经写进 error log 里了。初始化过程中还要盯几个点。如果 datadir 里已经有文件哪怕是隐藏的.gitkeep初始化会直接失败并提示目录非空所以初始化前最好dir /a看一眼。初始化耗时跟机器性能有关一般十几秒到一分钟期间别 CtrlC 打断中途中断的 datadir 是不完整的只能清空重来。命令跑完没报错datadir 里应该出现这些内容ibdata1、ib_logfile系列、mysql、sys、performance_schema几个系统库目录、mysql.ibd。看到它们说明系统表空间建好了接下来就是让 mysqld 跑起来。4. 注册服务与首次登录把 mysqld 变成开机自启4.1 注册 Windows 服务--defaults-file 的位置决定生死免安装版最方便的用法是把 mysqld 注册成 Windows 服务开机自启、后台运行不用每次开个黑窗口挂着。命令只有一行:: 注册服务服务名叫 MySQL80可以自定义 mysqld --install MySQL80 --defaults-fileD:\mysql\my.ini :: 启动 / 停止 / 删除 net start MySQL80 net stop MySQL80 mysqld --remove MySQL80这行命令的坑全在--defaults-file上。注册服务时这个参数会连同路径一起被写进服务的启动参数里如果注册时压根没写这个参数服务启动时 mysqld 就会走默认搜索路径去找 my.ini很可能读到C:\下某个陈年旧文件或者干脆找不到用一套内置默认值跑起来。表现出来就是明明 my.ini 里写了端口 3307、字符集 utf8mb4连上去一查全是 3306 和 latin1。还有一种情况是写了但写法不对。路径里有空格一定要用引号包住路径必须是绝对路径写成相对路径注册进去服务启动时的工作目录不确定等于没写。我见过最隐蔽的一次是--defaults-file写在了--install前面mysqld 把它当成自己的选项解析了服务注册是成功的但启动参数里没带上排查了半天。服务注册完先别急着net start先手动前台跑一次把问题暴露在眼前:: 前台启动日志直接打屏CtrlC 退出 mysqld --defaults-fileD:\mysql\my.ini --console这条命令能正常停在那里不退出说明配置、权限、数据目录全都对这时候再 CtrlC 掉用net start起服务几乎不会失败。反过来如果net start报“服务无法启动发生系统错误 1067”前台模式跑一遍错误信息立刻就有了比翻事件查看器快得多。这个习惯我保持了几年屡试不爽。4.2 首次登录与改密码8.0 的 ALTER USER 和 5.7 不一样服务起来之后用初始化时那串临时密码登录mysql -uroot -p -h127.0.0.1 -P3306这里建议显式写-h127.0.0.1和-P。不写主机名时Windows 客户端可能走命名管道或者别的连接方式报出来的错跟密码错、权限错混在一起很难分辨。登录进去第一件事就是改密码8.0 下临时密码不改的话除了ALTER USER之外啥也干不了-- 8.0 改密码的标准写法 ALTER USER rootlocalhost IDENTIFIED BY YourStr0ngPass; -- 查看当前认证插件和账号状态 SELECT user, host, plugin FROM mysql.user; -- 刷新权限改完账号相关一定要执行 FLUSH PRIVILEGES;注意 8.0 里已经没有SET PASSWORD PASSWORD(xxx)这种写法了PASSWORD()函数在 8.0 里被移除。网上大量 5.7 时代的教程还在用照抄必然报语法错误。同理GRANT ... IDENTIFIED BY这种“建用户顺便授权”的写法在 8.0 也被砍了必须先CREATE USER再GRANT-- 先建用户 CREATE USER app_user% IDENTIFIED BY AppPass2024; -- 再授权只给业务库的必要权限 GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO app_user%; -- 需要建表权限时再单独加 GRANT CREATE, ALTER, INDEX ON app_db.* TO app_user%; FLUSH PRIVILEGES;权限按需给不要图省事直接GRANT ALL ON *.* TO app_user%。免安装版经常被拿来做开发库和测试库一个全权限账号在局域网里裸奔出事的概率比想象中高。4.3 开放远程连接三处要同时改少一处都连不上默认装完只能本机连要让局域网里其他机器连进来三处缺一不可。第一处是 my.ini 里的监听地址。8.0 的bind-address默认值通常是*也就是监听所有网卡但有些发行版和打包方式会改成127.0.0.1。保险起见显式写一行[mysqld] bind-address0.0.0.0第二处是账号的 host 部分。app_userlocalhost只允许本机远程必须用app_user%或者更精确的网段比如app_user192.168.1.%。第三处是系统防火墙。Windows 防火墙默认拦入站 3306加一条规则:: 允许 3306 入站仅内网使用 netsh advfirewall firewall add rule nameMySQL 3306 dirin actionallow protocolTCP localport3306三处改完net stop MySQL80 net start MySQL80重启服务从另一台机器上用mysql -h服务器IP -uapp_user -p试一下。如果还连不上先在本机netstat -ano | findstr 3306看端口是不是真的监听在0.0.0.0再看防火墙规则有没有生效顺着这条链路查比瞎猜快。最后顺手处理一下服务账户。Windows 服务默认以 LocalSystem 跑权限足够读写 datadir一般不用改。如果 datadir 放在网络盘或者特殊权限的目录下可能要给服务换成有权限的账户这一步在“服务”管理器里改改完记得重启服务验证一次。5. mysql8 免安装排查五个真实翻车现场与救法5.1 初始化阶段的两个坑现象敲mysqld --initialize命令行立刻返回没有输出datadir 里空空如也。原因没加--console日志按log-error配置写进了文件而log-error的父目录如果不存在mysqld 建不出日志文件两边都没留下任何痕迹。看起来像是“什么也没发生”实际是失败得悄无声息。解决命令加上--console重跑同时确认log-error指向的目录已经手动建好。如果是 datadir 里已经有残留文件导致失败先把 datadir 清空确认里面没有有用数据再重新初始化。我一般养成习惯初始化前先dir /a看一眼 datadir空的才动手。现象初始化报错提示lower_case_table_names的值跟已有数据不一致或者服务起来之后一改这个参数就启动失败。原因8.0 把lower_case_table_names的取值固化在数据字典里了初始化时是什么值以后就得是什么值。很多人是先在 my.ini 里漏写了这一行按默认值初始化完发现表名大小写不符合预期再回头加上去服务直接起不来。解决只能在初始化之前把值定好。已经初始化完又想改唯一的办法是备份数据、清空 datadir、改 my.ini、重新初始化、再导数据回来。这就是我说的免安装版的“后悔药”很少——很多参数只在初始化那一瞬间生效。所以 my.ini 写完宁可多花五分钟逐行核对也别急着敲初始化命令。5.2 服务启动阶段的坑现象命令行执行mysqld弹窗报“无法启动此程序因为计算机中丢失 VCRUNTIME140_1.dll”。原因8.0 的 Windows 包是用较新的 VS 工具链编译的依赖 VC 运行库而免安装压缩包里只管 MySQL 自己的文件运行库得系统里本来就有。干净的服务器上大概率没有。解决装微软官方的 VC 运行库合集x64 版本装完不用重启直接再跑一次mysqld -V验证。这一步特别容易被误判成“包损坏了”然后反复重新下载解压浪费大量时间。记住这个判断顺序先看 dll 报错再怀疑文件完整性。现象net start MySQL80报“发生系统错误 1067进程意外终止”事件查看器里信息很少。原因服务启动失败的原因太多了——my.ini 路径没带、端口被占、datadir 权限不足、日志目录不存在任何一种都会表现成 1067。解决不要硬刚服务改用前台模式mysqld --defaults-fileD:\mysql\my.ini --console真实报错会立刻打屏。我遇得最多的是端口占用用netstat -ano | findstr 3306找到占用进程要么换端口要么把冲突进程停掉。如果是服务注册时没带--defaults-file先mysqld --remove MySQL80删掉服务再按 4.1 节的写法重新注册。5.3 连接与密码相关的坑现象root 临时密码没记下来或者密码输错几次后彻底进不去了。原因--initialize生成的密码只输出一次没存下来就是没有改密码之前又做不了任何操作形成死锁。解决走跳过权限表的流程。先停服务用--skip-grant-tables --skip-networking前台启动这条路径只允许本机连、不校验密码进去之后-- 跳过权限表模式下必须先刷新否则 ALTER USER 不生效 FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY NewStr0ngPass;改完 CtrlC 停掉正常启动服务用新密码登录。8.0 里--skip-grant-tables会自动带上--skip-networking所以远程连不进去是正常的别以为又出了别的问题。现象本地用命令行能连业务程序连上来报Client does not support authentication protocol requested by server或者错误码 1251。原因账号用的是 8.0 默认的caching_sha2_password插件而客户端的驱动或客户端版本太老不认这个插件。解决两条路一是升级驱动这是根治二是把账号改成兼容插件ALTER USER app_user% IDENTIFIED WITH mysql_native_password BY AppPass2024; FLUSH PRIVILEGES;改完客户端立刻能连。代价是失去了 SHA256 那套更安全的认证机制所以只在确实没法升级驱动的存量系统上用新项目一律走默认插件。5.4 想推倒重来时的清理清单免安装版的好处是删得干净但删之前得知道删什么不然会留下半截服务或者残留文件下次重装接着踩坑。顺序是先net stop MySQL80再mysqld --remove MySQL80删服务然后确认“服务”列表里已经没有 MySQL80 这一项。接着把 basedir、datadir、logs 三个目录整个删掉最后检查环境变量 PATH 里那截 bin 路径要不要清。最容易漏的是服务没删干净就删目录。目录一删服务还在下次net start报的错会非常莫名其妙而且mysqld --remove这时候已经找不到可执行文件了只能去注册表里手工清。所以顺序不能反先删服务后删目录。6. 装完怎么验证三条命令确认 mysql8 免安装环境真的能跑装完不算完能跑才算。我做免安装部署收尾固定跑三步验证每步都有明确的期望结果任何一步对不上就回去查对应环节。第一步查服务端身份和关键路径是否跟 my.ini 一致SELECT VERSION(), basedir, datadir, port, character_set_server, lower_case_table_names;期望结果是版本号是 8.0.4x、basedir和datadir正是你配置的那两个路径、端口和字符集都对得上。这一条能同时验证配置有没有生效、服务读的是不是正确的 my.ini比看日志快。第二步完整走一遍建库建表写入读出的链路CREATE DATABASE verify_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE verify_db; CREATE TABLE t_check (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP); INSERT INTO t_check (name) VALUES (安装验证); SELECT * FROM t_check;这一步验证的是权限、字符集、存储引擎三样东西。如果中文插进去变成问号说明客户端和服务端字符集有一端没配好如果建表报错多半是权限给窄了。第三步也是最关键的一步重启服务再查一次数据还在不在net stop MySQL80 net start MySQL80起来之后重新执行SELECT COUNT(*) FROM verify_db.t_check;返回 1 就说明数据真正落到了 datadir 里不是内存里的临时状态。这一步专门用来抓“datadir 配错位置”这种隐蔽问题——有些机器上服务能起、能写但数据写到了默认目录而不是你 my.ini 里指定的目录重启或者换机器就全丢了。验证项命令期望结果版本与路径SELECT basedir, datadir与 my.ini 配置完全一致字符集SELECT character_set_serverutf8mb4写入链路INSERT 后 SELECT中文正常显示持久化重启服务后 COUNT数据仍在远程连通另一台机器mysql -hIP能登录并查询从那以后我每次做完免安装部署都强制自己把这三步走一遍尤其是重启那一步一次都不省。免安装版所有东西都摊在明面上好处是透明坏处也是透明——它不替你兜任何底配置里每一行写错都会在某个时刻原样还给你。这套流程照着走八成的坑在初始化之前就能避开。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询