在Linux实例中安装MySQL数据库

更新时间:
一键部署
我的部署

本文介绍了如何在Linux系统上手动部署MySQL数据库,包括通过实例和官方镜像进行部署的方法,并提供了远程访问数据库的完整步骤,让用户在确保安全的同时,实现高效的数据库管理和访问。

手动部署MySQL方式概述

部署方式

优点

缺点

适用场景

使用实例本地仓库源部署MySQL数据库

  • 速度更快:本地仓库一般位于网络内或同一地区,下载速度较快。

  • 网络独立性:适用于内网环境,不依赖外部网络访问。

  • 一致性:本地仓库可以确保不同服务器之间使用相同的版本和配置,有利于版本控制和配置一致。

  • 控制性:可以自行维护和定制仓库内容和版本,适合需要特定定制的场景。

  • 更新滞后:本地仓库需要定期手动更新,可能无法及时获得最新版本或补丁。

  • 维护成本:维护本地仓库需要额外的人力和技术成本。

  • 本地仓库源适用于对速度要求高,以及在内网环境(如企业内部)中,无法访问互联网的场景。

使用官方镜像源部署MySQL数据库

  • 更新及时:可以获得 MySQL 官方最新的版本和安全补丁,确保数据库软件的及时更新。

  • 维护简单:不需要自己维护仓库,只需获取官方提供的源配置。

  • 社区支持:配置和安装过程有广泛的社区和官方支持文档,容易找到帮助。

  • 网络依赖:安装和更新需要依赖互联网连接,可能受网络速度影响。

  • 版本不一致:如果不进行版本锁定,可能不同时间安装会导致版本不一致。

  • 下载速度:可能会因为网络情况导致下载速度较慢。

  • 官方镜像源适用于需要最新特性和补丁,且对网络条件较好或不受网络限制的场景。

部署MySQL

Alibaba Cloud Linux 3 / CentOS

使用实例本地仓库源部署MySQL数据库

重要
  • 请注意,通过本地软件仓库(如 Yum 或 APT)安装软件时,获取的版本可能不是最新的发布版本。如果您需要安装最新发布版本或特定版本MySQL,请参见使用官方镜像源部署MySQL数据库

  • 使用本地仓库部署MySQL服务仅支持Alibaba Cloud Linux 3、CentOS 8.x、UbuntuDebian操作系统。

  • Ubuntu 18.0及以下版本操作系统实例,使用本地仓库部署MySQL服务默认版本为5.7.42,若需安装特定版本MySQL时,请参见使用官方镜像源部署MySQL数据库

  1. 远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 运行以下命令,更新实例镜像源。

    sudo yum update
  3. 运行以下命令,在本地仓库中搜索MySQL安装包。

    sudo yum search mysql-server

    如果得到如下显示,则说明本地仓库中有MySQL的安装包。

    image

  4. 运行以下命令来安装 MySQL 服务器。

    sudo yum install mysql-server
  5. 运行以下命令,启动 MySQL 服务。

     sudo systemctl start mysqld
  6. 设置MySQL服务开机自启动。

    sudo systemctl enable mysqld
  7. 运行以下命令,查看MySQL服务状态,若返回结果中Activeactive (running),即表示MySQL服务成功启动。其余状态请参见MySQL服务常见状态说明。

    sudo systemctl status mysqld
  8. MySQL服务启动完成后,请继续参见MySQL服务安全配置完成相关配置。

