如何在 Google Compute Engine 上设置 MySQL

Last reviewed 2021-11-23 UTC

您可以通过多种方式将 MySQL 部署为 Google Cloud 项目的一部分。您可以使用 Cloud SQL、Google Cloud Marketplace 或通过手动方式在 Compute Engine 上安装 MySQL。

Cloud SQL 以网络服务的形式提供 MySQL。您可以使用 Cloud SQL 在 Google 的云中托管 MySQL 数据库,让 Google Cloud 来处理复制、补丁程序管理和数据库管理等管理任务。

Cloud Marketplace 提供了简单的一键部署界面,可让您将 MySQL 轻松安装到 Compute Engine 实例上。Cloud Marketplace 不仅包含独立的 MySQL 安装,还包含许多使用 MySQL 的网络开发堆栈,例如 LAMP 堆栈、LEMP 堆栈和 Percona MySQL 集群等等。

如果希望手动安装和自定义 MySQL,您可以使用 Compute Engine 来创建 MySQL 数据库,只需几分钟即可完成。本文档将在方法选择上提供指导,同时介绍如何在 Compute Engine 上手动安装 MySQL 数据库。

如何选择合适的 MySQL 部署选项

如果您希望让 Google Cloud 处理后端数据库和服务器管理工作,那么 Cloud SQL 是实现这一便利的绝佳选择。例如,Cloud SQL 提供了自动备份和时间点恢复。此外,您的数据将跨多个区域进行复制,从而增加了可用性和恢复能力。

如果您需要使用 Cloud SQL 不支持的某项 MySQL 功能,则可能要在 Compute Engine 上安装 MySQL。例如,Cloud SQL 不支持用户定义的函数或 SUPER 权限。如需了解详情,请参阅 Cloud SQL 常见问题解答

如果您决定在 Compute Engine 上安装 MySQL,则可以使用 Cloud Marketplace 来部署 MySQL 安装项,也可在 Compute Engine 实例上手动安装 MySQL。Cloud Marketplace 提供了一种将 MySQL 部署到大型开发堆栈中的便捷方式。Cloud Marketplace 提供了多种 MySQL 安装选项,例如独立的 MySQL 安装、LAMP 堆栈、LEMP 堆栈、Nginx 堆栈和 Percona MySQL Cluster 安装等等。

如果 Cloud Marketplace 服务无法满足您的需求,那么您可以在 Compute Engine 实例上手动安装 MySQL。例如,您可能需要在已创建的自定义映像上部署 MySQL,或者可能需要完全控制安装过程。

若要在 Compute Engine 实例上手动安装 MySQL,您只需创建一个 Compute Engine 实例并将 MySQL 直接安装到该实例上即可。

如需详细了解每个选项,请参阅以下资源:

  • 对于 Cloud SQL,请参阅 Cloud SQL for MySQL 文档
  • 对于 Cloud Marketplace,请参阅 Google Cloud 控制台中的 MySQL 安装选项:

    转到 Cloud Marketplace

  • 如需在 Compute Engine 实例上手动安装 MySQL,请参阅本文档的其余部分。

目标

  • 创建 Compute Engine 实例
  • 安装 MySQL
  • 连接到 MySQL

前提条件

  1. Google Cloud 控制台中创建一个新项目。您可以使用现有项目,但创建新项目便于清理。

    您可以使用 Google Cloud 控制台完成本文档中的所有步骤,但如果您希望使用 gcloud CLI,请按照以下步骤来启用 Compute Engine API 并安装 Google Cloud CLI。

  2. 使用 Google Cloud 控制台启用 Compute Engine API

  3. 安装 gcloud CLI

  4. 配置工作区,使命令更简洁。 将以下命令中的 PROJECT_IDREGIONZONE 替换为项目的值。如需地区的完整列表,请参阅可用区域和地区

    gcloud config set project PROJECT_ID
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    

创建 Compute Engine 实例

为 MySQL 创建 Compute Engine 实例并建立与新建实例的 SSH 连接。默认操作系统是 Debian 10 版本。如果您希望在本教程中使用其他操作系统,则可以从 Compute Engine 文档的公共映像页面上所述的选项中进行选择。

控制台

