Linux下MySQL 8.0安装配置与故障排查实战指南
2026/9/7 19:11:25 网站建设 项目流程

上个月帮朋友处理一台展示用的CentOS服务器,远程一登录就看到他对着报错发愁:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'。这报错看起来吓人,实际十有八九就是服务没起来,或者MySQL压根还没装完整。后来我一问,他连MySQL初始化都还没做,只是执行了个安装命令,就以为万事大吉了。

这篇文章就把从零开始装MySQL的整套流程整理出来,覆盖RHEL系(CentOS / Rocky / Alma)和Debian系(Ubuntu / Debian)两种主流Linux发行版。内容包括版本选型、仓库配置、初始化、安全加固、生产配置、常见故障排查,全程都是可以直接照抄的命令和配置。适合Linux新手、运维初级选手,以及那些想把MySQL装到自建服务器上但不想被各种小坑绊住的朋友。

1. 安装之前,先把这几道“选择题”做对

很多人装MySQL的习惯是直接yum install mysql-server或者apt install mysql-server,然后一路回车。系统确实会给你装一个MySQL,但版本可能是系统仓库里那个陈旧的8.0.x老版本,模块也可能不完整。更麻烦的是,有的系统仓库默认把MySQL替换成了MariaDB——装了半天,命令都是错的,自己还不知道。

所以在动手之前,有几件事必须先想清楚。

1.1 版本选择:5.7还是8.0

如果你在百度或者技术论坛搜索,大概率还能翻到一堆MySQL 5.7的教程。但我要说的是,2024年的现在,新项目真的别再装5.7了。

先看两组事实:

  • MySQL 5.7是2023年10月正式停止官方支持(EOL)的,意味着以后没有安全补丁,出了高危漏洞也没人管。
  • MySQL 8.0是目前社区版的稳定主线,默认字符集就是utf8mb4,加上窗口函数、公共表表达式(CTE)、原子DDL、更快的查询优化器,性能比5.7有明显提升。

我在实际项目中体会最深的一点是:8.0的原子DDL确实省心,执行ALTER TABLE中途失败不会留下半改半不改的脏状态。5.7年代遇到一次大表加字段失败,表结构损坏,恢复起来是真的头疼。

唯一需要考虑兼容性的是:8.0的默认认证插件从mysql_native_password换成了caching_sha2_password,一些老版本的客户端、旧驱动(比如很久不更新的Java Connector/J 5.x、某些老版本Navicat)连不上。解决方式后面会讲,不影响大局,但你要提前知道有这回事。

版本选择我给了张对比表,直接抄:

对比项MySQL 5.7MySQL 8.0
官方支持周期已EOL,无安全补丁长期支持(到2026+)
默认字符集utf8mb4但非默认utf8mb4
认证插件mysql_native_passwordcaching_sha2_password
查询优化器常规更好,支持窗口函数、CTE
在线DDL部分支持原子DDL,失败不残留中间态
使用建议仅老项目迁移过渡新装首选

1.2 安装方式:在线仓库包、离线RPM包、Docker

安装方式的选择,主要看你的网络环境和部署场景。

方式优点缺点适用场景
官方yum/apt仓库安装版本最新、依赖自动解决、升级方便需要外网访问仓库有公网的服务器、云主机
离线RPM/DEB包安装不依赖外网依赖包要手动收集,版本匹配麻烦内网环境、堡垒机管控的服务器
Docker容器环境隔离、秒级启动、多个版本共存性能略有损耗,数据卷管理需谨慎开发测试、微服务架构、快速验证

这里我多说一句:如果你只是想快速验证一个功能,Docker确实香,docker run mysql:8.0一条命令。但生产环境放在宿主机上还是容器里,要结合团队运维能力来定,裸机装MySQL把数据目录独立出来,仍然是非常主流的方案。

下面正文以官方仓库在线安装为主线,离线包方式单独拎一节来讲,因为它解决的是完全没有公网的内网场景。

1.3 操作系统和硬件准备

不同Linux发行版的包管理方式差异很大,先确认你的系统:

cat /etc/os-release

