CentOS 命令行安装 MySQL 详解
MySQL 是目前最流行的开源关系型数据库管理系统之一,广泛应用于各种 Web 应用、数据存储和管理场景。在 CentOS 系统上通过命令行进行安装,是服务器管理员和开发者必须掌握的基本技能。本文将详细、分步骤地介绍如何在 CentOS 系统上使用命令行安装 MySQL 服务器,涵盖从准备工作到安全配置和基本使用的各个方面,力求全面深入,帮助读者彻底理解安装过程。
引言
CentOS 是一款基于 Red Hat Enterprise Linux (RHEL) 源代码构建的社区驱动的免费操作系统,因其稳定性、安全性和长期支持而受到许多企业和个人的青睐,常被用作服务器操作系统。在 CentOS 上安装数据库,通常有以下几种主要方式:
- 使用 CentOS 默认软件仓库 (Yum/DNF):这种方式最简单快捷,但 CentOS/RHEL 8 及以后版本,默认仓库中的关系型数据库变为了 MariaDB(MariaDB 是 MySQL 的一个分支,提供了与 MySQL 兼容的接口,但在某些功能、性能或许可证上可能存在差异)。在较老的 CentOS 7 版本中,默认仓库可能包含较旧版本的 MySQL 或 MariaDB。如果您需要安装 Oracle 官方发布的 MySQL,则不推荐使用此方法。
- 使用 MySQL 官方 Yum 仓库:这是安装最新、官方版本 MySQL 的推荐方法。Oracle 提供了专门的 Yum 仓库,可以方便地通过
yum
命令安装和更新 MySQL Community Server 版本。本文将主要围绕这种方法进行详细讲解。 - 通过源代码编译安装:这种方法提供了最大的灵活性,可以自定义编译选项,但过程复杂,容易出错,不适合初学者或生产环境的快速部署。
- 通过 RPM 包手动安装:从 MySQL 官网下载 RPM 包进行安装。虽然可行,但处理依赖关系不如使用 Yum 仓库方便。
考虑到大多数用户希望安装官方最新版本的 MySQL Community Server 并能方便地管理更新,本文将聚焦于使用 MySQL 官方 Yum 仓库 的方法进行详细阐述。我们将以 CentOS 7 或 CentOS 8 为例进行说明(请注意,尽管 CentOS 8 已停止维护,但其软件包管理方式 dnf
是 yum
的下一代,许多概念是相通的,且基于 RHEL 8 的新发行版如 Rocky Linux 或 AlmaLinux 也沿用了这种方式,本文的思路也适用于这些系统;对于 CentOS 7,主要使用 yum
命令,过程基本一致)。
预备知识
在开始安装之前,请确保您具备以下条件:
- 一台运行 CentOS 系统的服务器或虚拟机。
- 具有
root
用户权限或配置了sudo
权限的普通用户。 - 稳定的互联网连接,以便下载软件包。
- 基本的 Linux 命令行操作知识。
第一阶段:系统准备与环境配置
在安装任何新的软件之前,更新系统是良好的习惯。这可以确保您的系统拥有最新的安全补丁和软件包列表,避免潜在的兼容性问题。
步骤 1.1:更新系统软件包
使用以下命令更新 CentOS 系统的所有软件包:
bash
sudo yum update -y
或者,如果您使用的是 CentOS 8 及更新版本,可以使用 dnf
命令(尽管 CentOS 8 已停止维护,但其继任者使用 dnf
):
bash
sudo dnf update -y
-y
选项会自动回答所有提示为“是”,这对于自动化脚本或在确认无误后快速执行非常方便。请根据您的实际情况选择是否使用此选项。
更新过程可能需要一些时间,具体取决于您的系统上次更新的时间和网络速度。
步骤 1.2:安装必要的工具(如果缺失)
通常情况下,CentOS 默认安装的系统包含了基本的网络工具,如 wget
,用于从网上下载文件。但为了确保万无一失,可以检查并安装一些常用的网络和开发工具包:
“`bash
sudo yum install -y wget net-tools
或者使用 dnf
sudo dnf install -y wget net-tools
“`
wget
用于下载 MySQL 官方 Yum 仓库的 RPM 包,net-tools
包含了一些网络诊断工具,例如 netstat
,在检查服务端口时可能会用到。
第二阶段:添加 MySQL 官方 Yum 仓库
正如前文所述,为了获取官方版本的 MySQL Community Server,我们需要将 MySQL 官方提供的 Yum 仓库添加到系统的仓库列表中。这样,我们就可以直接使用 yum
或 dnf
命令来搜索、安装和更新 MySQL 软件包。
步骤 2.1:访问 MySQL 官方网站获取仓库 RPM 包 URL
打开浏览器,访问 MySQL 官方网站的下载页面(通常是 https://dev.mysql.com/downloads/repo/yum/
)。在这个页面,您可以找到不同 Linux 发行版(包括 Enterprise Linux,这正是 CentOS 所基于的)的 Yum/DNF 仓库 RPM 包。
找到适用于 “RHEL / Oracle Linux / CentOS” 的版本,选择与您的 CentOS 大版本对应的 RPM 文件。例如,如果您使用的是 CentOS 7,可能会选择 “MySQL 8.0 Community Release Series”,然后找到适用于 “el7″(Enterprise Linux 7)的 RPM 包。如果您使用的是 CentOS 8(或 Rocky/Alma Linux 8),则选择适用于 “el8” 的 RPM 包。
复制对应 RPM 包的下载链接。这个链接通常是类似 https://dev.mysql.com/get/mysql80-community-release-el7-X.rpm
或 https://dev.mysql.com/get/mysql80-community-release-el8-X.rpm
的格式,其中 X
是版本号。
步骤 2.2:下载 MySQL Yum 仓库 RPM 包
回到 CentOS 命令行,使用 wget
命令下载您刚才复制的 RPM 包链接:
“`bash
示例:下载适用于 CentOS 7 的 MySQL 8.0 仓库 RPM 包
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
示例:下载适用于 CentOS 8 的 MySQL 8.0 仓库 RPM 包
wget https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm
请替换上面的 URL 为您从官网获得的最新链接
“`
下载完成后,您将在当前目录下看到类似 mysql80-community-release-elX-Y.noarch.rpm
的文件。
步骤 2.3:安装 MySQL Yum 仓库 RPM 包
使用 yum
或 dnf
命令安装下载的 RPM 包。这将把 MySQL 的官方仓库配置信息添加到 /etc/yum.repos.d/
目录下。
“`bash
对于 CentOS 7
sudo yum localinstall -y mysql80-community-release-el7-3.noarch.rpm
对于 CentOS 8 或使用 dnf
sudo dnf install -y mysql80-community-release-el8-3.noarch.rpm
请根据您下载的文件名进行替换
“`
localinstall
(或 install
配合本地文件路径)命令会安装这个 RPM 包,同时解析并安装其依赖项(如果有的话)。安装完成后,系统中就新增了 MySQL 官方仓库的配置。
步骤 2.4:查看并配置 MySQL Yum 仓库(重要!)
安装仓库 RPM 包后,会在 /etc/yum.repos.d/
目录下生成一个类似 mysql-community.repo
的文件。打开这个文件,您会看到不同 MySQL 版本(如 8.0, 5.7, 5.6 等)的仓库配置。默认情况下,最新版本(通常是 8.0)的仓库是启用的 (enabled=1
),而其他版本是禁用的 (enabled=0
)。
bash
cat /etc/yum.repos.d/mysql-community.repo
输出类似如下(部分内容):
“`ini
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
“`
如果您想安装特定版本的 MySQL(例如 5.7),您需要编辑这个文件,将您想安装版本的 enabled
参数改为 1
,同时将默认启用版本(如 8.0)的 enabled
参数改为 0
。
使用文本编辑器修改文件:
bash
sudo vi /etc/yum.repos.d/mysql-community.repo
例如,要安装 MySQL 5.7,找到 [mysql57-community]
部分,将其下的 enabled=0
改为 enabled=1
。然后找到 [mysql80-community]
部分,将其下的 enabled=1
改为 enabled=0
。
保存并关闭文件。这一步非常重要,决定了您将从哪个仓库安装 MySQL。如果您跳过此步,将默认安装最新版本(通常是 8.0)。
第三阶段:安装 MySQL Community Server
现在,系统已经配置好了 MySQL 官方 Yum 仓库,我们可以使用 yum
或 dnf
命令来安装 MySQL 服务器软件包了。
步骤 3.1:执行安装命令
使用以下命令安装 MySQL Community Server:
“`bash
对于 CentOS 7
sudo yum install mysql-community-server -y
对于 CentOS 8 或使用 dnf
sudo dnf install mysql-community-server -y
“`
mysql-community-server
是包含 MySQL 服务器、客户端和其他必要组件的主软件包。执行此命令后,yum
或 dnf
会解析依赖关系,并提示您安装所需的软件包。确认信息后,安装过程就会开始。
注意: 如果您之前没有正确配置仓库版本(步骤 2.4),此命令会安装默认启用的那个版本的 MySQL。如果您希望安装特定版本,请务必先调整 /etc/yum.repos.d/mysql-community.repo
文件。
安装过程可能需要一些时间,具体取决于您的网络速度和服务器性能。安装完成后,您会看到安装成功的提示信息。
第四阶段:启动 MySQL 服务
MySQL 服务器安装完成后,并不会自动启动。我们需要手动启动它,并设置其在系统启动时自动运行。
步骤 4.1:启动 MySQL 服务
使用 systemctl
命令启动 mysqld
服务(MySQL 服务的名称在 CentOS/RHEL 系统中通常是 mysqld
):
bash
sudo systemctl start mysqld
步骤 4.2:检查服务状态
使用 systemctl status
命令检查 MySQL 服务是否成功启动:
bash
sudo systemctl status mysqld
如果服务成功启动,您会看到类似如下的输出,其中 Active 行显示 active (running)
:
● mysqld.service - MySQL 8.0 Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2023-10-27 10:00:00 CST; 10s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/server-systemd-startup.html
Main PID: 12345 (mysqld)
Tasks: 40
Memory: 350.5M
CGroup: /system.slice/mysqld.service
└─12345 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
...
如果服务启动失败,请检查输出中的错误信息,并查看 MySQL 的错误日志文件。日志文件通常位于 /var/log/mysqld.log
,或者可以使用 journalctl -u mysqld
命令查看详细日志。
步骤 4.3:设置服务开机自启
为了让 MySQL 服务在系统重启后自动启动,使用 systemctl enable
命令:
bash
sudo systemctl enable mysqld
这会在系统启动时创建一个符号链接,指向 mysqld.service
文件,从而使其在启动过程中被 systemd 管理器加载和启动。您会看到类似 Created symlink from ...
的输出。
第五阶段:安全配置 MySQL
安装并启动 MySQL 后,最重要的一步是进行安全配置。默认安装的 MySQL 存在一些安全风险,例如没有设置 root 用户密码,允许匿名用户访问等。MySQL 提供了一个交互式脚本 mysql_secure_installation
来帮助我们完成这些安全设置。
步骤 5.1:运行安全配置脚本
在命令行中执行以下命令:
bash
sudo mysql_secure_installation
脚本会引导您一步步完成安全设置。以下是脚本通常会询问的问题以及建议的操作:
-
VALIDATE PASSWORD COMPONENT? (是否启用密码强度验证组件?)
- 输入
Y
并回车启用。这是一个非常有用的功能,可以强制您设置一个符合强度的 root 密码。 - 启用后,会提示您选择密码验证策略的级别:
0
:LOW (只检查密码长度 >= 8)1
:MEDIUM (检查长度 >= 8,数字,大小写字母,特殊字符)2
:STRONG (检查长度 >= 8,数字,大小写字母,特殊字符,字典文件检查)
- 建议选择
1
或2
以提高安全性。输入对应的数字(如1
或2
),然后回车。
- 输入
-
Change the password for root ? (是否更改 root 用户密码?)
- 安装官方版本时,root 用户的初始临时密码会记录在
/var/log/mysqld.log
文件中。在运行安全脚本时,您需要提供这个临时密码才能继续。 - 您可以使用以下命令找到临时密码:
bash
sudo grep 'temporary password' /var/log/mysqld.log
输出中类似A temporary password is generated for root@localhost: XXXXXXXX
的部分,XXXXXXXX
就是临时密码。 - 输入这个临时密码,然后按回车。
- 脚本会提示您输入并确认新的 root 密码。根据您选择的密码验证策略,输入的密码需要满足相应的强度要求。输入新密码,回车,再次输入新密码,回车。
- 如果成功设置了新密码,脚本会询问您是否继续使用这个密码。输入
Y
并回车。
- 安装官方版本时,root 用户的初始临时密码会记录在
-
Remove anonymous users? (是否移除匿名用户?)
- MySQL 默认安装时可能会创建一个或多个匿名用户,允许任何人无需密码即可连接到数据库,这非常不安全。
- 输入
Y
并回车移除匿名用户。强烈建议移除。
-
Disallow root login remotely? (是否禁止 root 用户远程登录?)
- 为了安全起见,通常不建议允许 root 用户从外部网络直接登录 MySQL。如果需要远程管理,应该创建专门的用户并赋予他们适当的权限。
- 输入
Y
并回车禁止 root 用户远程登录。强烈建议禁止。
-
Remove test database and access to it? (是否移除 test 数据库以及对其的访问权限?)
- MySQL 默认会创建一个名为
test
的数据库,供测试使用。在生产环境中,这个数据库没有必要,而且可能被滥用。 - 输入
Y
并回车移除test
数据库。强烈建议移除。
- MySQL 默认会创建一个名为
-
Reload privilege tables now? (是否立即重新加载权限表?)
- 前面所做的所有更改(如移除用户、设置密码等)都需要重新加载权限表才能生效。
- 输入
Y
并回车重新加载权限表。这是最后一步,确保所有安全设置立即生效。强烈建议重新加载。
完成以上步骤后,MySQL 的基本安全配置就完成了。您现在有了一个设置了强密码的 root 用户,并且移除了大部分默认的不安全项。
第六阶段:验证安装与基本使用
安全配置完成后,我们可以尝试连接到 MySQL 服务器,验证安装是否成功,并进行一些基本操作。
步骤 6.1:连接到 MySQL 服务器
使用 root 用户连接到 MySQL:
bash
mysql -u root -p
-u root
指定用户名为 root,-p
表示需要输入密码。按回车后,会提示您输入密码:
Enter password:
输入您在 mysql_secure_installation
脚本中为 root 用户设置的新密码,然后按回车。如果密码正确,您将看到 MySQL 的命令行提示符 mysql>
:
“`
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1234
Server version: 8.0.XX MySQL Community Server – GPL
Copyright (c) 2000, 202X, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
“`
这表明您已成功连接到 MySQL 服务器。
步骤 6.2:执行一些简单的 SQL 命令
在 mysql>
提示符下,您可以执行 SQL 命令。注意每条命令以分号 ;
结束。
- 查看当前 MySQL 版本:
sql
SELECT VERSION(); - 查看所有数据库(作为 root 用户,您应该能看到系统数据库):
sql
SHOW DATABASES; - 退出 MySQL 命令行客户端:
sql
EXIT;
或者使用快捷键Ctrl + D
。
第七阶段:防火墙配置(如果需要远程访问)
默认情况下,CentOS 的防火墙 firewalld
会阻止外部对大多数端口的访问,包括 MySQL 默认的 3306 端口。如果您需要允许其他机器连接到这台服务器上的 MySQL 服务,您需要在防火墙中打开 3306 端口。
警告: 允许远程访问会增加安全风险。请确保您的 MySQL 实例已通过 mysql_secure_installation
进行了安全配置,并且您清楚自己在做什么。通常建议只允许特定 IP 地址或 IP 范围访问,而不是完全开放。
步骤 7.1:检查 firewalld 服务状态
确保 firewalld
服务正在运行:
bash
sudo systemctl status firewalld
如果未运行,可以启动它并设置开机自启:
bash
sudo systemctl start firewalld
sudo systemctl enable firewalld
步骤 7.2:在 firewalld 中允许 MySQL 服务
firewalld
预定义了一些服务,包括 mysql
(默认端口 3306)。可以使用服务名称或端口号来放行。使用服务名称更灵活,即使将来 MySQL 默认端口有变化,只要 firewalld 的服务定义更新了,规则依然有效。
“`bash
允许 firewalld 永久放行 mysql 服务端口(默认 3306)
sudo firewall-cmd –permanent –add-service=mysql
或者允许 firewalld 永久放行 3306 端口
sudo firewall-cmd –permanent –add-port=3306/tcp
“`
--permanent
选项表示这些规则在防火墙重启后依然有效。如果不加这个选项,规则只在当前运行时生效。
步骤 7.3:重新加载防火墙规则
修改防火墙规则后,需要重新加载防火墙服务使其生效:
bash
sudo firewall-cmd --reload
步骤 7.4:验证端口是否开放
您可以使用 firewall-cmd --list-all
命令查看当前生效的所有防火墙规则,检查 services
或 ports
列表中是否包含 mysql
或 3306/tcp
。
bash
sudo firewall-cmd --list-all
现在,其他机器应该能够连接到这台 CentOS 服务器上的 MySQL 服务(前提是它们之间网络可达,并且您创建了允许远程连接的 MySQL 用户,不是 root 用户)。
第八阶段:常见问题与故障排除
在安装和配置过程中,可能会遇到一些问题。以下是一些常见问题及其解决方法:
-
服务无法启动 (
systemctl status mysqld
显示 failed):- 检查日志: 使用
journalctl -u mysqld
或查看/var/log/mysqld.log
文件,查找具体的错误信息。日志是最重要的诊断工具。 - 检查配置文件: 检查
/etc/my.cnf
或/etc/mysql/my.cnf
文件是否有语法错误或配置问题。 - 检查文件权限: 确保 MySQL 数据目录(通常是
/var/lib/mysql
)及其文件归mysql
用户和组所有,并且权限设置正确。可以使用sudo chown -R mysql:mysql /var/lib/mysql
和sudo chmod -R 755 /var/lib/mysql
(请谨慎使用 chmod,确保不影响安全性)。 - 检查磁盘空间: 确保
/var/lib/mysql
所在的分区有足够的空间。 - 检查 SELinux: SELinux 可能会阻止 mysqld 进程访问某些目录或端口。如果 SELinux 处于 Enforcing 模式,尝试将其设置为 Permissive 模式 (
sudo setenforce 0
) 或查找相关的 SELinux 策略规则。如果设置为 Permissive 后服务可以启动,说明是 SELinux 问题,需要配置相应的策略或考虑关闭(不推荐)。 - 检查端口占用: 确保 3306 端口没有被其他程序占用 (
sudo netstat -tulnp | grep 3306
)。
- 检查日志: 使用
-
忘记 root 密码:
- 可以按照 MySQL 官方文档的步骤重置 root 密码。这通常涉及停止 MySQL 服务,以安全模式启动,然后在没有权限验证的情况下连接并修改密码。这个过程比较详细,建议参考官方文档。
-
无法远程连接:
- 检查防火墙: 确保服务器的防火墙(如
firewalld
)允许来自客户端 IP 地址或网段的连接到 3306 端口(如步骤七所示)。 - 检查 MySQL 用户权限: 确保您尝试连接的 MySQL 用户允许从客户端 IP 地址进行连接。root 用户默认只允许从 localhost 连接(如果您在安全配置中选择了禁止远程 root 登录)。您需要创建一个允许从特定 IP 或所有 IP (
%
) 连接的非 root 用户,并赋予相应权限,例如:
sql
CREATE USER 'your_user'@'client_ip_address' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'client_ip_address' WITH GRANT OPTION;
FLUSH PRIVILEGES;
或允许从任意地址连接:
sql
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
(请谨慎使用@'%'
,只在确实需要时使用,并且确保用户密码强度高)。 - 检查 bind-address 配置: 检查 MySQL 配置文件 (
/etc/my.cnf
或相关文件) 中的bind-address
参数。如果它被设置为127.0.0.1
,MySQL 只监听本地连接。需要将其注释掉或设置为服务器的 IP 地址(通常是内网地址),或者设置为0.0.0.0
以监听所有接口(如果安全配置和防火墙都已到位)。修改后需要重启 MySQL 服务。 - 网络连通性: 确保客户端和服务器之间的网络是通的,没有路由或网络策略问题。
- 检查防火墙: 确保服务器的防火墙(如
-
mysql_secure_installation
脚本无法运行或提示权限问题:- 确保您使用了
sudo
命令以 root 权限运行脚本。 - 确保 MySQL 服务正在运行。
- 如果是在全新安装的 MySQL 8.0 上首次运行,您需要输入
/var/log/mysqld.log
中记录的临时 root 密码。
- 确保您使用了
第九阶段:卸载 MySQL (可选)
如果您需要卸载 MySQL 服务器,可以使用 yum remove
或 dnf remove
命令。请注意,这只会移除软件包,数据目录通常不会被删除。
步骤 9.1:停止 MySQL 服务
bash
sudo systemctl stop mysqld
步骤 9.2:卸载软件包
“`bash
对于 CentOS 7
sudo yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs -y
对于 CentOS 8 或使用 dnf
sudo dnf remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs -y
“`
这些是主要的 MySQL 相关软件包。-y
选项会自动确认移除。
步骤 9.3:删除数据目录和配置文件(可选且危险)
警告: 这一步将永久删除您的所有 MySQL 数据和配置文件。请在执行前务必备份重要数据!
如果您确定要彻底删除所有相关文件,包括数据,请执行以下命令:
“`bash
删除数据目录
sudo rm -rf /var/lib/mysql
删除配置文件(检查实际路径,可能在 /etc/my.cnf 或 /etc/mysql/)
sudo rm -f /etc/my.cnf
或者检查并删除 /etc/mysql 目录及其内容
sudo rm -rf /etc/mysql
删除日志文件(检查实际路径)
sudo rm -rf /var/log/mysqld.log
“`
请再次强调,执行 rm -rf
命令时务必小心谨慎!
结论
通过本文详细的步骤,您应该已经成功地在 CentOS 系统上通过命令行安装了官方版本的 MySQL Community Server,并进行了必要的安全配置。我们涵盖了从系统准备、添加官方仓库、安装、启动、安全加固到验证的整个流程,并提供了一些常见问题的排查思路。
命令行安装虽然可能不像图形界面那样直观,但它是服务器管理的标准方式,更灵活、高效,并且可以通过脚本进行自动化。掌握了这些步骤,您就可以在 CentOS 服务器上可靠地部署和管理 MySQL 数据库服务了。
记住,安装只是第一步。在生产环境中,还需要考虑更高级的配置、备份策略、监控、性能优化等方面的问题。但有了坚实的安装基础,后续的管理和维护也将更加顺畅。
希望这篇详细的安装指南对您有所帮助!