资讯动态

数仓搭建必备:MySQL安装与Navicat远程连接实操指南

发布时间:2026/10/14 16:24:19 来源:尧图企业网站定制
记得去年在搞数仓项目的时候最闹心的不是Hive、Spark那堆分布式组件反而是开局第一步——装MySQL。当时我跟着一套数仓实战课程学视频里老师十分钟就装完了轮到自己手上不是权限坑就是防火墙坑远程连不上急得挠头。后来踩得多了才摸清套路其实安装MySQL和用Navicat连远程库这件事本身一点也不难难的是一堆藏在细节里的前置认知。这篇笔记就把我当时记录的内容重新整理一遍从“为什么数仓要依赖MySQL”讲起到具体的安装步骤、远程连接配置再到常见的故障排查尽量让你少走弯路。这篇文章适合刚接触数仓搭建的人尤其是第一次在Linux服务器上装MySQL、然后用Windows上的Navicat去连库的朋友。你不需要有很深的DBA基础只要会敲基本的Linux命令、能看懂简单的SQL就行。读完之后你应该能独立完成一套干净的MySQL部署并且顺利把它接到可视化工具上。1. 数仓搭建中MySQL的角色与安装前的思路1.1 为什么数仓的元数据要放在MySQL里很多人一开始不明白数仓体系里Hive、Hadoop都是大块头为什么MySQL这种“小库”反而成了必装项。其实在典型的离线数仓架构里MySQL主要承担两类职责。第一类是作为Hive的元数据库。Hive本身的表结构、分区信息、字段注释等元数据默认存储在自带的Derby里但Derby只支持单会话一旦你同时开多个终端操作Hive就会报错。所以生产环境几乎都会把Hive的元数据迁移到MySQL中让Metastore服务通过JDBC读写MySQL。这样多个客户端并发查表、写表才不会互相打架。第二类是作为调度平台或数据管理平台的业务库。比如你在用某套调度系统管理数仓任务时任务流定义、调度时间、运行记录这些信息都需要落库。MySQL因为轻量、稳定、运维成本低成了这类场景的首选。还有数据质量管理、指标管理系统也都喜欢用MySQL存配置信息。所以你在学习数仓搭建时安装MySQL不是单纯的“装一个数据库”而是在为整个上层体系打地基。地基没打牢后面Hive跑不起来调度平台也没法初始化表结构课程进度直接卡死。1.2 环境准备与版本选型我当时的实验环境是三台Linux服务器CentOS 7.9内存各8G硬盘50G。这套配置跑数仓的各个组件刚好够用。MySQL就装在其中的一台机器上这台机器同时也承担Hive Metastore的访问压力。版本选择是个值得说两句的事情。课程里用的是MySQL 5.7我一开始图新鲜装了8.0结果跟Hive的驱动兼容性出了问题后来老老实实换回5.7。这里给个明确建议如果你是为了跟课做数仓项目就用课程指定的版本不要自己乱升级。因为Hive的mysql-connector-java版本对MySQL服务端版本有依赖5.7和8.0的认证方式不一样8.0默认的caching_sha2_password插件在旧的JDBC驱动下会报“Authentication plugin”错误折腾起来非常费时间。如果你是自己做新项目没有兼容性包袱那可以装8.0性能和安全上更强。但就数仓教学场景而言5.7依然是稳妥选择。另外操作系统方面CentOS 7自带的软件源里没有MySQL默认是MariaDB所以不能用yum直接装MySQL需要先添加MySQL官方源或者直接下载rpm包。1.3 安装包的获取与校验安装MySQL主要有两种方式一种是下载官方yum源然后用yum安装另一种是直接下载对应版本的rpm包用rpm或yum本地安装。我推荐后者因为yum源方式有时候会因为网络原因卡在“Downloading packages”很久而且源地址在国外速度不稳定。直接下载rpm包到本地再装整个过程可以掌控出了问题也好排查。我当时用的是MySQL 5.7.38的rpm包包含以下几个文件mysql-community-server-5.7.38-1.el7.x86_64.rpmmysql-community-client-5.7.38-1.el7.x86_64.rpmmysql-community-common-5.7.38-1.el7.x86_64.rpmmysql-community-libs-5.7.38-1.el7.x86_64.rpm这几个包的顺序不能乱common → libs → client → server。libs里面包含客户端连接时需要的动态库server依赖clientclient依赖libslibs依赖common。用rpm命令逐个安装时会自动检查依赖如果顺序反了会直接报错。下载完成后强烈建议做一次md5校验官方页面提供了每个文件的md5值。别嫌麻烦我身边真有人下到过被篡改的安装包导致装完之后MySQL行为诡异最后重装了事。校验命令很简单md5sum mysql-community-server-5.7.38-1.el7.x86_64.rpm对比一下输出的md5值和官网列出的值一致再继续。2. MySQL安装的完整实操2.1 卸载旧版本与依赖清理这一步很多人会跳过导致后面各种莫名冲突。新装的服务器一般没有MySQL但CentOS会自带MariaDB-libs。MariaDB和MySQL的文件路径、服务名有重叠不卸载的话装完MySQL可能启动失败或者mysql命令指向了MariaDB的客户端。先查一下当前系统里有没有装相关包rpm -qa | grep mysql rpm -qa | grep mariadb如果有输出比如mariadb-libs-5.5.68-1.el7.x86_64那就先卸掉yum remove mariadb-libs -y卸载完之后再看看/etc/my.cnf、/var/lib/mysql这些目录是否残留。如果是全新机器一般是没有的。如果有残留建议先备份再删除避免数据丢失。注意卸载MariaDB-libs会影响依赖它的软件包比如PostgreSQL的某些驱动。如果你机器上还有其他数据库相关的组件建议用yum remove而不是rpm -eyum会帮你判断哪些包会被一起移除让你有个确认的过程。2.2 安装MySQL Server把四个rpm包放到同一个目录然后按顺序安装。也可以用一行命令直接装所有包让yum自动处理依赖顺序yum install -y mysql-community-*.rpm这个命令会把匹配到的所有rpm包一起装yum会自己解析依赖关系。我测试过这种方式比手动一个个rpm -ivh省心而且不会因为顺序问题报错。安装完成后验证一下版本mysql --version如果输出类似mysql Ver 14.14 Distrib 5.7.38说明客户端工具已经就位。服务端是否安装完整可以通过rpm -qa | grep mysql看到所有相关包。这里还有一个细节MySQL 5.7安装后默认的数据目录是/var/lib/mysql日志在/var/log/mysqld.log配置文件在/etc/my.cnf。知道这些路径很重要后面出问题排查的时候都靠它们。2.3 初始化与启动服务MySQL 5.7在首次启动时会自动初始化数据目录并生成一个临时root密码。这个初始化过程不需要手动执行mysql_install_db除非你自定义了数据目录。直接启动服务即可systemctl start mysqld systemctl enable mysqld启动后查看临时密码grep temporary password /var/log/mysqld.log输出会类似这样[Note] A temporary password is generated for rootlocalhost: xxxxxxxx那个xxxxxxxx就是临时密码。注意从启动到生成密码之间可能有一两秒延迟如果你立刻去grep发现没有内容等两秒再试。拿到临时密码后用它登录MySQLmysql -uroot -pxxxxxxxx登录成功后你会看到mysql命令行提示符。这里先不要做任何复杂操作下一步就是改密码因为临时密码不能执行普通查询之外的写操作。2.4 安全配置与密码策略修改root密码的命令是ALTER USER rootlocalhost IDENTIFIED BY 你的新密码;新密码必须满足MySQL的默认密码策略至少8位包含大小写字母、数字和特殊字符。如果设置得过于简单会出现“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements”。这个策略是validate_password插件控制的。如果你确实想用简单密码开发测试可以临时调整策略级别SET GLOBAL validate_password_policy LOW; SET GLOBAL validate_password_length 6;不过我不建议在正式环境这么做。如果是自己学习用的虚拟机倒无所谓。改完密码后顺手把一些高风险项关掉。比如删除匿名用户默认安装没有匿名用户但检查一下总没坏处SELECT user, host FROM mysql.user;看到rootlocalhost就足够了如果有空用户名的记录执行DROP USER localhost;。还有一件事就是禁止root远程登录。虽然我们后面要配置远程访问但那是给专门创建的用户用的不是把root开放出去。root只保留本机登录这是安全底线。3. 配置远程访问与Navicat连接3.1 创建远程连接用户MySQL默认只允许root从localhost连接其他IP一律拒绝。为了能让Windows上的Navicat连接我们需要创建一个新用户并授权给指定IP或IP段。登录MySQL后执行CREATE USER hive% IDENTIFIED BY 你的密码; GRANT ALL PRIVILEGES ON *.* TO hive% WITH GRANT OPTION; FLUSH PRIVILEGES;这里的hive只是示例用户名你可以根据实际用途取。%表示允许从任意IP连接如果你只想让某个固定IP连比如公司内网地址192.168.1.100那就写hive192.168.1.100更安全一点。授权语句里*.*代表所有库的所有表。如果这个用户只是给Hive Metastore用其实只需要它操作metastore库。但很多时候我们会用Navicat做管理操作给全部权限省事。学习环境无所谓生产环境务必遵循最小权限原则给具体的库权限GRANT ALL PRIVILEGES ON metastore.* TO hive%;FLUSH PRIVILEGES是让权限表的修改立即生效。有时候你改了授权认为已经生效了其实还需要flush一下。虽然修改mysql.user表会自动刷新但建议加上养成习惯。3.2 防火墙与端口放行很多新手在Navicat里配置好连接后一直超时就以为是MySQL配置错了实际上90%的情况是防火墙拦住了3306端口。我自己的经历当时在服务器上折腾了半天最后才发现防火墙没放行。CentOS 7默认的防火墙是firewalld。查看状态systemctl status firewalld如果状态是active那就把3306端口加进去firewall-cmd --zonepublic --add-port3306/tcp --permanent firewall-cmd --reload--permanent表示永久生效reload让配置立即加载。查看是否已经放行firewall-cmd --list-ports除了防火墙还有一层可能是云服务商的安全组。如果你用的是云服务器需要登录云控制台在网络安全组里添加入方向规则允许TCP 3306端口。这一层容易忽略因为本机防火墙开了但云平台的规则没开一样连不上。如果你用的是虚拟机而且网络环境是NAT模式还需要确认宿主机和虚拟机之间能互通。最简单的测试方法是在你的Windows命令行里ping一下MySQL服务器的IP能通再谈端口。3.3 Navicat连接配置与测试Navicat是个老牌的数据库管理工具我用的是Navicat for MySQL版本界面基本上没什么大变化。打开Navicat点击“连接”按钮弹出连接配置窗口。需要填的信息有连接名随便写比如“数仓测试库”主机填MySQL服务器的IP地址比如192.168.1.88端口默认3306如果你改了my.cnf里的port这里也要跟着改用户名刚才创建的hive密码对应的密码填完之后点击“测试连接”。看到“连接成功”的提示就说明一切正常。如果失败错误信息会在下面显示根据提示去排查。我习惯在测试成功后顺手把连接保存一下。然后展开连接看是否能看到数据库列表。如果能看到information_schema、mysql、performance_schema等系统库就表示权限没问题。3.4 连接串与驱动说明在项目里使用MySQL不止Navicat这一种方式。比如Hive的Metastore配置需要填一个JDBC连接串jdbc:mysql://192.168.1.88:3306/metastore?useSSLfalseserverTimezoneAsia/Shanghai其中metastore是你在MySQL里为Hive创建的数据库useSSLfalse是因为本地内网环境不需要加密连接serverTimezone要指定时区否则驱动会报错。对应地你还需要把mysql-connector-java的jar包放到Hive的lib目录下。Hive 3.x版本推荐用5.1.49或8.0.23等兼容版本具体看Hive版本。我当时用的是mysql-connector-java-5.1.49.jar没有出过问题。Navicat本身已经内置了MySQL驱动不需要额外配置。但如果你是做Java开发用Spring Boot连MySQL要注意驱动版本和数据库版本对应关系。5.7的库用8.x的驱动可以连但8.0的库用5.1.x的驱动就会碰壁。4. 常见问题与排查实录4.1 Access denied for user hivelocalhost这个错误的完整信息是Access denied for user hivelocalhost (using password: YES)。看起来是密码错误但很多时候密码明明是对的却还是报这个错。原因是MySQL在匹配用户时会同时检查用户名和来源主机。当你本地用mysql -uhive -p登录时MySQL看到连接来源是localhost它就去查找hivelocalhost这条记录如果没有就拒绝。而你创建的用户是hive%虽然%也可以匹配localhost但在某些版本里local的优先级更高导致匹配失败。解决方法要么用-h 服务器IP来指定连接来源要么再创建一个hivelocalhost用户。不过我们远程场景一般只需要保留%本地管理尽量用root所以这种报错多发生在测试时。如果遇到先检查一下mysql.user表里的用户记录SELECT user, host FROM mysql.user WHERE userhive;看到只有hive%那就不要在本机用mysql -uhive的方式登录直接用Navicat远程连。4.2 Navicat连接报10060错误10060是“连接超时”意味着数据包发出去了但一直没收到回应。这种情况基本不是MySQL的授权问题而是网络路径不通。排查步骤按照下面这个顺序来先用ping 服务器IP确认主机能通。再用telnet 服务器IP 3306确认端口能通。如果telnet提示“无法打开到主机的连接”说明端口被防火墙拦截。检查firewalld是否放行3306。如果是云服务器检查安全组规则。最后再看MySQL的bind_address配置。如果my.cnf里设置了bind-address127.0.0.1那么MySQL只会监听本机回路地址外部请求直接进不来。需要改成bind-address0.0.0.0或者注释掉这行。我的经历是有一次忘了云服务器安全组本机防火墙已经放行了telnet还是不通最后在云控制台加了一条规则瞬间解决。所以排查的时候别只盯着服务器本身云平台那层也得看。4.3 中文乱码问题Navicat连上MySQL后查询数据表发现中文显示为乱码或者问号一般有两种情况。一种是在连接配置里没有指定字符集。打开Navicat连接属性在“高级”或“编码”标签页把编码强制为utf8mb4。另一种是MySQL服务端默认字符集不是utf8。检查一下SHOW VARIABLES LIKE %character%;如果看到character_set_server是latin1那就需要修改配置文件/etc/my.cnf在[mysqld]下面添加character-set-serverutf8mb4 collation-serverutf8mb4_general_ci然后重启MySQLsystemctl restart mysqld注意改字符集只对新建的库表生效已经创建的库表需要单独修改。为了根子上不出这个问题建议在安装完MySQL后、创建业务库之前就把字符集改好。还有一个隐蔽点Hive往MySQL写元数据的时候如果用到了中文注释而MySQL表字段的字符集不是utf8那么写入的注释全是乱码。这个问题排查起来挺隐蔽因为表还能正常建只是你看不到中文明文。所以一定要在最开始就统一字符集。4.4 连接数与性能建议默认情况下MySQL的最大连接数是151。如果你的数仓系统开发人员比较多每个人都开着几个连接导致连接数满新连接会报“Too many connections”错误。查看当前连接数和最大限制SHOW STATUS LIKE Threads_connected; SHOW VARIABLES LIKE max_connections;如果确实不够用可以在my.cnf里把这个值调大比如500。但这只是治标更合理的做法是在应用程序里使用连接池控制空闲连接释放。像Hive Metastore这类服务本身有连接池配置不要为了方便随意调大MySQL连接上限因为MySQL每维护一个连接都要消耗内存连接越多内存占用越大。另外Navicat这种图形工具默认会为每个查询打开一个连接但不会常驻所以一般不会成为瓶颈。真正需要注意的反而是你的数仓任务调度脚本如果你用Python或Shell反复短连接数据库建议用连接池复用否则压力一大MySQL就报错。补充一个实操小技巧安装完成后建议立刻做一次全库备份脚本。数仓环境的元数据库太重要了万一误操作删了表没有备份就得从头建库重新初始化Hive Metastore那真是灾难级别的返工。结语与个人经验现在这套流程我基本已经不需要看笔记就能走下来了。回想当时跟着课程一步步装的时候最费时间的不是敲命令而是理解每个配置项的意义。比如为什么要单独建一个远程用户而不是直接用root为什么防火墙要放行3306为什么字符集要提前设好。这些层面打通了后面哪怕遇到没见过的报错也能顺着思路快速定位。我个人的习惯是每次新装完MySQL会写一个安装记录文档把用到的命令、配置文件、踩过的坑都记下来。这不是走形式而是因为不同服务器的环境多少有差异记录得越详细下次再装就越顺畅。尤其是远程连接这块可能出现的坑太多光靠记忆很容易漏掉。如果你也在学数仓搭建建议你也试着把每一步操作写成笔记动手加复盘比单纯看视频记得牢得多。

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

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

免费获取报价 →
↑