公司动态

Linux系统MySQL安装全攻略:包管理器与手动安装详解

📅 2026/8/6 5:32:15
Linux系统MySQL安装全攻略:包管理器与手动安装详解
1. 项目概述与核心价值在服务器运维和开发环境搭建的日常工作中数据库的部署几乎是绕不开的一环。而MySQL作为最流行的开源关系型数据库之一其安装过程看似简单实则暗藏玄机。很多新手甚至是有一定经验的开发者在初次接触Linux环境下的MySQL安装时常常会卡在某个步骤比如权限问题、服务启动失败或是版本冲突。网上教程虽多但要么过于简略要么只讲一种方法遇到问题就束手无策。今天我就结合自己多年在CentOS和Ubuntu等主流Linux发行版上反复折腾的经验为你拆解两种最主流、最可靠的MySQL安装方法通过系统包管理器安装和通过官方二进制包手动安装。这两种方法各有优劣适用于不同的场景。通过这篇详细的教程你不仅能顺利完成安装更能理解每一步背后的逻辑下次再遇到问题你就能自己排查了。无论你是刚接触Linux的新手还是想巩固基础的老手这篇内容都能让你有所收获。2. 两种安装方法的核心思路与选型考量在Linux上安装软件尤其是像MySQL这样的核心服务选择哪种安装方式直接关系到后续的维护成本、升级路径和系统稳定性。我们不能盲目地“复制粘贴”命令得先搞清楚为什么。2.1 方法一系统包管理器安装以Yum/DNF和APT为例这是最推荐新手和大多数生产环境使用的方法。简单来说就是利用Linux发行版自带的软件仓库来安装。比如在CentOS/RHEL及其衍生版上用yum或dnf在Debian/Ubuntu上用apt。为什么选择它自动化与依赖管理包管理器会自动处理所有依赖关系。MySQL运行需要libaio、numactl等库手动安装很容易遗漏而包管理器会一并帮你装好。集成系统服务安装完成后会自动生成systemd服务单元文件如mysqld.service你可以用熟悉的systemctl start mysqld来管理服务开机自启也只需一条命令。官方仓库的稳定性发行版官方仓库中的MySQL版本通常是经过充分测试、与当前系统版本兼容性最好的一个长期支持版本追求的是稳定而非最新。统一的升级路径后续系统更新时可以通过yum update或apt upgrade统一升级MySQL及其依赖管理起来非常方便。它的局限性是什么主要在于版本不够新。官方仓库的更新往往滞后于MySQL官方发布。如果你需要特定的小版本如MySQL 8.0.33或想尝鲜最新特性这个方法就不太适合。2.2 方法二官方二进制包TAR Archive手动安装这种方法是从MySQL官网下载编译好的二进制压缩包解压到指定目录然后手动进行配置和初始化。为什么选择它版本控制绝对自由你可以下载官网上的任何一个版本从最新的GA版本到历史版本完全自主选择。安装位置灵活你可以将MySQL安装到任何有权限的目录比如/opt/mysql、/usr/local/mysql这对于有严格目录规划的环境非常有用。多实例部署方便在同一台机器上运行多个不同版本的MySQL实例时手动安装的方式隔离性更好配置起来更清晰。深入理解架构通过手动安装你会被迫去了解MySQL的数据目录、配置文件、日志文件、启动脚本等核心组件的布局和作用是深入学习的好机会。它的挑战是什么过程繁琐一切手动。你需要自己创建用户组、配置环境变量、编写启动脚本、管理依赖库。任何一个步骤出错都可能导致服务无法启动。它更适合对Linux系统有一定了解且有特定版本或定制化需求的管理员。注意对于绝大多数寻求快速部署、稳定运行的场景优先选择方法一包管理器安装。本教程将先详细讲解方法一确保你能快速成功再深入方法二满足你的进阶需求。3. 核心细节解析与前置准备在开始敲命令之前做好准备工作能避免一半的麻烦。这里有几个关键点无论你用哪种方法都需要先处理。3.1 系统环境确认与旧版本清理首先用cat /etc/os-release确认你的Linux发行版和版本号。这决定了你后续要使用的包管理命令。最重要的一步检查并卸载旧版本MySQL或MariaDB。版本冲突是安装失败的头号杀手。MariaDB是MySQL的一个流行分支两者的包和文件会冲突。# 在CentOS/RHEL系统上检查 rpm -qa | grep -E mysql|mariadb # 在Debian/Ubuntu系统上检查 dpkg -l | grep -E mysql|mariadb如果发现有已安装的包需要彻底卸载。以CentOS为例卸载命令可能如下# 停止服务 sudo systemctl stop mysqld sudo systemctl stop mariadb # 卸载包 sudo yum remove mysql* mariadb* -y # 删除残留数据和配置文件谨慎操作这会删除所有数据库 sudo rm -rf /var/lib/mysql sudo rm -rf /etc/my.cnf /etc/my.cnf.d /etc/mysql在Ubuntu上使用apt purge命令可以同时删除软件包和配置文件。实操心得/var/lib/mysql是默认的数据目录卸载包不会删除它。如果你是在测试环境重装删除它可以得到一个“干净”的状态。但如果是生产环境有旧数据务必先备份备份命令可以用mysqldump或者直接打包整个目录。3.2 MySQL版本选择策略访问MySQL官方下载页面你会看到多个版本MySQL Community Server我们使用的免费开源版本。版本号如8.0, 5.7。8.0是当前主流性能和安全特性更强5.7依然稳定部分老应用兼容性更好。新手无脑选8.0。发布状态选择“General Availability (GA)”版本这是稳定版。避免使用“Development”或“RC”版本。对于包管理器安装版本由仓库决定。对于手动安装你需要在官网找到对应你系统架构通常是x86_64的“Linux - Generic”二进制包。4. 方法一实操通过系统包管理器安装MySQL这是最流畅的安装路径。我们分发行版进行。4.1 在CentOS/RHEL 7/8/9上安装从CentOS 7开始默认的仓库里没有MySQL只有MariaDB。因此我们需要先添加MySQL官方的Yum仓库。步骤1添加MySQL官方Yum仓库去MySQL官网找到“MySQL Yum Repository”的安装包链接。以MySQL 8.0为例通常可以用wget下载。# 1. 下载仓库安装包 sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm # 注意上面的el7对应CentOS 7如果是CentOS 8应替换为el8。 # 2. 安装仓库包 sudo rpm -ivh mysql80-community-release-el7-11.noarch.rpm安装成功后你会在/etc/yum.repos.d/目录下看到mysql-community.repo等文件。这个文件里定义了多个子仓库如8.0, 5.7, 6.0。默认会启用最新GA系列如8.0。如果你想安装5.7需要编辑这个文件禁用8.0仓库启用5.7仓库。步骤2安装MySQL服务器# 安装MySQL服务器、客户端和一些常用工具 sudo yum install mysql-community-server -y这个命令会安装mysql-community-server、mysql-community-client以及它们的所有依赖。步骤3启动MySQL服务并设置开机自启# 启动服务 sudo systemctl start mysqld # 查看服务状态确认是否运行正常 sudo systemctl status mysqld # 设置开机自启 sudo systemctl enable mysqld如果状态显示active (running)恭喜你MySQL服务已经跑起来了。步骤4获取初始临时密码并修改MySQL 8.0在首次启动后会为root用户生成一个临时随机密码并记录在日志文件中。# 查看日志过滤出包含temporary password的行 sudo grep temporary password /var/log/mysqld.log输出类似2023-10-27T03:12:34.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: JqslT8a!hZw步骤5运行安全配置向导并修改root密码使用上一步得到的临时密码登录但注意这个密码无法执行任何操作必须立即修改。# 使用临时密码登录 mysql -uroot -p # 输入临时密码 # 登录后立即修改root密码。MySQL 8.0有密码强度策略。 ALTER USER rootlocalhost IDENTIFIED BY YourNewStrongPassword123!; # 注意密码必须包含大小写字母、数字和特殊字符长度通常至少8位。 # 退出 exit;更推荐的做法是运行mysql_secure_installation脚本它会交互式地引导你完成一系列安全设置修改root密码。移除匿名用户。禁止root远程登录生产环境建议。删除测试数据库。重新加载权限表。sudo mysql_secure_installation跟着提示一步步操作即可。4.2 在Ubuntu/Debian上安装在Ubuntu 20.04/22.04等新版本上默认仓库可能包含MySQL但为了确保版本和来源同样建议添加官方仓库。步骤1添加MySQL官方APT仓库# 1. 下载仓库配置包 wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb # 版本号请以官网最新为准 # 2. 安装配置包会弹出一个文本界面让你选择MySQL版本 sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb在弹出来的界面中用方向键选择“Ok”确认即可默认会选中最新的MySQL 8.0。步骤2更新本地软件包索引并安装# 更新索引 sudo apt update # 安装MySQL服务器 sudo apt install mysql-server -y在安装过程中可能会弹出一个对话框让你设置root用户的密码。新版本Ubuntu的MySQL安装包可能采用了新的认证插件有时不会提示设置密码而是使用auth_socket插件允许系统用户通过socket免密登录。这需要后续调整。步骤3管理服务# 启动服务 sudo systemctl start mysql # Ubuntu上服务名通常是mysql而不是mysqld # 查看状态 sudo systemctl status mysql # 开机自启 sudo systemctl enable mysql步骤4初始安全配置针对可能未设密码的情况如果安装时未提示设置密码可以这样操作# 使用sudo权限登录MySQL此时可能不需要密码 sudo mysql进入MySQL后执行以下SQL来设置root密码并切换认证方式-- 查看当前root用户的认证插件 SELECT user, host, plugin FROM mysql.user WHERE user root; -- 通常plugin是auth_socket。我们需要修改它并设置密码。 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY YourNewStrongPassword123!; FLUSH PRIVILEGES; exit;之后就可以用mysql -uroot -p和刚设置的密码登录了。同样也强烈建议运行sudo mysql_secure_installation进行安全加固。5. 方法二实操通过官方二进制包手动安装MySQL假设我们需要在/opt目录下安装MySQL 8.0.36。步骤1下载并解压二进制包# 切换到临时目录下载包 cd /tmp wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz # 注意请根据实际需要去官网复制正确的链接版本和glibc版本要匹配你的系统。 # 解压到/opt目录 sudo tar -xvf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz -C /opt # 创建软链接方便管理 cd /opt sudo ln -s mysql-8.0.36-linux-glibc2.28-x86_64 mysql现在MySQL的文件就在/opt/mysql目录下了。步骤2创建系统用户和组并修改目录权限为了安全MySQL不应该以root身份运行。# 创建mysql用户组和用户并禁止其登录shell sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql # 进入MySQL安装目录更改所有文件属主 cd /opt/mysql sudo chown -R mysql:mysql .步骤3初始化数据目录MySQL需要一个空的数据目录来初始化系统数据库。# 创建数据目录通常放在/opt/mysql/data你也可以选择其他位置如/var/lib/mysql sudo mkdir -p /opt/mysql/data sudo chown -R mysql:mysql /opt/mysql/data # 初始化数据库 sudo ./bin/mysqld --initialize --usermysql --basedir/opt/mysql --datadir/opt/mysql/data关键点初始化命令会生成root用户的临时密码务必在输出信息的最后几行找到它并记录下来格式类似[Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: JqslT8a!hZw步骤4配置MySQL服务我们需要创建配置文件(my.cnf)和系统服务文件。创建配置文件sudo vim /etc/my.cnf写入基本配置[mysqld] usermysql basedir/opt/mysql datadir/opt/mysql/data socket/tmp/mysql.sock port3306 # 字符集设置避免中文乱码 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci [mysql] default-character-setutf8mb4 [client] socket/tmp/mysql.sock创建Systemd服务文件sudo vim /etc/systemd/system/mysqld.service写入以下内容[Unit] DescriptionMySQL Server Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/opt/mysql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE5000 Restarton-failure RestartSec10 [Install] WantedBymulti-user.target步骤5启动服务并修改root密码# 重新加载systemd配置 sudo systemctl daemon-reload # 启动MySQL服务 sudo systemctl start mysqld # 查看状态 sudo systemctl status mysqld # 使用初始化时的临时密码登录 /opt/mysql/bin/mysql -uroot -p -S /tmp/mysql.sock # 登录后立即修改密码 ALTER USER rootlocalhost IDENTIFIED BY YourNewStrongPassword123!; FLUSH PRIVILEGES; exit;步骤6设置环境变量可选但建议为了方便在任何位置使用mysql命令可以将/opt/mysql/bin加入PATH。echo export PATH/opt/mysql/bin:$PATH ~/.bashrc source ~/.bashrc现在你就可以直接使用mysql -uroot -p命令了因为我们在my.cnf里配置了socket路径。6. 安装后的通用配置与优化无论用哪种方法安装成功以下几步都能让你的MySQL更好用、更安全。6.1 配置远程连接按需默认情况下MySQL只允许本地(localhost)连接。如果需要从其他服务器访问需要授权。警告生产环境请谨慎开启并设置强密码和限定IP。-- 使用root登录MySQL后 -- 创建一个允许远程连接的用户示例用户名为remoteuser密码为StrongPass!允许从192.168.1.%网段连接 CREATE USER remoteuser192.168.1.% IDENTIFIED BY StrongPass!; -- 授予所有数据库的所有权限根据实际情况缩小权限范围 GRANT ALL PRIVILEGES ON *.* TO remoteuser192.168.1.% WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES;如果想让root也能远程连接不推荐-- 查看root用户的host SELECT user, host FROM mysql.user WHERE userroot; -- 通常root的host是localhost。可以创建一个新的root记录或修改现有记录极不推荐。 UPDATE mysql.user SET host% WHERE userroot; FLUSH PRIVILEGES;修改后还需要确认MySQL配置文件/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf中bind-address不是127.0.0.1而是0.0.0.0或服务器的具体IP。6.2 基础性能调优参数对于刚安装的MySQL可以调整几个关键参数以适应你的机器配置。编辑my.cnf文件位置可能在/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf。[mysqld] # 缓冲池大小对于专用数据库服务器通常设置为系统内存的50%-70% innodb_buffer_pool_size 1G # 连接数相关 max_connections 200 # 交互式和非交互式连接超时时间秒 interactive_timeout 300 wait_timeout 300 # 日志 # 慢查询日志用于排查性能问题 slow_query_log 1 slow_query_log_file /var/log/mysql/mysql-slow.log long_query_time 2修改配置后需要重启MySQL服务生效sudo systemctl restart mysqld。7. 常见问题与排查技巧实录即使按照教程一步步来也可能会遇到问题。这里记录了几个我踩过的坑和解决方法。7.1 服务启动失败权限问题现象执行systemctl start mysqld后systemctl status mysqld显示失败查看日志sudo journalctl -xe或sudo tail -f /var/log/mysqld.log发现大量Permission denied或Cannot create directory错误。原因MySQL数据目录如/var/lib/mysql或日志目录的属主、权限不对。手动安装时chown命令没执行到位包管理器安装时可能因为残留文件导致。解决停止服务sudo systemctl stop mysqld确保数据目录及其所有父目录的属主是mysql:mysqlsudo chown -R mysql:mysql /var/lib/mysql # 如果是手动安装的目录比如/opt/mysql/data sudo chown -R mysql:mysql /opt/mysql/data确保目录权限是750或755sudo chmod -R 750 /var/lib/mysql如果是SELinuxCentOS/RHEL导致的问题可以尝试暂时禁用SELinux对MySQL的限制生产环境需谨慎sudo setenforce 0永久解决需要调整SELinux策略sudo semanage fcontext -a -t mysqld_db_t /var/lib/mysql(/.*)?然后sudo restorecon -Rv /var/lib/mysql。7.2 忘记root密码这是最常见的问题之一。解决步骤停止MySQL服务sudo systemctl stop mysqld以跳过权限检查的方式启动MySQLsudo mysqld_safe --skip-grant-tables --skip-networking 或者对于systemd管理的服务更安全的方式是修改服务启动参数sudo systemctl edit mysqld在打开的编辑器中加入[Service] ExecStart/usr/sbin/mysqld --skip-grant-tables --skip-networking然后重启服务sudo systemctl daemon-reload sudo systemctl restart mysqld无密码登录mysql -u root清空root密码MySQL 5.7和8.0略有不同MySQL 5.7:UPDATE mysql.user SET authentication_string PASSWORD(你的新密码) WHERE User root;MySQL 8.0:ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; -- 如果上面报错可以先清空密码字段 UPDATE mysql.user SET authentication_string WHERE User root; FLUSH PRIVILEGES; exit; -- 然后重启服务到正常模式再运行ALTER USER语句。刷新权限并退出FLUSH PRIVILEGES; exit;恢复正常模式并重启服务将之前添加的--skip-grant-tables参数移除然后重启MySQLsudo systemctl restart mysqld。7.3 安装后无法登录提示“Access denied”可能原因1密码错误。仔细检查密码注意大小写。临时密码可能包含容易混淆的字符如l和1O和0。可能原因2密码强度不符合要求。MySQL 8.0有默认的密码策略。如果你设置的密码太简单即使ALTER USER语句执行成功下次登录也可能失败。可以临时降低密码策略等级来设置一个简单密码仅用于测试环境-- 查看当前密码策略 SHOW VARIABLES LIKE validate_password%; -- 临时修改策略先设置一个复杂密码再修改策略再改简单密码 SET GLOBAL validate_password.policy LOW; SET GLOBAL validate_password.length 4; -- 然后再修改密码 ALTER USER rootlocalhost IDENTIFIED BY 简单密码;可能原因3用户主机限制。root用户默认只允许从localhost连接。如果你在用IP或主机名连接需要授权。7.4 端口冲突或无法远程连接检查端口是否监听sudo netstat -tlnp | grep 3306。如果看不到0.0.0.0:3306或:::3306的监听说明MySQL没监听在所有接口上。检查防火墙CentOS/RHEL (firewalld):sudo firewall-cmd --permanent --add-port3306/tcp sudo firewall-cmd --reloadUbuntu/Debian (ufw):sudo ufw allow 3306/tcp sudo ufw reload检查MySQL绑定地址确认my.cnf中bind-address配置。如果是127.0.0.1则只监听本地。可以改为0.0.0.0监听所有IP或服务器的具体IP。7.5 手动安装后mysql命令找不到这是因为没有将MySQL的bin目录加入系统的PATH环境变量。解决方法有两个临时使用绝对路径/opt/mysql/bin/mysql -uroot -p创建软链接到系统路径sudo ln -s /opt/mysql/bin/mysql /usr/local/bin/mysql sudo ln -s /opt/mysql/bin/mysqldump /usr/local/bin/mysqldump # 其他常用命令同理将目录加入用户环境变量如前面步骤6所述。8. 两种方法对比与最终选择建议为了让你更直观地做出选择我把两种方法的核心差异和适用场景总结成了下表特性维度包管理器安装 (Yum/APT)手动安装 (二进制包)安装复杂度极低几条命令搞定高需手动执行十多个步骤依赖管理自动解决无需操心手动处理需自行安装libaio等版本选择受限于仓库通常不是最新完全自由可安装任意官方版本安装位置固定遵循FHS如/usr/bin,/var/lib/mysql高度灵活可安装到任何目录服务管理集成Systemdsystemctl命令管理需手动配置服务文件或使用mysqld_safe升级维护简单yum update/apt upgrade一键完成复杂需手动下载新包迁移数据目录多实例部署困难需要复杂配置相对容易目录隔离清晰学习价值低适合快速部署高能深入理解MySQL文件结构和启动流程推荐场景绝大多数场景特别是生产环境、新手入门特定需求需要特定版本、定制化路径、学习研究、多实例最终建议如果你是初学者或者希望快速搭建一个稳定、易于维护的MySQL环境毫不犹豫地选择包管理器安装。它省时省力社区支持好遇到问题也更容易搜索到解决方案。如果你需要精确控制MySQL版本比如为了兼容某个老应用或者计划在一台服务器上部署多个MySQL实例又或者你想彻底搞懂MySQL的每一部分是如何组织起来的那么手动安装是你的不二之选。这个过程虽然繁琐但走一遍之后你对MySQL的理解会深刻得多。我个人在管理几十台服务器的经验是95%的情况下都用包管理器安装。只有那5%需要特定版本或做深度定制时才会去手动安装。记住技术选型的首要原则是“合适”而不是“高级”。先把服务稳定地跑起来再去追求那些高级特性。希望这篇超过五千字的详细拆解能帮你扫清Linux上安装MySQL的所有障碍。如果在实际操作中遇到本教程没覆盖的问题欢迎在评论区交流我们一起排查。