CentOS 命令行安装 MySQL 详解 – wiki基地


CentOS 命令行安装 MySQL 详解

MySQL 是目前最流行的开源关系型数据库管理系统之一,广泛应用于各种 Web 应用、数据存储和管理场景。在 CentOS 系统上通过命令行进行安装,是服务器管理员和开发者必须掌握的基本技能。本文将详细、分步骤地介绍如何在 CentOS 系统上使用命令行安装 MySQL 服务器,涵盖从准备工作到安全配置和基本使用的各个方面,力求全面深入,帮助读者彻底理解安装过程。

引言

CentOS 是一款基于 Red Hat Enterprise Linux (RHEL) 源代码构建的社区驱动的免费操作系统,因其稳定性、安全性和长期支持而受到许多企业和个人的青睐,常被用作服务器操作系统。在 CentOS 上安装数据库,通常有以下几种主要方式:

  1. 使用 CentOS 默认软件仓库 (Yum/DNF):这种方式最简单快捷,但 CentOS/RHEL 8 及以后版本,默认仓库中的关系型数据库变为了 MariaDB(MariaDB 是 MySQL 的一个分支,提供了与 MySQL 兼容的接口,但在某些功能、性能或许可证上可能存在差异)。在较老的 CentOS 7 版本中,默认仓库可能包含较旧版本的 MySQL 或 MariaDB。如果您需要安装 Oracle 官方发布的 MySQL,则不推荐使用此方法。
  2. 使用 MySQL 官方 Yum 仓库:这是安装最新、官方版本 MySQL 的推荐方法。Oracle 提供了专门的 Yum 仓库,可以方便地通过 yum 命令安装和更新 MySQL Community Server 版本。本文将主要围绕这种方法进行详细讲解。
  3. 通过源代码编译安装:这种方法提供了最大的灵活性,可以自定义编译选项,但过程复杂,容易出错,不适合初学者或生产环境的快速部署。
  4. 通过 RPM 包手动安装:从 MySQL 官网下载 RPM 包进行安装。虽然可行,但处理依赖关系不如使用 Yum 仓库方便。

考虑到大多数用户希望安装官方最新版本的 MySQL Community Server 并能方便地管理更新,本文将聚焦于使用 MySQL 官方 Yum 仓库 的方法进行详细阐述。我们将以 CentOS 7 或 CentOS 8 为例进行说明(请注意,尽管 CentOS 8 已停止维护,但其软件包管理方式 dnfyum 的下一代,许多概念是相通的,且基于 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 仓库添加到系统的仓库列表中。这样,我们就可以直接使用 yumdnf 命令来搜索、安装和更新 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.rpmhttps://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 包

使用 yumdnf 命令安装下载的 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 仓库,我们可以使用 yumdnf 命令来安装 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 服务器、客户端和其他必要组件的主软件包。执行此命令后,yumdnf 会解析依赖关系,并提示您安装所需的软件包。确认信息后,安装过程就会开始。

注意: 如果您之前没有正确配置仓库版本(步骤 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

脚本会引导您一步步完成安全设置。以下是脚本通常会询问的问题以及建议的操作:

  1. VALIDATE PASSWORD COMPONENT? (是否启用密码强度验证组件?)

    • 输入 Y 并回车启用。这是一个非常有用的功能,可以强制您设置一个符合强度的 root 密码。
    • 启用后,会提示您选择密码验证策略的级别:
      • 0:LOW (只检查密码长度 >= 8)
      • 1:MEDIUM (检查长度 >= 8,数字,大小写字母,特殊字符)
      • 2:STRONG (检查长度 >= 8,数字,大小写字母,特殊字符,字典文件检查)
    • 建议选择 12 以提高安全性。输入对应的数字(如 12),然后回车。
  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 并回车。
  3. Remove anonymous users? (是否移除匿名用户?)

    • MySQL 默认安装时可能会创建一个或多个匿名用户,允许任何人无需密码即可连接到数据库,这非常不安全。
    • 输入 Y 并回车移除匿名用户。强烈建议移除。
  4. Disallow root login remotely? (是否禁止 root 用户远程登录?)

    • 为了安全起见,通常不建议允许 root 用户从外部网络直接登录 MySQL。如果需要远程管理,应该创建专门的用户并赋予他们适当的权限。
    • 输入 Y 并回车禁止 root 用户远程登录。强烈建议禁止。
  5. Remove test database and access to it? (是否移除 test 数据库以及对其的访问权限?)

    • MySQL 默认会创建一个名为 test 的数据库,供测试使用。在生产环境中,这个数据库没有必要,而且可能被滥用。
    • 输入 Y 并回车移除 test 数据库。强烈建议移除。
  6. 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 命令查看当前生效的所有防火墙规则,检查 servicesports 列表中是否包含 mysql3306/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/mysqlsudo 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 removednf 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 数据库服务了。

记住,安装只是第一步。在生产环境中,还需要考虑更高级的配置、备份策略、监控、性能优化等方面的问题。但有了坚实的安装基础,后续的管理和维护也将更加顺畅。

希望这篇详细的安装指南对您有所帮助!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部