看到ID是centosrhelrockyalmalinux这一类,走yum/dnf路线;看到ubuntudebian,走apt路线。两台机器的systemd服务名也可能不一样,CentOS上服务叫mysqld,Ubuntu上服务叫mysql,命令细节后面会区分。

硬件建议:最低1GB内存可以跑起来,但8.0跑正式业务建议至少2GB以上。MySQL 8.0启动时默认分配的Buffer Pool是128MB,如果内存太紧张,启动阶段就可能直接OOM。磁盘方面,生产环境一定要把数据目录放到独立数据盘上,比如挂在/data下的盘,系统盘和数据盘分开,后面迁移数据目录那节会细讲。

还需要提前检查SELinux状态(RHEL系):

getenforce

如果输出Enforcing,装完MySQL后连接容易出现权限类报错。可以临时setenforce 0测试,生产环境建议用正确放行方式,后面有一节专门说。

2. 环境检查与软件源配置

2.1 先看清系统里有没有“旧账”

安装之前别急着执行安装命令,先确认系统里有没有残留的MySQL或MariaDB:

rpm -qa | grep -i -E "mysql|mariadb"

如果有输出,尤其是有mariadb,要评估是否卸载。CentOS默认自带的mariadb-libs会和MySQL的libs有冲突,官方仓库安装时yum会自动解决冲突,但有时候会提示错误。稳妥做法:

sudo yum remove -y mariadb-libs

还要确认3306端口没被占用:

ss -lntp | grep 3306

有输出说明端口已经被占了,通常是有存量MySQL,这时候就不要重复安装了。把系统时间和同步也确认一下,date看时间,如果差太多,会导致后面SSL握手各种奇怪问题。

2.2 官方仓库在线安装步骤

这里以RHEL系最流行、教程也最多的CentOS/Rocky 8/9为例。官方仓库的安装包是个RPM,不同系统版本要下载对应的el版本号:

# Rocky / Alma / CentOS 9 用 el9 sudo yum install -y https://repo.mysql.com//mysql80-community-release-el9-1.noarch.rpm # CentOS / Rocky 8 用 el8 sudo yum install -y https://repo.mysql.com//mysql80-community-release-el8-6.noarch.rpm

装完这个仓库包之后,系统里就多了一个mysql80-community源。检查一下:

yum repolist enabled | grep mysql

然后安装MySQL服务端:

sudo yum install -y mysql-community-server

这条命令会把mysql-community-server以及clientcommonlibs等依赖一次性装好。装完顺手验证版本:

mysql --version

如果显示mysql Ver 8.0.xx for Linux on x86_64,说明装对了。

Debian/Ubuntu系的官方仓库安装要更绕一点。官方提供了mysql-apt-config这个DEB包,先下载再配置:

wget https://repo.mysql.com//mysql-apt-config_0.8.32-1_all.deb sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb

安装时会弹出蓝框选择界面,通常直接选Ok确认默认的MySQL 8.0源即可。然后更新索引,安装:

sudo apt update sudo apt install -y mysql-server

Ubuntu装完后root账号默认不能直接用密码登录,而是通过auth_socket插件,执行sudo mysql才能进。这跟CentOS那种自动生成临时密码的逻辑不一样,很多人第一次用Ubuntu装MySQL就被坑了。这个差异后面会专门提到。

2.3 内网Linux服务器离线安装

没有外网的服务器是很多初入公司的朋友第一个崩溃场景:yum install一直超时,后来才知道生产内网根本不让你出网。

离线安装的核心是准备一套与目标系统版本匹配的RPM包。你可以在另一台可以联网的同版本系统上,先执行yum install --downloadonly把依赖全部拉下来:

# 联网机器上执行,/data/rpms就是最后的离线包目录 sudo yum install --downloadonly --downloaddir=/data/rpms mysql-community-server

然后把/data/rpms整个目录传到内网服务器,执行:

cd /data/rpms sudo rpm -ivh *.rpm

