尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux下安装MySQL 8.0保姆级教程:命令行与Docker两种方式

Linux下安装MySQL 8.0保姆级教程:命令行与Docker两种方式 刚接触 Linux 的开发者常常会被“命令行”三个字劝退。尤其是“在 Linux 上装 MySQL”网上搜出来的教程全是tar解压、源码编译、配置my.cnf看得人头皮发麻。其实现在的 Linux 发行版和官方软件源已经把装数据库这件事简化了很多。只要按顺序执行几条命令不要求你理解每个参数背后的原理也能把 MySQL 装好、跑起来甚至完成远程连接。本文就以“不会命令的小白”为起点用最朴素的方式带你在 Linux 上完成 MySQL 8.0 的部署。内容涵盖在线安装、安全初始化、远程访问配置以及一种更省心的 Docker 安装方式。看完之后你会对 Linux 下部署数据库的整体流程有一个清晰的把握以后再遇到类似的部署任务也不会再觉得无从下手。1. 背景与核心概念1.1 MySQL 到底是什么MySQL 是一个开源的关系型数据库管理系统也是最流行的数据库之一。它的核心作用是把数据按照“表”的结构存储起来表与表之间可以建立关联然后通过 SQL 语言进行增、删、改、查。在实际的业务场景中Web 网站、移动 App、后台管理系统都离不开数据库。用户注册信息、订单记录、文章内容、配置数据最终都会落到 MySQL 这样的数据库里。Linux 则是当今服务器操作系统的主流选择。大多数云服务器、物理机跑的都是 Linux比如 Ubuntu、CentOS、Debian。把 MySQL 部署在 Linux 上是后端开发、运维、测试人员必须掌握的基本功。1.2 为什么你会觉得“安装”很难很多教程把安装 MySQL 的过程写得很复杂是因为它们默认读者已经懂了很多 Linux 前置知识。比如知道怎么使用cd、ls、vim等基础命令。知道什么是系统服务怎么启动服务。知道软件包管理器是怎么工作的怎么添加软件源。知道防火墙怎么放行端口。对新手来说这些前置知识就像一堵墙。但其实在实际安装中我们完全可以“不求甚解”先照着命令复制粘贴把数据库装起来再回头慢慢理解每一行是什么意思。本文的目标就是减少这堵墙带来的挫败感。我会把每一步操作的“意图”解释清楚但不会为了炫技而堆砌复杂命令。1.3 常见应用场景开发环境搭建你需要在本地或云服务器上搭建一个 MySQL 实例供项目开发调试。个人博客 / 网站部署WordPress、Typecho、NiceFish 等系统中MySQL 是持久化存储的首选。学习 SQL你可以安装一个 MySQL通过命令行或可视化工具练习 SQL 语句。公司业务部署微型项目或中大型项目的前期阶段MySQL 往往是第一套数据库方案。无论哪种场景安装部署的动作都是第一步。把这一步走稳后面才谈得上配置调优和数据安全。2. 环境准备与版本说明2.1 操作系统选择本文示例会涉及两个主流系统家族Ubuntu 20.04 / 22.04 LTS以及 Debian 系使用apt包管理器。CentOS 7 / 8、Rocky Linux、AlmaLinux等 RHEL 系使用yum/dnf包管理器。如果你使用的是云服务器通常默认就是 CentOS 或 Ubuntu。建议新手优先选择 Ubuntu因为软件源里直接带mysql-server包安装过程最少遇到问题的概率更低。2.2 MySQL 版本本文以MySQL 8.0为例。MySQL 8.0 是目前最常用的稳定版本官方支持周期长功能也更完善。你在自己环境安装时软件源中可能显示为mysql-server-8.0或mysql-server这些都属于 8.0 系列。如果你的系统软件源版本不是 8.0建议参考官方仓库说明进行版本指定尽量不要安装过旧的 5.7 或 5.6 版本除非项目有特殊兼容要求。本文重点演示配置流程具体版本号根据你的环境决定即可。2.3 必要工具准备一台 Linux 服务器或虚拟机。一个可以通过 SSH 登录服务器的终端工具。Windows 用户可以使用 Xshell、MobaXterm也可以直接用 PowerShell 自带的ssh命令macOS/Linux 用户直接使用终端。登录账号建议有sudo权限或者直接使用root用户。网络能够访问软件源保证在线安装时能下载软件包。2.4 示例环境说明为了统一演示本文会以如下环境为例操作系统Ubuntu 22.04 LTS 包管理器apt MySQL版本8.0 远程连接工具本机 MySQL 客户端或 NavicatCentOS 的安装命令会另外说明差异你只需要根据自己系统选择对应小节即可。3. 核心知识与必会命令扫盲在正式安装前我们用最短篇幅认识几个后面会反复出现的命令。不需要记住所有细节能看懂即可。3.1 基础命令速览命令作用示例sudo以管理员权限执行命令sudo apt updateapt/yum软件包管理器sudo apt install mysql-serversystemctl管理系统服务sudo systemctl status mysqlmysqlMySQL 命令行客户端mysql -uroot -pgrep搜索文件内容grep temporary password /var/log/mysqld.logvim/nano编辑文件sudo vim /etc/mysql/mysql.conf.d/mysqld.cnffirewall-cmd/ufw防火墙管理sudo ufw allow 3306/tcp如果你连vim都不熟可以用nano操作方式更接近图形界面保存退出时按提示按CtrlO、CtrlX即可不需要记忆复杂模式切换。3.2 理解“安装”的本质在 Linux 上通过包管理器安装软件本质上就是“让系统从软件源仓库下载编译好的二进制包然后自动放置到对应目录并注册成系统服务”。你不需要关心文件具体放在哪里因为systemctl会帮你管理启动、停止、开机自启等动作。比如执行sudo apt install mysql-server -y系统会做这些事情查询软件源中是否有mysql-server包。检查依赖关系并一起下载。安装二进制文件、配置文件、数据目录。注册 mysql 服务。因此对小白来说最重要的一步就是“把软件源配好然后执行安装命令”剩下的事交给系统。3.3 服务管理基本思路安装完成后MySQL 不一定马上运行。你需要通过systemctl查看和启动# 查看服务状态 sudo systemctl status mysql # 启动服务 sudo systemctl start mysql # 设置开机自启 sudo systemctl enable mysql这里的enable和start是两个不同的概念start立刻启动服务但重启系统后不会自动启动。enable设置开机自启动让服务在系统启动后自动运行。实际部署中两者通常配合使用。4. 在线安装 MySQL保姆级步骤4.1 Ubuntu / Debian 系统安装4.1.1 更新软件源打开终端依次执行sudo apt update这个命令会刷新软件源缓存让系统知道软件仓库中现在有哪些可用版本。如果你的服务器是刚购买的这一步是必须的否则后面可能找不到软件包。有些教程会让你接着执行sudo apt upgrade -y升级所有软件包。新手可以跳过这一步因为升级其他软件入库可能会带来额外的变化。我们只需要更新索引即可。4.1.2 安装 MySQL Serversudo apt install mysql-server -y这里的-y表示遇到确认提示时自动输入“yes”避免过程中需要手动交互。安装完成后MySQL 服务通常会自动启动。检查服务是否正常运行sudo systemctl status mysql如果输出中有绿色的active (running)说明服务已经启动成功。4.1.3 以 root 身份进入 MySQLUbuntu 系统安装的 MySQL 默认 root 用户使用auth_socket验证插件也就是说你不需要密码但必须通过系统 root 用户或 sudo 用户登录 MySQL。执行sudo mysql如果看到如下提示说明你已经进入了 MySQL 命令行Welcome to the MySQL monitor. Commands end with ; or \g. ... mysql这是最特殊的“免密登录”方式仅本机 sudo 用户可用。接下来要把 root 密码改成一个你记得住的强密码。4.1.4 修改 root 密码在 MySQL 命令行中执行ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY YourStrongPass123!; FLUSH PRIVILEGES;说明caching_sha2_password是 MySQL 8.0 默认的密码认证插件。YourStrongPass123!是你要设置的密码请替换成自己的强密码。密码最好包含大小写字母、数字和特殊符号避免太弱被拒绝。执行完两条命令后输入exit;退出 MySQL再用密码登录测试mysql -uroot -p输入刚才设置的密码如果能进入mysql提示符说明 root 密码设置成功。4.1.5 安全初始化可选但推荐MySQL 提供了一个安全初始化工具可以引导你完成密码强度、删除匿名用户、禁止 root 远程登录等设置sudo mysql_secure_installation过程中会提问以下内容新手可以按下面的建议回答是否设置密码如果刚才已经设置过输入n跳过。是否移除匿名用户建议输入y。是否禁止 root 远程登录如果你有远程连接需求输入n如果只在本机使用输入y。是否删除测试数据库输入y。是否立即刷新权限输入y。安全初始化不是必须的但对于生产环境很有价值。即使是学习环境也建议点一次能帮你养成好的安全习惯。4.2 CentOS / Rocky Linux 系统安装CentOS 系统默认软件源中的 MySQL 包可能不是官方最新版。为了保证版本和后续升级更规范建议添加 MySQL 官方 yum 仓库。4.2.1 安装 MySQL 官方仓库首先进入 MySQL 官方仓库下载页面获取最新的.rpm地址或者直接执行sudo yum install -y https://repo.mysql.com/mysql80-community-release-el7-7.rpm如果你的系统是 CentOS 8 / Rocky 8可以把el7换成el8。这个命令会下载并安装 MySQL 的官方 yum 源配置文件。安装完仓库后查看可用版本yum repolist enabled | grep mysql正常情况下能看到mysql80-community仓库。4.2.2 安装 MySQLsudo yum install -y mysql-community-server这个命令会自动安装 MySQL 服务器、客户端等一系列组件。安装过程会下载较多文件耐心等待即可。4.2.3 启动 MySQL 并获取临时密码CentOS 系统安装 MySQL 后root 用户默认生成了一个临时密码记录在日志文件中。先启动服务sudo systemctl start mysqld sudo systemctl enable mysqld然后查看临时密码sudo grep temporary password /var/log/mysqld.log输出可能类似[Note] A temporary password is generated for rootlocalhost: xxxxxxxx把最后一段xxxxxxxx记下来这是你第一次登录需要用的密码。4.2.4 登录并修改密码mysql -uroot -p输入刚才的临时密码进入 MySQL 后执行ALTER USER rootlocalhost IDENTIFIED BY YourStrongPass123!; FLUSH PRIVILEGES;同样把YourStrongPass123!换成自己的强密码。然后执行exit;退出再次用新密码登录验证修改成功。4.2.5 安全初始化CentOS 上也建议运行sudo mysql_secure_installation选项含义和 Ubuntu 相同不再赘述。5. 使用 Docker 安装 MySQL更省心的方式如果你觉得上面这些步骤仍然复杂或者你希望以后可以快速重建数据库环境建议直接使用 Docker。Docker 把 MySQL 的运行环境封装在一个容器里不需要关心系统软件源也不需要手动管理配置文件。5.1 安装 Docker在 Ubuntu 上安装 Dockersudo apt update sudo apt install -y docker.io sudo systemctl enable --now docker在 CentOS 上安装 Dockersudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable --now docker安装完成后可以用docker version查看是否正常。5.2 一条命令启动 MySQL执行下面的命令即可创建一个名为mysql8的 MySQL 容器sudo docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDYourStrongPass123! \ -v /usr/local/mysql_data:/var/lib/mysql \ mysql:8.0命令参数说明-d后台运行。--name mysql8给容器设置一个名字方便后续管理。-p 3306:3306将宿主机 3306 端口映射到容器内的 3306 端口。-e MYSQL_ROOT_PASSWORDYourStrongPass123!设置 root 密码。-v /usr/local/mysql_data:/var/lib/mysql将容器内的数据目录挂载到宿主机。这样就算容器删了数据也不会丢。mysql:8.0从 Docker Hub 拉取 MySQL 8.0 镜像。如果你身上还没有这个镜像Docker 会自动下载稍等片刻即可。查看容器是否运行sudo docker ps当看到mysql8的 STATUS 为Up说明启动成功。5.3 进入容器执行命令想进入 MySQL 命令行时可以执行sudo docker exec -it mysql8 mysql -uroot -p这条命令的意思是在mysql8容器内执行mysql -uroot -p客户端命令并进入到交互式终端。输入密码后就能操作数据库了。查看日志sudo docker logs mysql8如果以后不想用了可以直接sudo docker stop mysql8 sudo docker rm mysql8数据因为已经挂载到宿主机所以没有丢失。这种安装方式特别适合“想要快速体验”或者“不想折腾系统环境”的朋友。6. 初始化配置与远程访问设置安装成功只是第一步接下来我们需要创建一个业务专用用户并开启远程访问这样才能让客户端工具Navicat、DBeaver、Workbench连上数据库。6.1 创建数据库和用户以 root 身份登录 MySQLmysql -uroot -p创建一个与业务相关的数据库CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;这里使用utf8mb4可以完整支持中文和 emoji 字符是目前最推荐的字符集。创建一个专用用户允许该用户从任意主机远程连接CREATE USER db_user% IDENTIFIED BY DbUserPssw0rd; GRANT ALL PRIVILEGES ON myapp.* TO db_user%; FLUSH PRIVILEGES;说明db_user%中的%表示任意 IP 都可以使用该账号登录。如果你只想让某一个固定 IP 连接可以把%换成 IP例如db_user192.168.1.100。这里授权范围是myapp.*只允许操作myapp库。不要轻易给生产环境用户授予所有库的权限。6.2 开放 3306 端口MySQL 默认监听 3306 端口。如果服务器有防火墙需要放行这个端口。Ubuntu 使用ufwsudo ufw allow 3306/tcp sudo ufw reloadCentOS 使用firewalldsudo firewall-cmd --permanent --add-port3306/tcp sudo firewall-cmd --reload如果你的服务器在云平台还需要在云控制台的安全组规则里放行 3306 端口。这一步经常被忽略导致数据库本地能连远程客户端却始终连接超时。6.3 用客户端工具测试连接打开 Navicat、DBeaver 或 MySQL Workbench填写主机你的服务器公网 IP 或主机名端口3306用户db_user密码DbUserPssw0rd点击测试连接如果成功说明整个部署流程已经完成。如果连接失败按第六、七节的排查思路逐项检查。7. 常见问题与排查思路下面整理小白最容易遇到的几个问题以及对应的解决方案。问题现象常见原因解决思路ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sockMySQL 服务未启动或 socket 路径不对先执行sudo systemctl status mysql确认服务是否运行如果没运行sudo systemctl start mysqlAccess denied for user rootlocalhost密码错误或 root 使用了免密登录插件使用sudo mysql进入后重新设置密码确认密码包含大小写和特殊字符Host xxx is not allowed to connect to this MySQL server当前用户不包含远程访问权限使用CREATE USER user%创建远程用户并执行FLUSH PRIVILEGES远程连接时提示Connection refused (Connection timed out)防火墙未放行 3306或云安全组未配置检查本机防火墙和云服务器安全组放行 3306 端口Your password does not satisfy the current policy requirements密码强度不符合 MySQL 策略设置更复杂的密码或调整validate_password策略不建议在生产环境调低使用docker run启动后端口冲突宿主机 3306 已被占用使用sudo lsof -i:3306查看占用进程或改用本机其他端口如3307映射7.1 忘记 root 密码怎么办如果彻底忘记 root 密码可以重置。Ubuntu 下直接使用sudo mysql免密进入然后执行ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY NewPassword123!; FLUSH PRIVILEGES;CentOS 下需要跳过授权表停止任务sudo systemctl stop mysqld以跳过授权表方式启动sudo mysqld_safe --skip-grant-tables 登录mysql -uroot清空密码FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY NewPassword123!; FLUSH PRIVILEGES;重启正常服务sudo systemctl restart mysqld这种方式要小心操作因为它会暂时绕过 MySQL 的权限验证。操作结束后务必重启服务恢复。7.2 数据目录权限问题如果启动时报/var/lib/mysql权限不足可以通过sudo chown -R mysql:mysql /var/lib/mysql然后重启服务。这种情况在从压缩包手动解压安装时较常见在线安装时一般不会遇到。8. 最佳实践与工程建议数据库是系统的核心装好了只是开始。下面几条建议来自常见的生产环境经验建议一开始就养成习惯。8.1 不使用 root 连接业务root 权限过大万一业务代码被 SQL 注入攻击者可以直接删库。更好的做法是为每个业务创建一个独立用户只授予该业务所需数据库的权限。例如GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO db_user%;开发阶段可以用ALL PRIVILEGES但生产环境强烈建议细化到具体操作。8.2 开启 binlog 和定期备份MySQL 8.0 默认开启了 binlog二进制日志它既能用于数据恢复也能作为主从复制的基础。建议每周做一次全量备份备份命令mysqldump -uroot -p --single-transaction --routines --triggers myapp myapp_backup.sql恢复数据mysql -uroot -p myapp myapp_backup.sql备份文件要放到独立目录并根据需要上传到对象存储或异地机器。8.3 限制远程访问范围不要随意把 root 开放给远程连接。如果必须远程管理可以指定允许的 IPCREATE USER admin10.0.0.5 IDENTIFIED BY StrongPassword123!;还可以修改 MySQL 监听地址只监听内网网卡# /etc/mysql/mysql.conf.d/mysqld.cnf bind-address 0.0.0.0如果需要外网访问建议在云安全组层面限制来源 IP而不是对所有 IP 开放 3306。8.4 合理设置密码策略MySQL 8.0 默认的密码策略比较严格这是好事。生产环境建议保持默认不要为了图方便关闭validate_password。如果测试环境觉得复杂密码影响效率可以通过以下命令临时降低等级SET GLOBAL validate_password.policy LOW; SET GLOBAL validate_password.length 6;但要注意这种做法只建议在本地测试环境使用不要带到生产。8.5 关注磁盘和日志MySQL 运行中产生的日志包括错误日志、慢查询日志、binlog。日志文件不断增长会占满磁盘导致数据库写入失败。建议定期查看磁盘df -h配置日志轮转MySQL 自带logrotate配置默认每天轮转一次可以检查一下配置是否启用。开启慢查询日志便于优化复杂 SQL。查看慢查询状态SHOW VARIABLES LIKE slow_query_log;8.6 在虚拟机或低配服务器部署时的注意事项如果你只是用 1 核 2G 的服务器学习MySQL 默认配置可能比较高容易内存不足。可以在配置文件中调小关键参数# /etc/mysql/mysql.conf.d/mysqld.cnf performance_schema OFF innodb_buffer_pool_size 64M修改后重启服务sudo systemctl restart mysql这是为了让低配机器能“跑得动”生产环境请按实际内存和并发量调整。9. 总结与下一步学习路线本文从零开始带你在 Linux 上完成了 MySQL 8.0 的安装和基础配置。你已经掌握了Linux 环境下使用包管理器安装 MySQL 的完整流程。通过 Docker 快速部署 MySQL 的方法。修改密码、创建用户、授权、配置远程访问的基本 SQL 操作。常见安装和连接问题的排查方法。数据库部署后的安全与运维基础建议。不要因为“不会命令”而害怕数据库部署。Linux 命令只是工具熟能生巧。当你亲手把 MySQL 跑起来并通过 Navicat 成功连上数据库时你已经迈过了系统运维中最实用的一道门槛。下一步建议按这样的顺序继续深入先熟悉 SQL 增删改查掌握SELECT、INSERT、UPDATE、DELETE。学会分析EXPLAIN执行计划优化索引。学习 MySQL 用户权限体系理解GRANT和REVOKE。掌握mysqldump备份与恢复这是保命技能。再进阶可以学习主从复制、读写分离和高可用方案。如果在操作过程中遇到报错不要慌先复制错误信息再对照本文第七节的排查思路检查。很多时候问题都出在服务没启动、防火墙没开放、用户权限不对或者密码不满足策略这几类原因上。希望这份教程能帮你在 Linux 和 MySQL 的路上少踩几个坑。如果这篇文章对你有帮助可以收藏备用下次部署时直接对照执行。
返回列表