如需在 Google Cloud 控制台中创建 Compute Engine 实例,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Compute Engine 虚拟机实例页面。

    转到 Compute Engine 虚拟机实例

  2. 选择新建的项目,然后点击继续

  3. 点击创建实例(如果您具有现有实例,则点击新建实例)。将实例命名为 mysql-test

  4. 如需指定非默认操作系统,请在启动磁盘部分中点击更改以配置启动磁盘的属性。在公共映像标签页中,选择操作系统,然后点击保存

  5. 为了符合安全性最佳做法,请在不使用外部 IP 地址的情况下创建实例。

    展开高级选项,然后展开网络。在网络接口下,展开默认界面,然后在外部 IPv4 地址菜单中,选择

  6. 点击创建

如需使用 Cloud NAT 设置和管理网络地址转换,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud NAT 页面。

    转到 Cloud NAT

  2. 点击开始使用创建 Cloud NAT 网关

  3. 对于网关名称,输入 nat-simple-configuration

  4. 对于 NAT 网关的 VPC 网络,选择默认

  5. 对于 NAT 网关的区域,选择您在上面选择的区域。

  6. 对于 Cloud Router,选择创建新路由器

  7. 在对话框中,为路由器提供名称 nat-router-simple-configuration,然后点击创建

  8. 点击高级配置

  9. Stackdriver Logging 下,选择翻译和错误。此操作会将所有日志发送到 Cloud Logging。

  10. 点击创建

要建立 SSH 连接,请执行以下操作:

  1. 虚拟机实例页面上的列表中查找新虚拟机实例。

  2. 连接列中,点击 SSH。SSH 终端随即在浏览器窗口中打开。

gcloud

  1. 如需创建 Compute Engine 实例,请使用 gcloud compute instances create 命令。如需指定操作系统,请添加 --image-family 参数,后跟映像系列,或添加 --image 参数,后跟特定映像版本的映像名称。例如,要使用 Debian 10 系列中的最新映像,请添加 --image-family debian-10。使用公共映像时,必须使用 --image-project 参数提供映像项目

    gcloud compute instances create \
        --image-family debian-10 \
        --image-project debian-cloud \
        --no-address \
      mysql-test
    
  2. 创建一个简单的 Cloud Router 路由器。

    gcloud compute routers create nat-router-simple-configuration \
        --network=default
    
  3. 使用 Cloud NAT 设置和管理网络地址转换。

    gcloud compute routers nats create nat-simple-configuration \
        --router=nat-router-simple-configuration \
        --auto-allocate-nat-external-ips \
        --nat-all-subnet-ip-ranges \
        --enable-logging
    
  4. 使用 ssh 连接到实例。

    gcloud compute ssh \
        --tunnel-through-iap \
        mysql-test
    

    SSH 连接通过由 Identity-Aware Proxy (IAP) 处理的 TCP 转发建立。

安装 MySQL

以下步骤介绍了如何在 Compute Engine 实例上安装 MySQL。

Debian 10+

这些说明用于安装 MySQL 8 或 5.7。

Debian 10 及更高版本在其软件包管理系统中包含了 MariaDB,但并未包含 MySQL。MariaDB 保持与 MySQL 协议的兼容性,但具有一个独立发展的功能集。如需了解详情,请参阅 MariaDB 与 MySQL