这里要注意两点:第一,rpm -ivh *.rpm会按照文件名顺序装,如果出现依赖报错,用rpm -ivh多次安装直到不报错,或者调整安装顺序,先commonlibsclientserver;第二,MySQL 8.0的server包依赖libaionumactl-libs,内网机器如果没有,也要一并下载,否则会卡在依赖检查上。

rpm -ivh *.rpm遇到依赖问题时,最简单粗暴的办法是在联网机器上用yum deplist mysql-community-server查看完整依赖列表,把相关包都下载下来放进去,避免来回传包。

3. MySQL 8.0安装、初始化与安全配置

仓库安装完成后,MySQL并不是立刻就能用。8.0的初始化流程和5.7不太一样:5.7是在安装后首次启动自动初始化并生成临时密码,8.0的mysqld --initialize在安装后由systemd自动触发,你需要做的是启动它、找到密码、改密码。

3.1 启动服务并获取临时密码

RHEL系先启动服务:

sudo systemctl start mysqld sudo systemctl status mysqld

如果服务状态显示active (running),说明启动成功。首次启动后,日志里会有一条包含临时root密码的记录:

sudo grep 'temporary password' /var/log/mysqld.log

输出类似:

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: kXq#3nTfz9x!

这里的kXq#3nTfz9x!就是你的临时密码。复制它,用它登录:

mysql -uroot -p

输入临时密码后进入MySQL命令行,第一件必须做的事是改密码,否则任何其他操作都会报错提示你必须先重置:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

密码务必复杂一些,8.0默认密码策略是MEDIUM,要求长度至少8位、包含大小写字母数字和特殊字符。如果你用123456这种弱密码,会直接报错:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Debian/Ubuntu系的情况不一样。刚才说了,Ubuntu默认root是通过auth_socket认证的,你执行sudo mysql -uroot直接就能进,不需要密码。如果你想像CentOS那样用密码连接root,需要手动切认证方式:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的新密码';

再执行FLUSH PRIVILEGES;,之后就可以用mysql -uroot -p用密码登录了。

3.2 运行安全加固脚本

MySQL官方提供了一个交互式安全配置脚本:

sudo mysql_secure_installation

这个脚本会问你几个问题,我逐个说一下这些问题的含义和建议:

提问含义建议
VALIDATE PASSWORD COMPONENT是否启用密码强度校验组件生产环境选Y,开发机随意
Change the password for root?是否立即修改root密码刚改过可以不改
Remove anonymous users?是否删除匿名用户选Y
Disallow root login remotely?是否禁止root远程登录选Y,root只能本机登录
Remove test database?是否删除默认test库选Y
Reload privilege tables now?是否刷新权限表选Y

mysql_secure_installation做完,你的MySQL基础安全状态就不错了。绝大多数新手装完MySQL直接裸奔,默认还有匿名用户、root允许任意IP登录、自带test库仍在,这些都是安全审计时被点名的重灾区,这个脚本能帮你一次扫干净。

3.3 创建业务账号并授权远程访问

实际项目里,应用服务通常不会用root连接数据库,而是用独立业务账号。注意MySQL 8.0里GRANT语句已经不能再隐式创建用户了,必须先CREATE USERGRANT,这两个步骤别合并,否则报错:

-- 1. 创建用户 CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPassw0rd!'; -- 2. 授权,给所有库或者指定库 GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';

这里的'%'表示允许任意IP登录。如果只允许特定网段访问,可以写成'192.168.10.%',精确的IP则写'192.168.10.88'。数据库也建议精确授权,不要动不动就*.*,万一账号泄露,整个实例都暴露了。

最后刷新权限:

FLUSH PRIVILEGES;

我的习惯是尽量用最小的权限,业务账号通常只给它对应业务库的所有权限,不给全局权限。如果应用只需要查询:

GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'%';

这样能避免许多低级灾难。

3.4 防火墙、SELinux和云安全组放行

服务器本机装好MySQL并不代表你能从本地开发机连过去。RHEL系要先放行防火墙端口:

sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload

Ubuntu/Debian系用ufw:

sudo ufw allow 3306/tcp

前面提到SELinux是Enforcing状态时,MySQL监听端口可能被拦截。可以查看审计日志:

