刚接触Linux的朋友,十有八九都栽在装MySQL这道坎上。Windows下双击下一步的爽快感,在Linux终端里全变成了冰冷的报错提示。其实真不是Linux难,而是MySQL的安装方式太灵活,官方仓库、第三方源、源码编译,每条路都有人走通,也每条路都有人摔跤。今天这篇不整虚的,就按最常见的CentOS 7和Ubuntu 22.04两条主线,把从零到能跑起来的过程捋一遍,顺便把那些坑提前给你标出来。

先说CentOS 7,这是服务器领域的老黄牛,但默认的yum源里压根没有MySQL,只有它的社区分支MariaDB。很多教程让你直接,结果装完一看,命令是,实际跑的是MariaDB内核,虽然兼容性不错,但跟MySQL官方版本在某些函数和性能调优上还是有差异。如果你就想用纯正的Oracle版MySQL,第一步得先添加官方仓库。去MySQL官网下载那个的rpm包,用装上,然后能看到两个新源,一个enable一个disable,默认只开8.0的就行。这步做完,再执行,才算真正踏上正轨。
装完只是万里长征第一步,启动服务才是真正的试金石。CentOS 7上,然后看是不是active(running)。但你别急着高兴,MySQL 8.0初始化时自动生成了一个临时密码,藏在里,得用去捞。这密码通常长得像乱码,而且强制要求你登录后立刻改密码。改密码也有讲究,默认的validatepassword插件要求至少8位、带大小写数字和特殊字符,你要是想设个简单的,直接给你报错。先按规矩设个复杂密码,后面想改简单了,再或者调整策略参数,不然你连登录都进不去。
咱再切到Ubuntu 22.04这条线,它的逻辑跟CentOS完全两码事。Ubuntu的apt源里其实自带MySQL 8.0,但版本可能不是最新,而且自动初始化的方式不同。直接,装完服务自动启动,root用户默认用authsocket插件认证,意思是你用就能进,但用密码登录反而进不去。这个设计对本地开发挺友好,但你要是在云服务器上,想远程连数据库,那就得手动改认证插件。,这行命令下去,root才能用密码连。而且Ubuntu上mysql的配置文件分散在目录下,不像CentOS那么集中,改和的时候别找错地方。
这里得插一句,很多人装完MySQL,本地连得好好的,换台电脑就连不上了,十有八九是防火墙和监听地址的问题。CentOS 7默认firewalld,你得然后reload,不然外部请求直接被拦死。而MySQL默认只监听127.0.0.1,你得改里的,然后重启服务。Ubuntu上是ufw,就行。但改完监听地址,又带出另一个安全问题——MySQL 8.0默认的root用户只能从localhost登录,你远程用root连,报错。这时候得新建一个用户,再授权,千万别图省事给root开远程权限,不然哪天数据库被脱裤了,哭都来不及。
说到权限和目录,还有个特别容易被忽略的细节——数据目录的空间。MySQL默认把数据放在,如果你的系统盘分区只有几十G,跑一段时间就满了。最稳妥的办法是安装前就规划好,把数据目录挂载到独立的数据盘上。改法也不复杂,先,然后把整个目录到新位置,再改里的,还要处理SELinux的上下文。CentOS上这步最坑,SELinux不关的话,MySQL启动直接报权限错误,要么临时关,要么用改标签。Ubuntu没SELinux这层麻烦,但AppArmor也会管着mysqld的访问路径,有时候改了datadir忘了改AppArmor配置,一样起不来。
再往深了说,安装完之后的初始化配置比安装本身更重要。很多人装完MySQL,什么都不调就上线,结果跑个几万行的查询就卡成PPT。最基本的几项:建议设成物理内存的70%左右,但别超过总内存的80%,不然系统Swap频繁,反而更慢;默认151,你要是开了个连接池,这点连接数秒秒钟打满;一定要开,把执行超过1秒的SQL记下来,这是性能优化的第一手资料。还有字符集,MySQL 8.0默认utf8mb4其实已经不错了,但如果你是从5.7迁移过来的老库,记得确认表的字符集,别出现乱码才想起来改,那时候改表结构可比现在麻烦十倍。
说点掏心窝子的话。MySQL的安装其实不是技术问题,是心态问题。你按照官方文档一步步来,基本上不会出大错,但很多人习惯百度一个命令就复制粘贴,报错也不看日志,直接换下一个教程,折腾半天还是原地打转。我的经验是,出任何问题,第一件事(Ubuntu上是),MySQL自己的日志比任何教程都诚实。另外,装完别急着部署业务,先用验证一下服务健康度,再用跑个简单的压测,确认读写都正常了再上线。Linux装MySQL这条路,你走通一次,后面重装、迁移、升级都顺了,因为底层逻辑都是那几样——仓库源、配置文件、权限、日志。栽过跟头的地方,下次就是你的经验。