如需安装 MySQL,请下载版本软件包并使用 dpkg 命令手动安装。

  1. 安装 wget 依赖项。

    sudo apt-get install -y wget
    
  2. 下载 MySQL Community Server 软件包。

    export DEB_FILE=mysql-apt-config_0.8.20-1_all.deb
    cd /tmp
    curl -L --output ${DEB_FILE} \
         https://dev.mysql.com/get/${DEB_FILE}
    
  3. 验证版本软件包文件的完整性。

    cat > ${DEB_FILE}.md5 << EOL
    799bb0aefb93d30564fa47fc5d089aeb ${DEB_FILE}
    EOL
    md5sum --check ${DEB_FILE}.md5
    

    如果您看到以下输出,则表示验证了文件的真实性和完整性。

    mysql-apt-config_0.8.20-1_all.deb: OK
    
  4. 验证文件后,将 MySQL 软件包添加到本地软件包代码库。

    sudo dpkg -i ${DEB_FILE}
    

    系统会提示您确认安装选项,包括 MySQL 版本。

  5. 选择顶部的 MySQL 服务器和集群菜单选项后,按返回,然后使用箭头键选择服务器版本。

    本指南建议您选择 MySQL 8.0 或 5.7。选择版本后,按键盘上的 Return 键

  6. 如果对配置菜单中选择的选项感到满意,请使用箭头键选择菜单中的 Ok,然后按键盘上的 Return 键

  7. 更新软件包缓存。

    sudo apt-get update
    

    如果您收到 GPG 错误(类似于由于公钥不可用,无法验证以下签名:NO_PUBKEY 467B942D3A79BD29),请使用以下格式的命令导入缺失的 GPG 密钥

    sudo apt-key adv \
        --keyserver keyserver.ubuntu.com \
        --recv-keys 467B942D3A79BD29
    

    在演示性错误消息中,缺失的公钥为 467B942D3A79BD29;请使用 --recv-keys 选项提供此值。

    重复该命令以更新软件包缓存。

  8. 安装 MySQL。此过程会启动 MySQL 服务。

    sudo apt-get -y install mysql-community-server
    

    系统会提示您提供安装的一些详细信息,例如 root 密码。

Debian 9

这些说明用于安装 MySQL 8 或 5.7。

默认情况下,Debian 的某些版本(例如 Debian 9)安装 MariaDB 作为默认 MySQL 服务器。MariaDB 旨在与 MySQL 基本兼容,且可通过相同命令进行调用。要详细了解 MariaDB 与标准 MySQL 之间的区别,请参阅从 MySQL 迁移到 Debian 9 中的 MariaDB

如需安装 MySQL,请按照以下说明操作:

  1. 下载 MySQL Community Server 软件包。

    export DEB_FILE=mysql-apt-config_0.8.17-1_all.deb
    cd /tmp
    curl -L --output ${DEB_FILE} \
         https://dev.mysql.com/get/${DEB_FILE}
    
  2. 验证版本软件包文件的完整性。

    cat > ${DEB_FILE}.md5 << EOL
    9e393c991311ead61dcc8313aab8e230 ${DEB_FILE}
    EOL
    md5sum --check ${DEB_FILE}.md5
    

    如果您看到以下输出,则表示验证了文件的真实性和完整性。

    mysql-apt-config_0.8.17-1_all.deb: OK
    
  3. 验证文件后,将 MySQL 软件包添加到本地软件包代码库。

    sudo dpkg -i ${DEB_FILE}
    

    系统会提示您确认安装选项,包括 MySQL 版本。

  4. 选择顶部的 MySQL 服务器和集群菜单选项后,按返回,然后使用箭头键选择服务器版本。

    本指南建议您选择 MySQL 8.0 或 5.7。选择版本后,按键盘上的 Return 键

  5. 如果对配置菜单中选择的选项感到满意,请使用箭头键选择菜单中的 Ok,然后按键盘上的 Return 键

  6. 更新软件包缓存。

    sudo apt-get update
    

    如果您收到 GPG 错误(类似于由于公钥不可用,无法验证以下签名:NO_PUBKEY 467B942D3A79BD29),请使用以下格式的命令导入缺失的 GPG 密钥

    sudo apt-key adv \
        --keyserver keyserver.ubuntu.com \
        --recv-keys 467B942D3A79BD29
    

    在演示性错误消息中,缺失的公钥为 467B942D3A79BD29;请使用 --recv-keys 选项提供此值。

    重复该命令以更新软件包缓存。

  7. 安装 MySQL。此过程会启动 MySQL 服务。

    sudo apt-get -y install mysql-community-server
    

Ubuntu

