在CentOS服务器环境中搭建强大的数据库后端,MySQL无疑是最经典且可靠的选择之一,作为网站的核心支撑,一个稳定、安全、性能良好的MySQL服务至关重要,本文将详细介绍在采用LNMP(Linux, Nginx, MySQL, PHP)架构的CentOS系统上,安装MySQL社区版(MySQL Community Server)的完整步骤,力求清晰易懂,帮助您高效完成部署。
准备工作:系统更新与依赖
在着手安装任何新软件之前,保持系统最新是良好的习惯,这有助于修复已知漏洞并确保兼容性。
- 登录服务器: 使用SSH客户端(如PuTTY、Terminal)以
root
用户或有sudo
权限的用户登录您的CentOS服务器。 - 更新系统包: 执行以下命令:
sudo yum update -y
系统将检查并更新所有可升级的软件包,输入
y
确认更新(如果提示)并等待完成。
添加MySQL官方Yum仓库
CentOS默认的仓库可能不包含最新版的MySQL,为了获取官方提供的最新稳定版本和安全更新,我们需要添加MySQL的官方Yum仓库。
- 下载仓库安装包: 访问MySQL官方Yum仓库下载页面(通常可以在MySQL官网找到对应链接),或者直接使用
wget
下载,请务必确认您下载的是对应您CentOS版本的仓库包(例如CentOS 7或8),以下是CentOS 7的示例:sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
提示:如果链接失效或需要其他版本,请访问MySQL官方网站查找正确的仓库包链接。
- 安装仓库RPM包: 下载完成后,安装该仓库包:
sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm
这个操作会将MySQL的仓库信息添加到您的系统中。
- 验证仓库启用: 检查仓库是否成功添加并启用:
sudo yum repolist enabled | grep "mysql.*-community.*"
您应该能看到类似
mysql80-community
的仓库被列出。
安装MySQL服务器
仓库配置好后,安装MySQL服务器就变得非常简单。
- 执行安装命令:
sudo yum install mysql-community-server -y
这条命令会安装MySQL服务器软件及其所有必需的依赖包。
-y
参数表示自动确认安装提示,安装过程可能需要几分钟,取决于您的网络速度和服务器性能。
启动MySQL服务并设置开机自启
安装完成后,需要启动MySQL服务并确保它在服务器重启后自动运行。
- 启动MySQL服务:
sudo systemctl start mysqld
- 查看服务状态: 验证MySQL是否已成功启动:
sudo systemctl status mysqld
如果看到类似
active (running)
的状态信息,表示启动成功。 - 设置开机自启:
sudo systemctl enable mysqld
这样,每次服务器重启时,MySQL都会自动启动。
进行安全初始化(关键步骤)
新安装的MySQL为了安全起见,会生成一个临时的root
用户密码,并且默认的安全配置并不完善,运行mysql_secure_installation
脚本是加固数据库安全的关键一步。
- 查找临时密码: MySQL首次启动后,临时密码会记录在日志文件中,使用以下命令查找:
sudo grep 'temporary password' /var/log/mysqld.log
输出类似:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: JqkfT3jae!8d
,请记下冒号()后面的密码(包含空格和特殊字符)。 - 运行安全配置脚本:
sudo mysql_secure_installation
- 按照提示操作:
- Enter password for user root: 输入刚才找到的临时密码(输入时不会显示,输完按回车)。
- Change the password for root? (Press y|Y for Yes, any other key for No): 强烈建议输入
y
更改root
密码。 - New password: 设置一个强壮的、符合复杂性要求的新密码(通常要求包含大小写字母、数字、特殊字符,长度至少8位)。
- Re-enter new password: 再次输入新密码确认。
- Remove anonymous users? (Press y|Y for Yes, any other key for No): 输入
y
,删除匿名用户可提升安全性。 - Disallow root login remotely? (Press y|Y for Yes, any other key for No): 输入
y
,通常建议禁止root
用户远程登录,使用普通用户连接更安全。 - Remove test database and access to it? (Press y|Y for Yes, any other key for No): 输入
y
,移除测试数据库及其访问权限。 - Reload privilege tables now? (Press y|Y for Yes, any other key for No): 输入
y
,使以上所有安全设置立即生效。
配置防火墙(如果需要远程访问)
如果您的应用程序(比如部署在同一服务器的PHP程序)只需要本地访问MySQL(通过localhost
或0.0.1
),则通常不需要额外配置防火墙,但如果需要从其他服务器或客户端远程连接MySQL,则需要在防火墙中开放MySQL的默认端口(3306)。
- 开放MySQL端口(3306):
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重新加载防火墙规则:
sudo firewall-cmd --reload
重要安全提示: 开放远程访问端口存在风险,务必确保:
- 仅允许受信任的IP地址或IP段访问(使用
--add-rich-rule
更安全)。 - 用户权限最小化,避免使用
root
远程登录。 - 考虑使用SSH隧道或VPN进行更安全的连接,生产环境强烈建议限制访问源IP。
- 仅允许受信任的IP地址或IP段访问(使用
测试MySQL连接与基本操作
完成安装和安全配置后,测试一下是否能正常连接并使用MySQL。
- 登录MySQL命令行:
mysql -u root -p
系统会提示您输入上一步设置的
root
新密码,输入正确密码后,您将看到MySQL的命令行提示符:mysql>
。 - 执行简单命令: 尝试查看当前数据库:
SHOW DATABASES;
您应该能看到系统默认的数据库列表(如
information_schema
,mysql
,performance_schema
,sys
)。 - 退出MySQL命令行:
EXIT;
基础管理命令备忘
- 启动服务:
sudo systemctl start mysqld
- 停止服务:
sudo systemctl stop mysqld
- 重启服务:
sudo systemctl restart mysqld
- 查看状态:
sudo systemctl status mysqld
- 设置开机自启:
sudo systemctl enable mysqld
(安装后通常已执行) - 取消开机自启:
sudo systemctl disable mysqld
- 查看MySQL版本:
mysql --version
或登录后执行SELECT VERSION();
常见问题与排查
- 忘记
root
密码: 需要停止MySQL服务,以跳过授权表的方式启动,然后重置密码,具体步骤请务必参考官方文档,操作不当有安全风险。 - 无法启动/连接失败:
- 检查服务状态:
sudo systemctl status mysqld
- 查看错误日志:
sudo tail -f /var/log/mysqld.log
(这是诊断问题最重要的信息来源)。 - 检查端口监听:
sudo netstat -tulnp | grep mysql
- 确认防火墙规则。
- 检查服务状态:
- 密码策略问题: MySQL 8.0 默认密码策略较严格,如果设置密码时报错,请确认密码满足复杂性要求(大小写、数字、特殊字符、长度),可在安全初始化后,登录MySQL使用
ALTER USER
语句调整密码策略(需谨慎操作)。
观点:
作为长期维护服务器的实践者,我始终认为数据库的安全是网站生命线的基石,一次成功的安装只是起点,后续定期的安全更新(sudo yum update mysql-community-server
)、严谨的用户权限管理、以及数据库配置的持续调优,才是保障服务稳定高效运行的关键,尤其要重视mysql_secure_installation
步骤和防火墙策略,这些看似简单的设置,往往是阻挡外部侵扰的第一道有效防线,MySQL 8.0带来了显著的性能提升和更完善的安全特性,投入时间去熟悉它,绝对物有所值。