sudo grep 'mysql' /var/log/audit/audit.log | tail -20

如果看到denied字样,用放行方式处理:

sudo setsebool -P mysqld_connect_any 1

或者干脆用更通用的方法,给3306端口放行:

sudo semanage port -a -t mysqld_port_t -p tcp 3306

还有一个容易忽略的点:如果你用的是云服务器(阿里云、腾讯云、华为云等),安全组规则里也要放行3306。很多朋友防火墙都关了,本机也能连,但外部就是连不上,最后发现是云控制台安全组的入方向规则没配上。

4. 生产环境必做的配置优化

MySQL装好能跑只是第一步,真正让你后面少熬夜的,是初始化阶段就把配置优化好。这一节讨论的配置,我的建议是在启动服务之前或者刚装完就改,不要拖到业务上线后再说。

4.1 字符集与时区,一次配到位

MySQL 8.0默认字符集已经是utf8mb4了,但为了显式可控,以及照顾某些从5.7迁移过来的老库,还是要主动配到my.cnf里。

先确认当前字符集:

SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server';

RHEL系的默认配置文件是/etc/my.cnf,Debian系一般是/etc/mysql/mysql.conf.d/mysqld.cnf。在[mysqld]段下添加:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci

有些教程推荐用utf8mb4_general_ci做排序规则,我建议用utf8mb4_unicode_ci。它基于Unicode标准排序,多语言场景下更准确;general_ci速度略快,但排序规则和Unicode有差异。现代硬件上这点性能差异几乎可以忽略,准确性优先。

时区也一并配好:

default-time-zone='+08:00'

如果不配,MySQL使用的是系统时区。有些部署环境系统时区设置不规范,会出现应用写入的时间是当前时间,但NOW()查出来是UTC时间的情况,排查起来极其蛋疼。直接在配置文件写死时区,一劳永逸。改完配置记得重启:

sudo systemctl restart mysqld

4.2 关键性能参数解读

MySQL的性能调优门道很多,但90%的场景只需要关注下面这几个参数。把这些配好,你的实例就能扛住很可观的负载。

参数作用建议值
innodb_buffer_pool_sizeInnoDB缓存数据和索引的内存池物理内存的50%~70%
innodb_log_file_sizeRedo日志文件大小128M~512M
max_connections最大连接数200~500,视业务
slow_query_log慢查询日志开关生产建议开启
long_query_time慢查询阈值(秒)2
innodb_flush_log_at_trx_commit事务日志刷盘策略默认1,兼顾安全与性能

其中最重要的就是innodb_buffer_pool_size。假设服务器内存是8GB,给MySQL分配4GB是合理的:

innodb_buffer_pool_size = 4G

innodb_buffer_pool_size设置太小,MySQL会频繁读写磁盘;设置太大,内存会被耗尽导致OOM。我们曾遇到一台64GB内存的服务器,开发把Buffer Pool设成48GB,恰好上面还有其他Java服务,结果一到高峰期就OOM杀MySQL进程。这个值需要结合整机内存规划来算,别拍脑袋。

慢查询日志也要建议开启:

slow_query_log = 1 slow_query_log_file = /var/log/mysql-slow.log long_query_time = 2 log_queries_not_using_indexes = 1

上线几个月后,这个文件能帮你精准定位慢SQL和没走索引的查询,调优的时候比啥工具都管用。

4.3 大小写敏感与表目录迁移

Linux和Windows对表名大小写的处理风格完全不同。Windows默认不区分大小写,Linux默认lower_case_table_names=0,即区分大小写。开发在Windows上写代码时没注意,上线Linux后突然报Table 'mytable' doesn't exist,这就是大小写问题在搞鬼。

MySQL 8.0里,lower_case_table_names参数一旦初始化数据目录之后,就不能再修改了。所以必须在初始化之前就要想好:

  • 项目用Linux服务器且开发也在Linux:保持默认0,区分大小写,规范开发习惯。
  • 开发在Windows/Mac、生产在Linux:设置lower_case_table_names=1,避免上线踩坑。