使用官方镜像源部署MySQL数据库

  1. 远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. (可选)当操作系统为Alibaba Cloud Linux 3时,请执行如下命令,安装MySQL所需的库文件。

    sudo rpm -Uvh https://mirrors.aliyun.com/alinux/3/updates/x86_64/Packages/compat-openssl10-1.0.2o-4.0.1.al8.x86_64.rpm
  3. 您可以根据自己的需求选择MySQL的版本并安装RPM包,以下命令以安装更新MySQL社区版的RPM仓库为例,您应根据需要在MySQL Yum仓库中选择相应的版本链接:

    sudo rpm -Uvh [MySQL版本对应的RPM包链接]

    例如,对于MySQL最新的8.4版本,可以使用以下链接(请根据实际需要替换为正确的链接):

    sudo rpm -Uvh https://dev.mysql.com/get/mysql84-community-release-el8-1.noarch.rpm
    说明

    MySQL版本对应的RPM包链接中的mysql80-community-release-el7-1其中:

    • el7: 代表RHEL 7或与其兼容的系统版本,如Alibaba Cloud Linux 2、CentOS 7。

    • el8: 代表RHEL 8或与其兼容的系统版本,如Alibaba Cloud Linux 3、CentOS 8、AlmaLinux 8Rocky Linux 8。

    • el9: 代表RHEL 9或与其兼容的系统版本,如CentOS Stream 9或其他基于EL9的发行版。

    请确保您选择的仓库配置与操作系统版本相匹配,以避免安装过程中出现不必要的依赖问题或版本不兼容的错误。如果不确定系统版本,请运行cat /etc/os-release来查看详细信息。

  4. 运行以下命令,确认 MySQL Repository 已成功添加。

    sudo yum repolist enabled | grep mysql

    您应该能看到类似以下的输出,表示 MySQL 相关的 YUM 源已被正确添加。

    image

  5. 根据用户选择的MySQL版本,使用以下命令,安装MySQL。请将[MySQL版本]替换为实际的版本号

    sudo yum -y install mysql-community-server --enablerepo=mysql[MySQL版本]-community --nogpgcheck

    例如,对于MySQL8.4,可以使用以下命令安装MySQL。

    sudo yum -y install mysql-community-server --enablerepo=mysql-8.4-lts-community --nogpgcheck

    出现报错:Unknown repo: 'mysql[MySQL版本]-community'

    执行以下命令尝试清理 YUM 缓存并生成新的缓存,清理完成后再次尝试安装命令。

    sudo yum clean all
    sudo yum makecache
    sudo yum -y install mysql-community-server --enablerepo=mysql[MySQL版本]-community --nogpgcheck
  6. 运行以下命令,查看MySQL版本号。

    mysql -V

    返回结果如下,表示MySQL安装成功。

    mysql  Ver 8.4.3 for Linux on x86_64 (MySQL Community Server - GPL)
  7. 安装完成后,运行以下命令,启动 MySQL 服务。

    sudo systemctl start mysqld
  8. 为了确保 MySQL 服务在系统启动时自动启动,运行以下命令可以使其开机自启。

    sudo systemctl enable mysqld
  9. 运行以下命令,查看MySQL服务状态。

    若返回结果中Activeactive (running),即表示MySQL服务成功启动。MySQL服务常见状态请参见MySQL服务常见状态有哪些?

    sudo systemctl status mysqld

Ubuntu/Debian

使用实例本地仓库源部署MySQL数据库

  1. 远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 运行以下命令,更新实例镜像源。

    sudo apt update
    sudo apt upgrade
  3. 运行以下命令,在本地仓库中搜索MySQL安装包。

    sudo apt search mysql-server

    如果得到如下显示,则说明本地仓库中存在MySQL服务安装包。

    image

    若搜索结果中无mysql-server相关安装包,则表示当前实例本地仓库中不包含MySQL安装包,请参见使用官方镜像源部署MySQL数据库部署MySQL服务。

  4. 运行以下命令来安装 MySQL 服务器。

    • Ubuntu。

      sudo apt install mysql-server
    • Debian。

      说明

      Debian默认APT仓库中并没有MySQL官方社区版本安装包,在Debian中,MariaDB 作为默认的数据库管理系统来替代 MySQL。MariaDB 是 MySQL 的一个分支,由原来 MySQL 的开发者创建,旨在保持开源。

      若您需要MySQL社区版本服务,请参见使用官方镜像源部署MySQL数据库

      sudo apt install default-mysql-server
  5. 安装完成后,运行以下命令,启动 MySQL 服务。

    sudo systemctl start mysql
  6. 为了确保 MySQL 服务在系统启动时自动启动,运行以下命令可以使其开机自启。

    sudo systemctl enable mysql
  7. 运行以下命令,查看MySQL服务状态,确认 MySQL 服务是否成功启动。

    sudo systemctl status mysql

    若返回结果中Activeactive (running),即表示MySQL服务成功启动。MySQL服务常见状态请参见MySQL服务常见状态有哪些?

  8. UbuntuDebian操作系统中,MySQL 会使用auth_socket插件默认为root用户进行认证;有关auth_socket插件的详细信息请参见什么是auth_socket插件?

    1. 请参见MySQL服务安全配置,完成MySQL安全策略配置。

    2. 运行以下命令,以系统 root 用户身份登录 MySQL。

      sudo mysql

      image

    3. 运行以下命令创建新用户并设置密码。本例中创建一个用户名为mysql_test,只允许本地访问,密码为8uhb^YJm的用户,请根据实际需求替换命令中用户名、主机限制与密码。

      说明

      localhost意味着用户只能从数据库服务器所在的同一主机进行连接。其背后的机制是 MySQL 将localhost视为 Unix socket 连接。如果您想允许从外部主机连接,可以用该主机的 IP 地址或主机名取代localhost,或者使用通配符%来代表任意主机。

      CREATE USER 'mysql_test'@'localhost' IDENTIFIED BY '8uhb^YJm';
    4. 运行以下命令授予新用户对特定数据库的所有权限。本例中为mysql_test用户授予example_db所有表的管理权限。

      GRANT ALL PRIVILEGES ON example_db.* TO 'mysql_test'@'localhost';

      授予 ALL PRIVILEGES 可能会带来安全风险,特别是在生产环境中。建议根据实际需要仅授予必要的最小权限。如果某用户只需要读取数据,可以只授予 SELECT 权限。

      GRANT SELECT ON example_db.* TO 'mysql_test'@'localhost';
    5. 运行以下命令,刷新 MySQL 的权限表,以确保新授予的权限立即生效。

      FLUSH PRIVILEGES;