对于 Ubuntu 1804 及更早版本,请按照以下说明安装 MySQL 5.7
对于 Ubuntu 2004 及更高版本,请按照以下说明安装 MySQL 8

  1. 更新 apt-get 软件包管理器。

    sudo apt-get update
    
  2. 安装 MySQL。此过程会启动 MySQL 服务。

    sudo apt-get -y install mysql-server
    
  3. 默认情况下,在 Ubuntu 发行版中,mysql 会使用 auth_socket 插件对 root 用户进行身份验证。运行此查询以验证此默认配置:

    echo "SELECT user, authentication_string, plugin, host
            FROM mysql.user WHERE user='root' ;" \
         | sudo mysql -t -u root
    

    输出结果显示从 localhost 进行连接的 root 用户将使用 auth_socket 插件:

    +------+-----------------------+-------------+-----------+
    | user | authentication_string | plugin      | host      |
    +------+-----------------------+-------------+-----------+
    | root |                       | auth_socket | localhost |
    +------+-----------------------+-------------+-----------+
    
  4. 更改此设置,并将 root 密码更改为难以猜测的密码:

    export PASSWORD=`uuidgen`; echo "Root password is : $PASSWORD"
    echo "ALTER USER 'root'@'localhost'
          IDENTIFIED WITH mysql_native_password BY '$PASSWORD'" \
          | sudo mysql -u root
    

    输出结果中包含新的 root 密码:

    Root password is : 25fe2177-778a-414f-b80e-5fb8c8671de3
    

CentOS 或 RHEL 7

这些说明用于安装 MySQL 8。

第 7 版 CentOS 和 RHEL 已在软件包管理系统包含了 MariaDB,但并未包含 MySQL。如需安装 MySQL,您必须先更新软件包管理器。

  1. 下载 MySQL Community Server 软件包。

    export RPM_FILE=mysql80-community-release-el7-4.noarch.rpm
    cd /tmp
    curl -L --output ${RPM_FILE} \
         https://dev.mysql.com/get/${RPM_FILE}
    
  2. 验证版本软件包文件的完整性。

    cat > ${RPM_FILE}.md5 << EOL
    8b55d5fc443660fab90f9dc328a4d9ad ${RPM_FILE}
    EOL
    md5sum --check ${RPM_FILE}.md5
    

    如果您看到以下输出,则表示验证了文件的真实性和完整性。

    mysql80-community-release-el7-4.noarch.rpm: OK
    
  3. 更新软件包管理器以包含 MySQL。

    sudo rpm -Uvh ${RPM_FILE}
    
  4. 安装 MySQL。

    sudo yum -y install mysql-community-server
    
  5. 启动 MySQL 服务器。

    sudo /usr/bin/systemctl start mysqld
    
  6. 从服务器日志获取临时 root 密码

    sudo cat /var/log/mysqld.log | grep -i 'temporary password'
    

Rocky Linux 或 RHEL 8

这些说明用于安装 MySQL 8。

Rocky Linux、CentOS Stream 和 RHEL 的第 8 版在其软件包管理系统中包含了 MariaDB,但并未包含 MySQL。如需安装 MySQL,您必须先更新软件包管理器。

  1. 下载 MySQL Community Server 软件包。

    export RPM_FILE=mysql80-community-release-el8-2.noarch.rpm
    cd /tmp
    curl -L --output ${RPM_FILE} \
         https://dev.mysql.com/get/${RPM_FILE}
    
  2. 验证版本软件包文件的完整性。

    cat > ${RPM_FILE}.md5 << EOL
    0ba3feb1c9ee35d30e5ae683accaf54b ${RPM_FILE}
    EOL
    md5sum --check ${RPM_FILE}.md5
    

    如果您看到以下输出,则表示验证了文件的真实性和完整性。

    mysql80-community-release-el8-2.noarch.rpm: OK
    
  3. 更新软件包管理器以包含 MySQL。

    sudo rpm -iUvh ${RPM_FILE}
    
  4. 安装 MySQL。在安装过程中,请停用 AppStream 代码库,以便安装使用 Community Server。

    sudo yum module disable -y mysql
    sudo yum install -y \
        --disablerepo=appstream \
      mysql-community-server
    
  5. 启动 MySQL 服务器。

    sudo /usr/bin/systemctl start mysqld
    
  6. 从服务器日志获取临时 root 密码

    sudo cat /var/log/mysqld.log | grep -i 'temporary password'
    

提高 MySQL 安装的安全性

如需提高 MySQL 安装的安全性,请运行 mysql_secure_installation 命令。如果在安装过程中未设置密码,请在此步骤中创建密码。如需详细了解此命令,请参阅有关 mysql_secure_installation 的 MySQL 文档。