如果已经初始化了数据目录才发现需要修改,只能:

  1. 备份所有数据(mysqldump导出)。
  2. 删除/var/lib/mysql下的数据文件。
  3. 修改配置为lower_case_table_names=1
  4. 重启MySQL,重新导入备份。

这条路径的痛苦程度可想而知,所以尽量初始化前配置好。

数据目录迁移也是类似思路。生产建议把数据放到独立数据盘,假设新目录是/data/mysql

# 1. 停库 sudo systemctl stop mysqld # 2. 复制数据目录 sudo mkdir -p /data/mysql sudo cp -a /var/lib/mysql/. /data/mysql/ sudo chown -R mysql:mysql /data/mysql # 3. 修改配置 # [mysqld] # datadir=/data/mysql # 4. 启动 sudo systemctl start mysqld

注意:复制用cp -a保留属主和权限,不要图省事用cp -rfcp -rf在高版本系统上默认会保留权限吗?不一定,还是-a归档模式最稳。

4.4 开机自启与日常服务管理

新装的MySQL默认不一定开机自启,尤其有些精简Linux发行版,不会帮你把服务设为enable。执行:

sudo systemctl enable mysqld

确认状态:

sudo systemctl is-enabled mysqld

输出enabled就说明自启已生效。日常最常用的几个命令贴一遍,以后不用查文档:

sudo systemctl start mysqld # 启动 sudo systemctl stop mysqld # 停止 sudo systemctl restart mysqld # 重启 sudo systemctl status mysqld # 查看状态 sudo systemctl reload mysqld # 重载配置,常用于改my.cnf后不重启应用

注意:改my.cnf后建议用restart或者reloadreload不会断开已有连接,适合配置微调;改字符集、Buffer Pool这些关键参数还是老老实实restart,否则可能不生效或者部分会话状态混乱。

5. 高频错误排查与避坑经验

5.1 ERROR 2002:socket文件连不上

这个报错在热词里出现频率很高,中文意思就是用socket方式连接本地MySQL时,找不到相关文件。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

遇到这个先别慌,按照顺序排查:

第一,服务是否真的在运行?

sudo systemctl status mysqld ps -ef | grep mysqld

如果服务没起来,先看启动了为什么失败:

sudo tail -100 /var/log/mysqld.log

日志里通常直接写着失败原因,比如数据目录权限不对、磁盘满了。

第二,socket文件是否存在?

ls -l /var/run/mysqld/mysqld.sock

如果文件不存在,服务多半没起来或刚启动失败。如果socket文件在别的路径(有些人配置改成/tmp/mysql.sock但客户端默认找/var/run/mysqld/mysqld.sock),就会报这个错。解决办法是显式指定:

mysql -uroot -p --socket=/tmp/mysql.sock

或者修改客户端配置,把socket路径指到一致的位置。

第三,目录权限问题。

ll /var/run/mysqld

如果目录不存在,手动创建并授权:

sudo mkdir -p /var/run/mysqld sudo chown mysql:mysql /var/run/mysqld

这个问题我遇到过无数次,尤其是用mysqld_safe手动启动时更容易碰到。systemd管理时正常会自动创建,但某些最小化系统环境就是没建。

5.2 客户端连不上:缓存认证插件不兼容

本地MySQL客户端版本太老,或者开发机上的Navicat、DataGrip版本太旧,连接MySQL 8.0时会报:

Authentication plugin 'caching_sha2_password' cannot be loaded

或者:

Authentication plugin 'caching_sha2_password' is not supported

原因很清楚:8.0默认用caching_sha2_password,老客户端不认识。处理方法有两种。

方法一:升级客户端。这是最推荐的方式,新版驱动都支持这个插件。

方法二:把用户认证方式改回老插件,作为临时兼容:

ALTER USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'AppPassw0rd!'; FLUSH PRIVILEGES;

改完之后,老版本工具就能正常连了。但这个办法我不建议长期使用,mysql_native_password在安全性上不如caching_sha2_password,而且MySQL官方已经明确它是未来要移除的插件。我的建议是:能升级工具就升级,兼容性改动作为过渡方案。