使用官方镜像源部署MySQL数据库

  1. 运行以下命令,更新系统apt仓库,确保您的系统包列表为最新。

    sudo apt update
    sudo apt upgrade
  2. 添加 MySQL 官方 APT 存储库,访问 MySQL APT repository 页面,获取适合您的 Ubuntu 版本的 MySQL APT 配置包链接;运行以下命令下载对应版本APT配置包。

    sudo wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
  3. 运行以下命令,使用 dpkg 命令安装下载的 MySQL APT 配置包。

     sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb

    安装过程中会出现一个配置选项界面。

    1. (可选)若mysql-apt-config 脚本认为您的操作系统不是其正式支持的版本。会出现如下界面,您可以选择一个与您的系统版本最接近的支持选项来继续安装。在本例中,选择最新的jammy版本系统。获取系统别名请参见Ubuntu/Debian实例如何获取系统别名?

      image

    2. 配置页面会列出待安装的全部组件,其中包括MySQL Server 、Client、Tool等一系列组件,确认版本及待安装组件无误,按方向键切换到OK并回车。

      image

  4. 运行以下命令再次更新包列表,以使新添加的 MySQL 存储库生效。

    sudo apt update
  5. 运行以下命令使用 apt-getapt 命令安装 MySQL 服务器。

    sudo apt install mysql-server
  6. 安装完成后,运行以下命令启动 MySQL 服务并检查其状态。

    sudo systemctl start mysql
    sudo systemctl status mysql

    MySQL服务常见的状态请参见MySQL服务常见状态有哪些?

  7. 运行以下命令确保 MySQL 在系统启动时自动启动。

    sudo systemctl enable mysql

MySQL服务安全配置

Alibaba Cloud Linux3/CentOS

  1. 运行以下命令,获取root用户临时密码。

    sudo grep 'temporary password' /var/log/mysqld.log

    返回信息类似,表示root用户初始密码为1qt1lb-jQ1I6

    2024-12-17T02:05:43.885354Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 1qt1lb-jQ1I6
  2. 运行以下命令,启动MySQL安全安装向导。

    sudo mysql_secure_installation
  3. 输入步骤一查询的root用户初始密码。

    说明

    输入密码时界面不会显示密码的输入过程,请您确保输入的密码正确。

    image

  4. 输入y移除匿名用户。

    移除匿名用户可以防止未经授权的用户在没有提供有效凭证的情况下访问你的 MySQL 服务器。

    image

  5. 系统会询问是否禁止 MySQL 的 root 用户从远程登录。为了安全起见,通常建议禁止 root 用户远程登录。

    • yY 以禁止远程 root 登录:

      image

    • 如果有特定需求允许 root 用户远程访问(如在受控环境中进行管理),可以按除Y以外任意键以允许远程 root 登录;并采取其他措施来加强安全性(如使用 SSH 隧道或 VPN)。

      image

  6. 输入y移除 MySQL 自带的 test 数据库。

    test 数据库默认情况下允许任何用户访问,为了保证系统的安全且保持良好管理实践,建议删除这个默认数据库。

    image

  7. 输入y重新加载权限表,使之前所有更改生效。

    image

