资讯动态

Linux下MySQL与Navicat连接指南:安装配置到远程排障

发布时间:2026/10/15 20:40:07 来源:尧图企业网站定制
1. 接手前的判断为什么要聊Linux下的MySQL与Navicat搭伙先说个真实场景我这两年帮人排查数据库问题遇到最多的情况不是SQL写错而是“明明在Windows上跑得好好的一上Linux服务器就各种连不上”。问了一圈十有八九是安装方式选错、字符集没配、或者Navicat那边端口权限没放开。所以这篇想聊的就是Linux环境里把MySQL装好、用顺再让Navicat稳稳连上的完整链路。这篇内容适合三类人刚接触Linux的运维新手需要自己搭测试环境的开发同学以及想把本地Windows上的Navicat和远程Linux服务器打通的老哥。我会从安装方式选型讲起把配置文件的关键项掰开揉碎最后给出Navicat连接时的常见报错对照表。整个流程我自己在不同发行版上反复跑过Ubuntu、CentOS都验证过你可以直接照着抄作业。2. 安装方式选型包管理器、二进制包还是Docker2.1 三种主流安装方式对比Linux下装MySQL最常见的路径有三条用发行版自带的包管理器安装、用官方二进制包手动部署、以及用Docker容器跑。三条路我都走过各自适用的场景完全不同。包管理器安装apt或yum是入门首选好处是依赖自动解决、服务管理简单、卸载也干净。但坑在于版本往往滞后比如某些CentOS镜像默认源里的MySQL可能是5.7甚至更老的版本而且不同发行版的默认配置路径和服务名还不一样mysqld、mysql、mysql-server够你喝一壶的。如果你要跑生产环境或者需要指定版本的小版本号我建议直接上官方二进制包。官方二进制包Generic Binary的好处是版本完全可控、二进制统一编译、不依赖系统库的特殊路径适合大规模批量部署时保证环境一致性。缺点是需要手动初始化数据目录、手动配置systemd服务步骤稍微繁琐一些。但只要你按文档顺序走踩坑概率并不高。Docker方式最轻量适合本地测试和隔离环境docker run一条命令就能起一个实例。不过我个人的体会是如果你本来就在学习MySQL本身、要理解它的目录结构和配置文件逻辑不建议一上来就用Docker它会把你和底层细节隔离开出了问题反而不好排查。反而是你已经懂了原理之后用Docker做版本切换和测试会很舒服。2.2 我默认推荐包管理器安装的场景如果只是在自己的Linux机器上装一个MySQL做学习或测试我强烈建议走系统包管理器。以Ubuntu为例命令只有三条sudo apt update sudo apt install mysql-server sudo systemctl status mysqlCentOS / Rocky Linux的话sudo yum install -y mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld安装完成后先别急着用检查一下服务状态和监听端口。服务起没起来看systemctl status端口有没有在听用ss -lntp | grep 3306。这一步很多人会忽略导致后面Navicat连不上时根本不知道是服务没起来还是防火墙挡住了。提示不同发行版装出来的MySQLroot账号的默认认证方式也不同。Ubuntu的mysql-server默认root用auth_socket插件认证也就是说只有系统root用户才能登录MySQL的rootCentOS默认是空密码。这两种情况在后面Navicat连接时都会产生“Access denied”之类的迷惑报错先心里有数。3. 初始化与基础配置从起服务到拿到一个能用的root账号3.1 初始化数据目录与安全设置向导如果你走的是二进制包安装手动初始化数据目录是绕不开的一步。命令很简单sudo mkdir -p /data/mysql sudo chown mysql:mysql /data/mysql sudo mysqld --initialize-insecure --usermysql --datadir/data/mysql这里我用的是--initialize-insecure而不是--initialize区别在于前者生成的root账号是空密码方便首次登录后再自己改后者会生成一个临时随机密码写进了日志文件需要你去/var/log/mysql/error.log里翻出来。二进制包部署时我建议用前者少折腾。初始化完成之后启动mysqld进程然后用自带的mysql_secure_installation走一遍安全加固sudo mysql_secure_installation这个交互脚本会依次问你是否设置root密码、是否删除匿名用户、是否禁止root远程登录、是否删除test数据库、是否刷新权限表。我的建议是除了“禁止root远程登录”这个可以视情况选否之外其余全部选y。root远程登录这件事后面Navicat连接时通常咱们会新建一个专用账号来连不会直接用root所以这里禁止掉反而更安全。3.2 核心配置字符集、时区、端口与目录装好之后最值得动手改的就是配置文件。MySQL在Linux下的配置文件是/etc/mysql/my.cnfDebian系或/etc/my.cnfRHEL系里面一般会通过!includedir把分目录的配置都包含进来。我习惯直接在主配置文件的[mysqld]段后面追加自己的设置这样不用记住每个子配置文件的命名规则。以下这段配置是我在所有环境里都会放的[mysqld] port 3306 bind-address 0.0.0.0 character-set-server utf8mb4 collation-server utf8mb4_unicode_ci default-time-zone 08:00 max_connections 500 innodb_buffer_pool_size 256M skip-name-resolve 1逐个说下关键项bind-address设为0.0.0.0表示接受任意网卡的连接请求。默认值通常是127.0.0.1只允许本机连接这也是Navicat远程连不上的首要原因。注意改完这个要确认防火墙放行了3306端口否则白搭。character-set-server和collation-server我统一用utf8mb4和utf8mb4_unicode_ci。现在MySQL 8.0默认就是utf8mb4但老版本默认可能是latin1存中文容易乱码。utf8mb4比utf8能多存emoji排序规则用unicode_ci在中文环境下的区分度也够用。default-time-zone 08:00是给咱们时区环境用的。如果不设置用NOW()函数取时间会和系统时间差8个小时排查起来很头大。skip-name-resolve 1是告诉MySQL不要对客户端IP做反向DNS解析。这个选项在客户端连接频繁时能省不少解析开销但要注意开启后MySQL账号授权时只能写IP不能写主机名。这个稍后创建Navicat连接账号时特别容易踩坑。改完配置后重启服务然后确认一下编码是否生效sudo systemctl restart mysql mysql -u root -p -e SHOW VARIABLES LIKE character_set%;看到character_set_server为utf8mb4说明配置生效了。4. 服务管理与基本使用从命令行到常用SQL操作4.1 登录认证方式解惑很多人在这一步就开始糊涂我第一次登录MySQL密码到底是啥前面提到了Ubuntu包管理器装完后root默认走的是auth_socket所以正确的登录方式是sudo mysql不需要输入任何密码因为你当前的系统用户是rootsocket认证直接通过。如果你用mysql -u root -p再随便敲个密码反而会报错。CentOS走yum装的话root初始是空密码mysql -u root就能进。登录进去之后第一件事就是把root密码改掉并且改成用caching_sha2_password插件认证否则后面Navicat会报告认证插件不支持ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY 你的强密码; FLUSH PRIVILEGES;为什么一定强调caching_sha2_password因为MySQL 8.0已经把默认认证插件换成了它而老客户端特别是较旧版本的Navicat只支持mysql_native_password会报“Authentication plugin caching_sha2_password cannot be loaded”。新版Navicat已经兼容了但如果你的客户端版本偏老也可以在MySQL里把账号改成老插件ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的强密码;这个属于兼容性操作能用新插件就尽量用新的。4.2 常用SQL速通进到MySQL交互界面后日常最常用的操作就是建库、建账号、授权和最简单的CRUD。我这里给出一套Navicat连接前必须完成的初始化SQL-- 创建用户并授权远程访问 CREATE USER dev% IDENTIFIED BY your_password; GRANT ALL PRIVILEGES ON *.* TO dev%; FLUSH PRIVILEGES; -- 创建数据库并指定字符集 CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;这里有两个细节。第一dev%中的%表示允许从任意IP连接你也可以写成dev192.168.1.%限定网段。如果前面配置里开启了skip-name-resolve这里只能写IP或%不能写devlocalhost之外的主机名。第二*.*表示对所有库所有表授权为了安全你完全可以只授权某个库GRANT ALL PRIVILEGES ON mydb.* TO dev%;。数据操作这边就不多展开了无非是CREATE TABLE、INSERT、SELECT、UPDATE、DELETE这套标准SQL。有一个小技巧是多用SHOW系列命令确认状态SHOW DATABASES; SHOW TABLES; SHOW PROCESSLIST; DESC table_name;SHOW PROCESSLIST特别有用连接数满了、有慢查询卡住的时候一眼就能看出来哪些连接在跑、跑了多久。5. Navicat连接Linux MySQL从权限到防火墙的完整排障5.1 连接前必须确认的三件事Navicat连不上Linux服务器上的MySQL其实翻来覆去就是三个层面MySQL本身没开远程、防火墙拦了3306端口、认证方式不兼容。按照下面的顺序检查基本能解决九成问题。先确认MySQL监听地址。执行ss -lntp | grep 3306如果看到127.0.0.1:3306说明MySQL只监听本机配置里的bind-address没有生效或者没重启服务。如果看到0.0.0.0:3306说明监听正常。然后从你的本机Linux上测试一下端口能否通到MySQL服务器telnet 服务器IP 3306能出现Connected to说明TCP层面没问题。如果连接超时或拒绝基本就可以锁死是防火墙或SELinux的问题了。CentOS / Rocky Linux上需要这样放行sudo firewall-cmd --permanent --add-port3306/tcp sudo firewall-cmd --reloadUbuntu上则是sudo ufw allow 3306/tcp sudo ufw reload再确认防火墙确实放行。如果服务器上开着SELinuxCentOS默认是开的还要检查MySQL的端口上下文sudo semanage port -l | grep mysqld不过多数桌面级Linux默认不开SELinux这个属于进阶排查项遇到端口明明通了但连接还是被重置时再查。5.2 Navicat连接参数怎么填打开Navicat新建连接的时候有几个参数经常有人填错连接名随意但建议写成“服务器名-环境-用途”方便区分。主机填Linux服务器的IP不是localhost除非Navicat就装在这台Linux的图形界面里。端口填3306前提是你没有在配置文件里改过端口。用户名和密码填之前创建并授权的那个账号别填root。如果连接测试报2003 - Cant connect to MySQL server on xxx那问题大概率在网络层面按上面TCP检查和防火墙流程走。如果报1045 - Access denied for user devxxx说明账号密码或者授权来源有问题重点检查SQL里dev%是否写对然后执行FLUSH PRIVILEGES。如果报2059 - Authentication plugin caching_sha2_password说明客户端不识别新插件把账号改成mysql_native_password再试试。5.3 Navicat里值得设置的两个隐藏项连接建立之后我习惯在Navicat里调整两个选项一个影响稳定性一个影响排查效率。第一个是在“高级”设置里勾选“使用压缩协议”。网络质量一般或者跨公网连接时压缩能明显降低传输量对大量数据查询的提升很直观。第二个是“保持连接间隔”。MySQL默认的wait_timeout是8小时如果Navicat挂在那里超过这个时间不动服务端会断开连接下次操作会报“Lost connection”。Navicat设置里可以在“保持连接间隔”处填一个小于wait_timeout的秒数比如7200秒让客户端定期发个探活包避免被服务端掐掉。提示如果你在Navicat里执行了一个大查询后发现界面卡住别急着关连接。先用服务器的SHOW PROCESSLIST看看有没有对应的查询还在跑。盲目重连不仅不会解决慢查询反复重启连接还可能让事务迟迟无法回滚把锁越拖越长。6. 常见问题排查实录与经验总结6.1 这台机器上遇到的问题速查表下面这张表是我在多个环境里反复遇到的典型场景照着定位会快很多。现象根因排查方法解决方案Navicat报2003无法连接bind-address未改或防火墙拦截ss -lntptelnet IP 3306改配置后重启MySQL放行3306命令行能进Navicat进不去root账号用了auth_socketsudo mysql后查plugin字段改用密码认证或新建远程账号报2059认证插件错误客户端太旧不认caching_sha2_password查看SHOW VARIABLES LIKE default_authentication_plugin将账号改回mysql_native_password报1045访问拒绝授权来源不对或密码错误SELECT user, host FROM mysql.user;重建账号并明确host为%或IP中文显示乱码客户端或服务端字符集不一致SHOW VARIABLES LIKE character_set%统一utf8mb4重启服务连接连上但执行SQL很慢反向DNS解析拖慢握手开启skip-name-resolve注意开启后授权只能写IPSQL超过一定时间就断开wait_timeout太短或防火墙空闲超时SHOW VARIABLES LIKE wait_timeoutNavicat开启保活或调大wait_timeout6.2 两条独家避坑心得第一别上来就改bind-address和root密码先确认你当前的环境是什么发行版、什么版本、默认配置路径是哪一套。同一个“MySQL”在Debian系和RHEL系下的配置结构差异很大不加区分地去搜教程很容易把A系统的配置项套到B系统上越改越乱。我见过最典型的例子是有人在Ubuntu上把/etc/mysql/my.cnf整个替换成CentOS风格的配置最后起不来服务还得手动恢复。第二创建远程连接账号时尽量用一个独立的“最小权限”账号而不是把所有权限都塞给root。日常用Navicat调试的时候我只给某个业务数据库的权限不给全局权限这样即使Navicat连接串被泄露影响也局限于单个库不至于整个实例裸奔。最后再分享一个小技巧如果你在配置和排障过程中改过多次配置项别忘了每次修改后用mysqld --validate-config预检一下配置文件的语法。这个命令不会启动数据库但能提前暴露配置项拼写错误、路径不存在之类的低级问题好过你改了配置重启才发现服务起不来还得翻日志定位半天。我在实际工作中已经习惯把它当作“配置保存前必做的一步”省了不少返工时间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