另外,远程连接还有一个常见问题:检测到服务器时区空,Navicat连接后时间不准,或者建立连接阶段直接报Public Key Retrieval is not allowed。后者通常需要在连接属性里面开启allowPublicKeyRetrieval=true,出现这个原因是8.0的caching_sha2_password在SSL未启用时,需要先安全地获取服务器的RSA公钥,客户端默认不允许这样做,需要显式打开。

5.3 root密码忘了怎么办

作为运维,迟早会遇到"这台机器我忘了密码"的情况。别急着重装系统,用跳过权限表的方式进库改密码。

RHEL系以systemd方式启动时:

sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking" sudo systemctl start mysqld # 免密登录 mysql -uroot

进入MySQL后,先让权限表加载生效:

FLUSH PRIVILEGES;

然后改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;

退出后恢复:

sudo systemctl unset-environment MYSQLD_OPTS sudo systemctl restart mysqld

这里强调一个安全细节:--skip-grant-tables模式下显得像是"裸奔",任何本地进程都能免密登录,所以一定要同时加--skip-networking,禁止通过网络连接,只允许本机socket操作。我见过有人救急时不加--skip-networking,数据库短暂时间内对公网全部免密,当场就被扫描器趁虚而入,教训很深刻。

5.4 老应用报SQL模式问题

MySQL 8.0默认的sql_mode比5.7更严格,常见报错包括:

only_full_group_by: which isn't in GROUP BY

或者:

this is incompatible with sql_mode=only_full_group_by

原因是8.0默认启用了ONLY_FULL_GROUP_BY,要求SELECT出来的列必须出现在GROUP BY子句中,或者被聚合函数包裹。5.7时代很多老SQL写法不严谨,到了8.0就原形毕露。

临时解决可以在当前会话里放宽:

SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

但这是治标不治本,业务代码里的问题SQL迟早还要处理。更关键的是,如果你的应用是接管商的老系统,代码又不能随便改,可以临时在my.cnf里设置sql_mode

[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

然后重启MySQL。这个操作能帮老项目平稳过渡,但我的建议是过渡期结束后,一定要让开发把SQL改规范,把ONLY_FULL_GROUP_BY恢复开启,否则新开发的SQL会越来越随意,埋下隐患。

5.5 常见问题速查表

把日常收到最多的求助集中整理成一张表,贴在这里,建议收藏:

现象可能原因处理方式
ERROR 2002socket无法连接服务没启动 / socket路径不一致先看systemctl status mysqld,再查日志
Access denied for user 'root'@'localhost'密码错误 / auth_socket认证重置密码或用sudo mysql进入
Your password does not satisfy密码强度不够用8位以上含大小写数字特殊字符的密码
caching_sha2_password cannot be loaded客户端版本太老升级客户端或改用户为native_password
Public Key Retrieval is not allowed客户端连接配置未开启连接参数开allowPublicKeyRetrieval=true
远程连接超时/拒绝防火墙 / SELinux / 云安全组按防火墙、SELinux、安全组逐层排查
Table 'xxx' doesn't exist大小写敏感配置不一致规划好lower_case_table_names,在初始化前配置
启动失败但没报错日志文件没权限或磁盘满查看/var/log/mysqld.log,检查df -h

表格里的第一行和第二行是我被问得最多的两类问题。说句实话,80%的"MySQL连不上"都是服务没起来,在数据目录、权限、防火墙层层排查之前,先花30秒看systemctl status,能省下大半天时间。

我个人在实际操作中的体会是:装MySQL不难,难的是装之前的设计决策。版本选哪个、字符集用什么、数据目录放哪里、大小写敏不敏感——这四个问题,任何一个在初始化之后才想起修改,都意味着推倒重来。所以我的习惯永远是先把my.cnf写完整、把数据目录规划好,再启动服务。

最后再分享一个小技巧:每次装完MySQL,先把根目录下my.cnf做个快照备份,改动前cp /etc/my.cnf /etc/my.cnf.bak.$(date +%F),改出问题能一键还原。这个习惯虽然原始,但在生产环境救过我很多次。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询