Ubuntu/Debian

  1. 运行以下命令,启动MySQL安全安装向导。

    sudo mysql_secure_installation
  2. 设置 VALIDATE PASSWORD 组件。

    该组件主要用于验证密码的强度,可以帮助提高数据库的安全性,选择是否启用该组件取决于您的安全需求和使用环境。

    可以选择 yY 来启用组件,或者选择其他键跳过这个步骤。启用该组件后,还需要配置密码强度级别。

    image

  3. 当选择启用VALIDATE PASSWORD 组件时,需要根据您对安全性的需求选择适当的密码复杂度级别。

    说明

    密码复杂度级别说明

    • LOW (低):

      • 要求:密码长度至少为 8 个字符。

      • 适用场景:对于密码复杂度要求较低的环境。

    • MEDIUM (中):

      • 要求:密码长度至少为 8 个字符,且必须包含数字、大写和小写字母以及特殊字符。

      • 适用场景:大多数生产环境中推荐使用的级别,具有较好的平衡。

    • STRONG (高):

      • 要求:密码长度至少为 8 个字符,且必须包含数字、大写和小写字母、特殊字符,并且进行字典检测防止使用常见单词。

      • 适用场景:对于安全性要求极高的环境,推荐使用此级别。

    image

    输入所选密码级别之后,根据对应的级别的密码要求,配置对应的密码。注意设置密码时控制台并不直接打印密码,请确保两次输入密码一致。

    image

    配置完成密码后,系统会返回一个密码强度估算值,本例中密码强度估算值为 100,表示您选择的密码在所设置的密码策略下被认为非常强。

    之后系统会要求您确认所提供的密码是否符合您期望的安全策略。这一提示是为了确保您没有错误输入密码或者要验证的密码是否符合先前选择的验证策略。满意则输入Y;不满意密码或想要重新设置则输入n

    image

  4. 输入y移除匿名用户。

    移除匿名用户可以防止未经授权的用户在没有提供有效凭证的情况下访问你的 MySQL 服务器。

    image

  5. 系统会询问是否禁止 MySQL 的 root 用户从远程登录。为了安全起见,通常建议禁止 root 用户远程登录。

    • yY 以禁止远程 root 登录:

      image

    • 如果有特定需求允许 root 用户远程访问(如在受控环境中进行管理),可以按除Y以外任意键以允许远程 root 登录;并采取其他措施来加强安全性(如使用 SSH 隧道或 VPN)。

      image

  6. 输入y移除 MySQL 自带的 test 数据库。

    test 数据库默认情况下允许任何用户访问,为了保证系统的安全且保持良好管理实践,建议删除这个默认数据库。

    image

  7. 输入y重新加载权限表,使之前所有更改生效。

    image

远程访问MySQL数据库

远程访问 MySQL 数据库可以使用MySQL Client或其他数据库管理工具,从不同的机器或网络中连接到 MySQL 服务器。

  • 数据库管理工具连接:(推荐)您可以通过阿里云提供的数据管理服务DMS(Data Management Service)来远程访问MySQL数据库。具体操作,请参见相关文档云数据库录入。您也可以通过MySQL客户端远程登录MySQL进行测试。例如:MySQL Workbench、Navicat。

  • MySQL Client连接:以下是使用MySQL Client进行远程访问的详细步骤。

    说明

    为了安全地允许特定用户通过远程地址访问数据库,建议使用非root账户进行MySQL数据库的远程登录。以下示例将展示如何创建新的MySQL账户,以便于远程访问MySQL服务。

    1. 远程连接ECS实例。

      具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

    2. 配置安全组,MySQL 默认使用端口 3306。实例安全组的入方向规则需放通3306端口,如果您配置了其他端口,请根据实际情况进行安全组配置。具体操作请参见添加安全组规则

    3. 运行以下命令后,输入root用户的密码登录MySQL。root用户密码为MySQL服务安全配置步骤配置的密码。

      sudo mysql -uroot -p
    4. 可选择创建新用户进行远程访问或者修改现有用户权限。

      说明

      在本例的SQL语句中:

      • <username>是您希望远程访问的用户名。

      • <password>是该用户的密码。

      • %作为通配符,允许从任何外部主机连接到 MySQL。

      • 运行以下命令,创建新用户。

        -- 创建新用户
        CREATE USER '<username>'@'%' IDENTIFIED BY '<password>';
      • 运行以下命令,更改现有用户远程访问权限。

        ALTER USER '<username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
        UPDATE mysql.user SET Host='%' WHERE User='<username>' AND Host='localhost';
    5. 运行以下命令,确保该用户有权访问所需的数据库。

      GRANT ALL PRIVILEGES ON database_name.* TO '<username>'@'%';
    6. 运行以下命令,刷新权限,以使前述更改生效。

      FLUSH PRIVILEGES;
    7. MySQL命令行界面执行exit退出命令行后,运行以下命令,测试所配置的用户名及密码是否生效。

      mysql -u <username> -p -h <server_ip_address> -P 3306
      • <server_ip_address>是 MySQL 服务器的 IP 地址。

      • -P用于指定端口号(默认是 3306)。