sudo mysql_secure_installation

连接到 MySQL

以下步骤介绍了如何从 mysql-test 实例连接到 MySQL。

MySQL 8.0

  1. 使用 MySQL 客户端连接到 MySQL。

    sudo mysql -u root -p
    

    连接到 MySQL 时,提示符将更改为 mysql>

    然后,您可以运行 MySQL 命令。例如,以下命令显示了正在运行的线程(包括当前连接)。

    mysql> SHOW processlist;
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+
    | Id | User            | Host      | db   | Command | Time | State                  | Info             |
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+
    |  5 | event_scheduler | localhost | NULL | Daemon  | 1889 | Waiting on empty queue | NULL             |
    | 14 | root            | localhost | NULL | Query   |    0 | init                   | show processlist |
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+
    2 rows in set (0.00 sec)

    您可以使用以下命令生成用户列表。

    mysql> SELECT User, Host, authentication_string FROM mysql.user;
    +------------------+-----------+------------------------------------------------------------------------+
    | User             | Host      | authentication_string                                                  |
    +------------------+-----------+------------------------------------------------------------------------+
    | mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
    | mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
    | mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
    | root             | localhost | $A$005$,BS{G+*#cVYxb6x40q0aFS5dp2/Kz6u2vennR5qe0eBKVA/6VW5B            |
    +------------------+-----------+------------------------------------------------------------------------+
    4 rows in set (0.00 sec)
  2. 命令运行完成后,请使用 exit 命令退出 MySQL 客户端,然后再次使用 exit 退出 Compute Engine 实例。

    mysql> exit
    Bye

MySQL 5.7

  1. 使用 MySQL 客户端连接到 MySQL。

    sudo mysql -u root -p
    

    连接到 MySQL 时,提示符将更改为 mysql>

    然后,您可以运行 MySQL 命令。例如,以下命令显示了正在运行的线程(包括当前连接)。

    mysql> SHOW processlist;
    +----+------+-----------+------+---------+------+-------+------------------+
    | Id | User | Host      | db   | Command | Time | State | Info             |
    +----+------+-----------+------+---------+------+-------+------------------+
    | 51 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
    +----+------+-----------+------+---------+------+-------+------------------+
    1 row in set (0.00 sec)

    您可以使用以下命令生成用户列表。

    mysql> SELECT User, Host, authentication_string FROM mysql.user;
    
    +---------------+-----------+-------------------------------------------+
    | User          | Host      | authentication_string                     |
    +---------------+-----------+-------------------------------------------+
    | root          | localhost | *A047B05AAB007B33F8F2BD1FD404661D167D6348 |
    | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    +---------------+-----------+-------------------------------------------+
    3 rows in set (0.00 sec)
  2. 命令运行完成后,请使用 exit 命令退出 MySQL 客户端,然后再次使用 exit 退出 Compute Engine 实例。

    mysql> exit
    Bye

清理

完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

如需删除项目,请执行以下操作:

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除实例

如需删除 Compute Engine 实例,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 选中要删除的实例。
  3. 如需删除实例,请点击更多操作,点击删除,然后按照说明操作。

后续步骤

您现已了解如何在 Compute Engine 上安装 MySQL 服务器。要查看使用 MySQL 的更复杂的应用,请参阅 Cloud Marketplace 上使用 MySQL 的多种开发堆栈

如果您还要求具备高可用性和可伸缩性,请考虑在 Compute Engine 上安装 MySQL 集群。此类集群可通过无共享集群和自动分片提供高可用性和可伸缩性。另外,Cloud Marketplace 还为用于 MySQL 集群的开源解决方案 Percona 提供一键部署选项,从而简化操作。

另一个具备 MySQL 可伸缩性的开源解决方案是 Vitess,它自 2011 年起为所有 YouTube 数据库流量提供服务。Vitess 非常适合在容器中运行的应用。如需详细了解如何在容器化环境中使用 Vitess,请参阅在 Kubernetes 上运行 Vitess

如需详细了解 MySQL,请参阅 MySQL 官方文档

探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud Architecture Center