配置和使用数据库服务器
大约 69 分钟
配置和使用数据库服务器
来源:官方文档 原始多页入口:配置和使用数据库服务器 内容规模:约 55,660 字符,76 个章节标题,273 个命令/代码块,31 条提示框
阅读提要
- 副标题:在数据库服务器上安装、配置、备份和迁移数据
- 摘要:在 Red Hat Enterprise Linux 10 上安装 MariaDB、MySQL 或 PostgreSQL 数据库服务器。配置所选的数据库服务器,备份您的数据,并将数据迁移到数据库服务器的后续版本。
- 主要章节:在数据库服务器上安装、配置、备份和迁移数据;对红帽文档提供反馈;第 1 章 使用 MariaDB;第 2 章 使用 MySQL;第 3 章 使用 PostgreSQL
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
在数据库服务器上安装、配置、备份和迁移数据
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 使用 MariaDB
- 要点:MariaDB 服务器是一个高性能开源相关数据库管理系统(RDBMS)。基于 MySQL 技术构建,它为数据访问提供了强大的 SQL 接口,包括支持多个存储引擎的高级功能。
- 要点:您可以使用 MariaDB Galera 集群 在 RHEL 上安装、配置、备份、迁移和复制 MariaDB 数据库。
1.1. 安装 MariaDB
- 要点:RHEL 10 提供 MariaDB 10.11 作为 Application Stream 的初始版本,您可以将其作为 RPM 软件包安装。在次发行版本中,RHEL 10 提供了额外的 MariaDB 版本作为应用程序流,它的生命周期比较短。
- 要点:在 RHEL 10 中,MariaDB 服务器在以下版本中可用,每个版本都由单独的流提供:
- 列表:MariaDB 10.11
- 列表:MariaDB 11.8 - 从 RHEL 10.2 开始提供
- 列表:安装 MariaDB 服务器软件包: 对于 MariaDB 10.11,请输入: # dnf install mariadb-server 对于 MariaDB 11.8,请输入: # dnf install mariadb11.8-server
- 列表:对于 MariaDB 10.11,请输入: # dnf install mariadb-server
- 列表:对于 MariaDB 11.8,请输入: # dnf install mariadb11.8-server
- 列表:启用并启动 mariadb 服务: # systemctl enable --now mariadb.service
- 命令/配置摘录:
# dnf install mariadb-server
# dnf install mariadb11.8-server- 注意:重要 按照设计,您只能安装同一应用程序流的一个版本(流),并且因为冲突的 RPM 软件包,您无法在同一主机上安装 MariaDB 和 MySQL。作为替代方案,您也可以在容器中运行数据库服务器服务。请参阅 使用容器在单个主机上运行多个 MariaDB 和 MySQL 实例。
1.2. 使用容器在单个主机上运行多个 MariaDB 和 MySQL 实例
- 要点:如果从软件包安装 MariaDB 或 MySQL,您只能在同一主机上运行这些服务中的一个,且该服务的一个版本。另外,您还可以在容器中运行服务。
- 要点:您可以配置以下情况:
- 列表:您希望在同一主机上运行多个 MariaDB 或 MySQL 实例。
- 列表:您想要在同一主机上运行 MariaDB 和 MySQL。
- 列表:podman 软件包已安装。
- 列表:使用您的红帽客户门户网站帐户认证到 registry.redhat.io 注册中心: # podman login registry.redhat.io 如果您已登录到容器注册中心,请跳过这一步。
- 列表:启动您要使用的容器: MariaDB 10.11 : $ podman run -d --name <container_name_1> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。 MariaDB 11.8: $ podman run -d --name <container_name_2> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_2>:3306 rhel10/mariadb-118 有关使用此容器镜…
- 列表:MariaDB 10.11 : $ podman run -d --name <container_name_1> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
- 命令/配置摘录:
# podman login registry.redhat.io
$ podman run -d --name <container_name_1> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011- 注意:重要 数据库服务器的容器名称和主机端口必须有所不同。
1.3. 配置对 MariaDB 的网络访问
- 要点:您必须将 MariaDB 配置为侦听网络接口并打开防火墙端口,以允许远程客户端访问数据库服务器。
- 要点:流程
- 列表:编辑/etc/my.cnf.d/mariadb-server.cnf文件的[mysqld]部分。您可以设置以下配置指令: bind-address - 是服务器监听的地址。可能的选项有: 主机名 IPv4 地址 IPv6 地址 skip-networking - 控制服务器是否监听 TCP/IP 连接。可能的值有: 0 - 侦听所有客户端 1 - 只监听本地客户端 port - MariaDB 监听 TCP/IP 连接的端口。
- 列表:bind-address - 是服务器监听的地址。可能的选项有: 主机名 IPv4 地址 IPv6 地址
- 列表:主机名
- 列表:IPv4 地址
- 列表:IPv6 地址
- 列表:skip-networking - 控制服务器是否监听 TCP/IP 连接。可能的值有: 0 - 侦听所有客户端 1 - 只监听本地客户端
- 命令/配置摘录:
# firewall-cmd --permanent --add-service=mysql # firewall-cmd --reload
# systemctl restart mariadb.service1.4. 在 MariaDB 服务器上设置 TLS 加密
- 要点:默认情况下,MariaDB 使用未加密的连接。对于安全连接,在 MariaDB 服务器上启用 TLS 支持,并配置您的客户端,来建立加密连接。
1.4.1. 将 CA 证书、服务器证书和私钥放在 MariaDB 服务器上
- 要点:在 MariaDB 服务器中启用 TLS 加密之前,请在 MariaDB 服务器上存储证书颁发机构(CA)证书、服务器证书和私钥。
- 要点:先决条件
- 列表:以下 Privacy Enhanced Mail(PEM)格式的文件已复制到服务器: 服务器的私钥:server.example.com.key.pem 服务器证书:server.example.com.crt.pem 证书颁发机构(CA)证书:ca.crt.pem 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
- 列表:服务器的私钥:server.example.com.key.pem
- 列表:服务器证书:server.example.com.crt.pem
- 列表:证书颁发机构(CA)证书:ca.crt.pem
- 列表:将 CA 和服务器证书存储在 /etc/pki/tls/certs/ 目录中: # mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/
- 列表:对 CA 和服务器证书设置权限,使 MariaDB 服务器能够读取文件: # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem 由于证书是服务器建立安全连接前通信的一部分,因此任何客户端都可以在没有身份验证的情况下检索它们。因此,您不需要对 CA 和服务器证书文件设置严格的权限。
- 命令/配置摘录:
# mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/
# chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem1.4.2. 在 MariaDB 服务器上配置 TLS 加密
- 要点:默认情况下,MariaDB 使用未加密的连接。对于更多安全连接,您可以在 MariaDB 服务器上启用传输层安全(TLS)支持,并将客户端配置为建立加密连接。
- 要点:先决条件
- 列表:您已安装了 MariaDB 服务器。
- 列表:mariadb 服务正在运行。
- 列表:服务器上存在 Privacy Enhanced Mail(PEM)格式的以下文件,并可由 mysql 用户读取: 服务器的私钥:/etc/pki/tls/private/server.example.com.key.pem 服务器证书:/etc/pki/tls/certs/server.example.com.crt.pem 证书颁发机构(CA)证书 /etc/pki/tls/certs/ca.crt.pem
- 列表:服务器的私钥:/etc/pki/tls/private/server.example.com.key.pem
- 列表:服务器证书:/etc/pki/tls/certs/server.example.com.crt.pem
- 列表:证书颁发机构(CA)证书 /etc/pki/tls/certs/ca.crt.pem
- 命令/配置摘录:
[mariadb] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pem
ssl_crl = /etc/pki/tls/certs/example.crl.pem1.4.3. MariaDB 服务器上特定的用户帐户需要 TLS 加密连接
- 要点:您可以配置特定的 MariaDB 用户帐户,以要求 TLS 加密连接来保护敏感数据传输。
- 要点:如果您无法在服务器上配置所有连接所需的安全传输(require_secure_transport = on),请将单独的用户帐户配置为需要 TLS 加密。
- 列表:MariaDB 服务器启用了 TLS 支持。
- 列表:您配置为需要安全传输的用户已存在。
- 列表:以管理员用户身份连接到 MariaDB 服务器: # mysql -u root -p -h server.example.com 如果您的管理用户没有远程访问服务器的权限,请在 MariaDB 服务器上执行命令,并连接到 localhost。
- 列表:使用 REQUIRE SSL 子句强制用户必须使用 TLS 加密连接进行连接: MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
- 列表:使用 TLS 加密,以 example 用户身份连接到服务器: # mysql -u example -p -h server.example.com --ssl ... MariaDB [(none)]> 如果命令没有返回错误,且您可以访问交互式 MariaDB 控制台,则与 TLS 的连接成功。
- 列表:尝试以禁用 TLS 的 example 用户身份进行连接: # mysql -u example -p -h server.example.com --skip-ssl ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES) 服务器拒绝登录尝试,因为此用户需要 TLS,但 option --skip-ssl 禁用它。
- 命令/配置摘录:
# mysql -u root -p -h server.example.com
MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;1.5. 将 MariaDB 客户端配置为默认使用 TLS 加密
- 要点:在 RHEL 上,全局配置 MariaDB 客户端使用 TLS 加密,并验证服务器证书中的通用名称(CN)是否与用户连接的主机名匹配。这可防止中间人攻击。
- 要点:先决条件
- 列表:MariaDB 服务器启用了 TLS 支持。
- 列表:如果 RHEL 不信任发布服务器证书的证书颁发机构(CA),则 CA 证书已被复制到客户端。
- 列表:如果启用了 FIPS 模式,此客户端会支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 在 RHEL 9.2 及更高版本上强制执行 TLS 扩展 "Extended Master Secret"。
- 列表:如果 RHEL 不信任发布服务器证书的 CA: 将 CA 证书复制到 /etc/pki/ca-trust/source/anchors/ 目录中: # cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/ 设置允许所有用户读取 CA 证书文件的权限: # chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem 重建 CA 信任数据库: # update-ca-trust
- 列表:将 CA 证书复制到 /etc/pki/ca-trust/source/anchors/ 目录中: # cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/
- 列表:设置允许所有用户读取 CA 证书文件的权限: # chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem
- 命令/配置摘录:
# cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/
# chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem1.6. 使用逻辑转储备份和恢复 MariaDB 数据
- 要点:MariaDB 数据的逻辑备份由恢复数据所需的 SQL 语句组成。与物理备份相比,逻辑备份的优点在于,您可以在其他硬件配置和 MariaDB 版本中恢复逻辑备份。
1.6.1. 使用 mariadb-dump执行逻辑备份
- 要点:您可以使用 mariadb-dump 工具在 MariaDB 服务器运行时备份数据库,并将导出的数据存储在 SQL 文件中。将备份存储在安全的位置,以便在数据丢失的情况下将其恢复。
- 要点:使用 mariadb-dump 的常见场景包括:
- 列表:备份单个数据库
- 列表:备份多个数据库
- 列表:备份所有数据库
- 列表:mariadb 服务正在运行。
- 列表:您有具有备份数据库的权限的凭证,例如 root 帐户。
- 列表:创建 MariaDB 数据库的一致性和全面的逻辑备份: # mariadb-dump -u <username> -p --routines --events --triggers --single-transaction --result-file=backup.sql --databases <database_1> <database_2> 其中: -u <username> 设置实用程序用于连接数据库服务器的用户名。 -p 提示输入密码。 --routines 在备份中包含存储的程序和功能。 --events 在备份中包含调度的事件。 --triggers 在备份中包含触发器。 --single-transaction 使…
- 命令/配置摘录:
# mariadb-dump -u <username> -p --routines --events --triggers --single-transaction --result-file=backup.sql --databases <database_1> <database_2>- 注意:注意 mariadb-dump 工具只能备份数据库。这还包括存储在 mysql 数据库中的服务器设置。但是,实用程序不会备份配置文件,如 /etc/my.cnf。
- 注意:重要 数据库的备份仅包含该数据库的数据。它不包括 MariaDB 用户帐户或其他服务器设置。MariaDB 将这种基本安全性和系统信息存储在单独的 mysql 系统数据库中。因此,如果您需要保留这些设置,还必须备份 mysql。
1.6.2. 以 SQL 格式从转储中恢复 MariaDB 数据
- 要点:如果您将一个或多个数据库备份到 SQL 文件,您可以使用此文件重新创建数据库结构及其数据。
- 要点:先决条件
- 列表:mariadb 服务正在运行。
- 列表:您有具有恢复数据的权限的凭证,例如 root 帐户。
- 列表:如果要恢复的数据库已存在,且您的 SQL 文件不包含 DROP TABLE IF EXISTS 语句,请手动删除表或整个数据库: 要删除表,请输入: # mariadb -u root -p -e "DROP TABLE <database>.<table>;" 对 SQL 文件重新创建的每个表重复此命令。 要删除数据库,请输入: # mariadb -u root -p -e "DROP DATABASE <database>;" 对 SQL 文件重新创建的每个数据库重复此命令。
- 列表:要删除表,请输入: # mariadb -u root -p -e "DROP TABLE <database>.<table>;" 对 SQL 文件重新创建的每个表重复此命令。
- 列表:要删除数据库,请输入: # mariadb -u root -p -e "DROP DATABASE <database>;" 对 SQL 文件重新创建的每个数据库重复此命令。
- 列表:导入 SQL 文件: # mariadb -u root -p < backup.sql"
- 命令/配置摘录:
# mariadb -u root -p -e "DROP TABLE <database>.<table>;"
# mariadb -u root -p -e "DROP DATABASE <database>;"1.7. 使用物理副本备份和恢复 MariaDB 数据
- 要点:MariaDB 数据的物理备份包含存储内容的文件和目录。此方法的大小通常更快、更小。
1.7.1. 使用 mariabackup执行物理在线备份
- 要点:您可以使用 mariabackup 实用程序在服务器运行时备份 InnoDB、Aria 和 MyISAM 表来创建 MariaDB 服务器的物理在线备份。工具支持对 MariaDB 服务器的全备份功能,其包括加密和压缩的数据。
- 要点:先决条件
- 列表:mariadb-backup 软件包已在系统中安装:
- 列表:您必须为 mariabackup 提供运行备份的用户的凭据。您可以在命令行中或通过配置文件来提供凭证。
- 列表:mariabackup 的用户必须具有 RELOAD、LOCK TABLES 和 REPLICATION CLIENT 特权。
- 列表:使用以下选项之一创建备份: 要在在命令行上提供凭证时创建备份,请输入: $ mariabackup --backup --target-dir <backup_directory> --user <backup_user> --password <backup_passwd> target-dir 选项定义 mariabackup 存储备份文件的目录。如果要执行全备份,目标目录必是空或者不存在。 user 和 password 选项允许您配置用户名和密码。 要使用配置文件中设置的凭证创建备份: 在 /etc/my.cnf.d/ 目录中创建配置文件,例如 /etc/my.cnf.d/mariabackup.cnf。 在文件中添加以下…
- 列表:要在在命令行上提供凭证时创建备份,请输入: $ mariabackup --backup --target-dir <backup_directory> --user <backup_user> --password <backup_passwd> target-dir 选项定义 mariabackup 存储备份文件的目录。如果要执行全备份,目标目录必是空或者不存在。 user 和 password 选项允许您配置用户名和密码。
- 列表:要使用配置文件中设置的凭证创建备份: 在 /etc/my.cnf.d/ 目录中创建配置文件,例如 /etc/my.cnf.d/mariabackup.cnf。 在文件中添加以下内容: [mysqld] user=<backup_username> password=<password> 执行备份: $ mariabackup --backup --target-dir <backup_directory>
- 命令/配置摘录:
$ mariabackup --backup --target-dir <backup_directory> --user <backup_user> --password <backup_passwd>
[mysqld] user=<backup_username> password=<password>1.7.2. 使用 mariabackup恢复数据
- 要点:如果您有 mariabackup 工具创建的 MariaDB 备份,您可以使用相同的工具恢复数据。
- 要点:先决条件
- 列表:mariadb 服务已停止。
- 列表:数据目录为空。
- 列表:mariabackup 的用户必须具有 RELOAD、LOCK TABLES 和 REPLICATION CLIENT 特权。
- 列表:使用以下选项之一恢复数据: 要从 /var/mariadb/backup/ 目录中的备份恢复数据,并保留原始备份文件,请输入: $ mariabackup --copy-back --target-dir=/var/mariadb/backup/ 要从 /var/mariadb/backup/ 目录中的备份恢复数据,并删除原始备份文件,请输入: $ mariabackup --move-back --target-dir=/var/mariadb/backup/
- 列表:要从 /var/mariadb/backup/ 目录中的备份恢复数据,并保留原始备份文件,请输入: $ mariabackup --copy-back --target-dir=/var/mariadb/backup/
- 列表:要从 /var/mariadb/backup/ 目录中的备份恢复数据,并删除原始备份文件,请输入: $ mariabackup --move-back --target-dir=/var/mariadb/backup/
- 命令/配置摘录:
$ mariabackup --copy-back --target-dir=/var/mariadb/backup/
$ mariabackup --move-back --target-dir=/var/mariadb/backup/1.7.3. 对 MariaDB 服务器执行文件系统备份
- 要点:文件系统级备份是备份完整的 MariaDB 实例的快速方法。此方法需要关闭 mariadb 服务以实现数据一致性。
- 要点:流程
- 列表:停止 mariadb 服务: # systemctl stop mariadb.service
- 列表:创建备份目录,例如: # mkdir -p /root/mariadb-backup/{data,config}/
- 列表:备份数据目录: # cp -rp /var/lib/mysql/ /root/mariadb-backup/data/
- 列表:备份配置文件: # cp -rp /etc/my.cnf /etc/my.cnf.d/ /root/mariadb-backup/config/
- 列表:启动 mariadb 服务: # systemctl start mariadb.service
- 命令/配置摘录:
# systemctl stop mariadb.service
# mkdir -p /root/mariadb-backup/{data,config}/- 注意:重要 文件系统级备份特定于架构和 MariaDB 版本。您不能在不同的构架或 MariaDB 版本中恢复由此方法备份的数据。
1.7.4. 在 MariaDB 服务器上恢复文件系统备份
- 要点:如果您的 MariaDB 实例已损坏,并且您之前执行了包含数据目录和配置文件的文件系统备份,请从这个备份中恢复实例。
- 要点:先决条件
- 列表:您在 MariaDB 服务器 中执行了文件系统备份。
- 列表:目标服务器必须满足备份源的以下条件: MariaDB 版本必须相同或更高。 系统架构必须相同。
- 列表:MariaDB 版本必须相同或更高。
- 列表:系统架构必须相同。
- 列表:停止 mariadb 服务: # systemctl stop mariadb.service
- 列表:删除当前的 /var/lib/mysql/ 目录: # rm -rf /var/lib/mysql/
- 命令/配置摘录:
# systemctl stop mariadb.service
# rm -rf /var/lib/mysql/1.8. 使用 Galera 复制 MariaDB
- 要点:您可以使用 Galera 解决方案复制 MariaDB 数据库,以创建同步的多源集群以实现高可用性和数据一致性。
- 注意:警告 复制本身并不是一个足够的备份解决方案。复制可以防止源服务器出现硬件故障,但它不能确保防止数据的丢失。
1.8.1. MariaDB Galera 集群介绍
- 要点:MariaDB Galera 集群 提供同步的多源复制,允许所有节点可写入并确保集群中的数据一致性。
- 要点:write set 复制 API (wsrep API)定义 Galera 复制和 MariaDB 数据库之间的接口。
- 列表:同步复制
- 列表:主动-主动多源拓扑
- 列表:对任何集群节点的读和写
- 列表:自动成员资格控制,故障节点从集群中删除
- 列表:自动节点加入
- 列表:行一级的并行复制
1.8.2. 构建 MariaDB Galera 集群的组件
- 要点:在部署功能前,同步复制 MariaDB Galera 集群,安装并理解 MariaDB 服务器、Galera Replication 库并支持 Galera 软件包。
- 要点:要构建 MariaDB Galera 集群,您必须在您的系统上安装以下软件包:
- 列表:mariadb-server-galera - 包含 MariaDB Galera 集群 的支持文件和脚本。
- 列表:MariaDB-server - 由 MariaDB 上游打补丁,以包含写入集复制 API(wsrep API)。此 API 提供 Galera 复制和 MariaDB 之间的接口。
- 列表:Galera - 由 MariaDB 上游打补丁,以添加对 MariaDB 的完全支持。galera 软件包包含以下内容: Galera Replication 程序库 提供整个复制功能。 Galera Arbitrator 工具充当参与脑裂场景的群集成员。但是,Galera Arbitrator 无法参与实际的复制。 Galera Systemd 服务和 Galera 打包程序脚本 部署 Galera Arbitrator 工具。RHEL 10 提供这些文件的上游版本,位于 /usr/lib/systemd/system/garbd.service 和 /usr/sbin/garb-systemd。
- 列表:Galera Replication 程序库 提供整个复制功能。
- 列表:Galera Arbitrator 工具充当参与脑裂场景的群集成员。但是,Galera Arbitrator 无法参与实际的复制。
- 列表:Galera Systemd 服务和 Galera 打包程序脚本 部署 Galera Arbitrator 工具。RHEL 10 提供这些文件的上游版本,位于 /usr/lib/systemd/system/garbd.service 和 /usr/sbin/garb-systemd。
1.8.3. 部署 MariaDB Galera 集群
- 要点:您可以通过安装所需的软件包、配置集群设置以及引导第一个节点来创建新集群来部署 MariaDB Galera 集群。
- 要点:先决条件
- 列表:集群中的所有节点都配置了 TLS。
- 列表:所有节点上所有证书的 Extended Key Usage 字段都必须设置为: TLS Web Server Authentication, TLS Web Client Authentication
- 列表:安装 MariaDB Galera 集群软件包: # dnf install mariadb-server-galera 因此,这个命令会安装以下软件包及其依赖项: mariadb-server-galera mariadb-server galera 有关构建 MariaDB Galera 集群所需的软件包的更多信息,请参阅 构建 MariaDB 集群的组件。
- 列表:mariadb-server-galera
- 列表:mariadb-server
- 列表:galera 有关构建 MariaDB Galera 集群所需的软件包的更多信息,请参阅 构建 MariaDB 集群的组件。
- 命令/配置摘录:
TLS Web Server Authentication, TLS Web Client Authentication
# dnf install mariadb-server-galera- 注意:注意 mariadb 服务支持 systemd 方法,来与多个 MariaDB 服务器进程进行交互。因此,在有多个运行的 MariaDB 服务器的情况下,您可以通过将实例名称指定为后缀来 bootstrap 特定的实例: # galera_new_cluster mariadb@node1
1.8.4. 检查 MariaDB Galera 集群的状态
- 要点:监控和确保 MariaDB Galera 集群的健康状态、性能和同步非常重要。为此,您可以在每个节点上查询 status 变量来监控节点和集群。
- 要点:要检查 MariaDB Galera 集群的状态,您可以使用以下查询:
- 列表:显示集群中的节点数量: # mysql -u root -p -e 'show status like "wsrep_cluster_size";' +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 4 | +--------------------+-------+
- 列表:显示节点的集群组件状态: # mysql -u root -p -e 'show status like "wsrep_cluster_status";' +----------------------+---------+ | Variable_name | Value | +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+ wsrep_cluster_status 变量的值表示当前节点所属的集群组件的状态。可能的值有: Primary :集群正常运行。存在仲裁。在健康的集…
- 列表:Primary :集群正常运行。存在仲裁。在健康的集群中,所有节点都报告 Primary。
- 列表:Non-primary :节点丢失了到集群的主组件的连接,且不再是活跃集群的一部分。但是,节点仍然可以提供读查询,但不能处理写操作。
- 列表:disconnected :节点没有连接到任何集群组件。因此,它无法接受查询,也不会复制任何数据。
- 列表:显示节点的状态: # mysql -u root -p -e 'show status like "wsrep_local_state_comment";' +---------------------------+--------+ | Variable_name | Value | +---------------------------+--------+ | wsrep_local_state_comment | Synced | +---------------------------+--------+ 以下是 wsrep_local_state_comment 变量常用的值: Synced :节点在集群内完全同步,并…
- 命令/配置摘录:
# mysql -u root -p -e 'show status like "wsrep_cluster_size";' +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 4 | +--------------------+-------+
# mysql -u root -p -e 'show status like "wsrep_cluster_status";' +----------------------+---------+ | Variable_name | Value | +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+1.8.5. 在 MariaDB Galera 集群中添加新节点
- 要点:您可以在 MariaDB Galera 集群 中添加新节点,或者通过在节点配置文件中配置集群地址重新连接现有节点。
- 要点:流程
- 列表:在特定节点上,在 /etc/my.cnf.d/galera.cnf 配置文件的 [mariadb] 部分的 wsrep_cluster_address 选项中为一个或多个现有群集成员提供一个地址: [mariadb] wsrep_cluster_address="gcomm://192.168.0.1" 当新节点连接到现有群集节点中的一个时,就可以看到集群中的所有节点。 但是,最好在 wsrep_cluster_address 中列出集群的所有节点。 因此,任何节点都可以通过连接到任何其他群集节点来加入群集,即使一个或多个群集节点停机了也没关系。当所有成员就成员资格达成一致时,集群的状态将会改变。如果新节点的状态与集群的不同,它会…
- 列表:MariaDB Galera 集群入门
- 列表:State Snapshot Transfers 简介
- 列表:保护 Galera 集群中的通信
- 命令/配置摘录:
[mariadb] wsrep_cluster_address="gcomm://192.168.0.1"1.8.6. 重启 MariaDB Galera 集群
- 要点:如果您同时关闭所有节点,您将停止集群,正在运行的集群不再存在。但是,集群的数据仍然存在。要重启集群,请引导第一个节点。
- 要点:其他资源
- 列表:MariaDB Galera 集群入门
- 注意:警告 如果集群没有启动,则使用 systemctl start mariadb 的第一个节点上启动 mariadb 不会引导集群。该节点会尝试连接到 /etc/my.cnf.d/galera.cnf 中 wsrep_cluster_address 中列出的节点。如果当前没有节点运行,那么重启失败。
1.9. 将 MariaDB 实例从之前的 RHEL 版本迁移到 RHEL 10 上的 MariaDB 10.11
- 要点:RHEL 10 提供 MariaDB 10.11。如果您在之前的 RHEL 版本上运行了 MariaDB 实例,您可以在新主机上配置 RHEL 10,并将实例迁移到其上。
- 要点:先决条件
- 列表:您可以在新主机上配置 RHEL 10。
- 列表:您对 RHEL 8 或 RHEL 9 主机执行 MariaDB 实例的文件系统备份。
- 列表:安装 mariadb-server 软件包: # dnf install mariadb-server
- 列表:如果服务已在运行,停止该服务: # systemctl stop mariadb.service
- 列表:将之前主机上 /var/lib/mysql/ 目录的内容复制到 RHEL 10 主机上的相同位置。
- 列表:将之前主机中的配置文件复制到 /etc/my.cnf.d/ 目录中,并确保文件仅包含 MariaDB 10.11 的有效选项。详情请查看 上游文档。
- 命令/配置摘录:
# dnf install mariadb-server
# systemctl stop mariadb.service1.10. 从 MariaDB 10.11 的 RHEL 10 版本升级到 MariaDB 11.8
- 要点:您可以在 RHEL 10 上将 MariaDB 数据库从版本 10.11 升级到 11.8,以访问新功能和改进。
- 要点:如需显著改进和更改,请参阅 RHEL 10.2 发行注记文档中的发行注记。
- 列表:您创建了 MariaDB 数据库和配置文件的备份。
- 列表:停止 MariaDB 服务器: # systemctl stop mariadb.service
- 列表:切换到 MariaDB 11.8: # dnf install --allowerasing mariadb11.8-server 重要 在继续操作前,仔细检查所提议的 dnf 事务。确保其与新版本等效的替换了上一版本中的每个软件包。如果安装列表不完整,-- allowerasing 选项可能会导致意外删除软件包,这可能会删除超过其安装的软件。
- 列表:调整配置,以便位于 /etc/my.cnf.d/ 目录中的选项文件只包含对 MariaDB 11.8 有效的选项。详情请查看 MariaDB 11.4 和 MariaDB 11.8 的上游文档。
- 列表:启动 MariaDB 服务器。 如果升级 Galera 集群中的主节点,请输入: # galera_new_cluster mariadb 服务会自动启动。 如果升级在 Galera 集群中运行的独立或副本的数据库,请输入: # systemctl start mariadb.service
- 列表:如果升级 Galera 集群中的主节点,请输入: # galera_new_cluster mariadb 服务会自动启动。
- 命令/配置摘录:
# systemctl stop mariadb.service
# dnf install --allowerasing mariadb11.8-server- 注意:重要 某些风险和已知问题与原位升级相关。例如,一些查询可能无法正常工作或以与升级前不同的顺序运行。有关这些风险和问题的更多信息,以及有关原位升级的常规信息,请参阅 MariaDB 11.8 发行注记。
- 注意:重要 在继续操作前,仔细检查所提议的 dnf 事务。确保其与新版本等效的替换了上一版本中的每个软件包。如果安装列表不完整,-- allowerasing 选项可能会导致意外删除软件包,这可能会删除超过其安装的软件。
第 2 章 使用 MySQL
- 要点:MySQL 服务器是一个高性能、开源关系型数据库管理系统(RDBMS)。它为数据访问提供了一个 SQL 接口,包含高级功能,如支持多个存储引擎。
- 要点:您可以使用 MariaDB Galera 集群 在 RHEL 上安装、配置、备份、迁移和复制 MariaDB 数据库。
2.1. 安装 MySQL
- 要点:RHEL 10 提供 MySQL 8.4 作为 Application Stream 的初始版本,它可以作为 RPM 软件包安装。在 RHEL 10 的次发行本中,红帽提供额外的 MySQL 版本作为应用程序流,其生命周期比较短。
- 要点:流程
- 列表:安装 MySQL 服务器软件包: # dnf install mysql8.4-server
- 列表:启用并启动 mysqld 服务: # systemctl enable --now mysqld.service
- 列表:安装后提高安全性: $ mysql_secure_installation 此命令启动一个完全交互的脚本,该脚本会提示过程中的每一步。该脚本可让您通过以下方法提高安全性: 为 root 帐户设置密码 删除匿名用户 禁止远程 root 登录(在本地主机之外)
- 列表:为 root 帐户设置密码
- 列表:删除匿名用户
- 列表:禁止远程 root 登录(在本地主机之外)
- 命令/配置摘录:
# dnf install mysql8.4-server
# systemctl enable --now mysqld.service- 注意:注意 按照设计,您只能安装同一应用程序流的一个版本(流),并且因为冲突的 RPM 软件包,您无法在同一主机上安装 MariaDB 和 MySQL。作为替代方案,您也可以在容器中运行数据库服务器服务。请参阅 使用容器在单个主机上运行多个 MariaDB 和 MySQL 实例。
2.2. 使用容器在单个主机上运行多个 MariaDB 和 MySQL 实例
- 要点:如果从软件包安装 MariaDB 或 MySQL,您只能在同一主机上运行这些服务中的一个,且该服务的一个版本。另外,您还可以在容器中运行服务。
- 要点:您可以配置以下情况:
- 列表:您希望在同一主机上运行多个 MariaDB 或 MySQL 实例。
- 列表:您想要在同一主机上运行 MariaDB 和 MySQL。
- 列表:podman 软件包已安装。
- 列表:使用您的红帽客户门户网站帐户认证到 registry.redhat.io 注册中心: # podman login registry.redhat.io 如果您已登录到容器注册中心,请跳过这一步。
- 列表:启动您要使用的容器: MariaDB 10.11 : $ podman run -d --name <container_name_1> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。 MariaDB 11.8: $ podman run -d --name <container_name_2> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_2>:3306 rhel10/mariadb-118 有关使用此容器镜…
- 列表:MariaDB 10.11 : $ podman run -d --name <container_name_1> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
- 命令/配置摘录:
# podman login registry.redhat.io
$ podman run -d --name <container_name_1> -e MARIADB_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011- 注意:重要 数据库服务器的容器名称和主机端口必须有所不同。
2.3. 配置对 MySQL 的网络访问
- 要点:您必须将 MySQL 配置为侦听网络接口并打开防火墙端口,以允许远程客户端访问数据库服务器。
- 要点:流程
- 列表:编辑 /etc/my.cnf.d/mysql-server.cnf 文件的 mysqld 部分。您可以设置以下配置指令: bind-address - 是服务器监听的地址。可能的选项有: 主机名 IPv4 地址 IPv6 地址 skip-networking - 控制服务器是否监听 TCP/IP 连接。可能的值有: 0 - 侦听所有客户端 1 - 仅侦听本地客户端 port - MySQL 侦听 TCP/IP 连接的端口。
- 列表:bind-address - 是服务器监听的地址。可能的选项有: 主机名 IPv4 地址 IPv6 地址
- 列表:主机名
- 列表:IPv4 地址
- 列表:IPv6 地址
- 列表:skip-networking - 控制服务器是否监听 TCP/IP 连接。可能的值有: 0 - 侦听所有客户端 1 - 仅侦听本地客户端
- 命令/配置摘录:
# firewall-cmd --permanent --add-service=mysql # firewall-cmd --reload
# systemctl restart mysqld.service2.4. 在 MySQL 服务器上设置 TLS 加密
- 要点:默认情况下,MySQL 使用未加密的连接。对于安全连接,请在 MySQL 服务器上启用 TLS 支持,并将您的客户端配置为建立加密的连接。
2.4.1. 将 CA 证书、服务器证书和私钥放在 MySQL 服务器上
- 要点:在 MySQL 服务器上启用 TLS 加密前,请将证书颁发机构(CA)证书、服务器证书和私钥存储在 MySQL 服务器上。
- 要点:先决条件
- 列表:以下 Privacy Enhanced Mail(PEM)格式的文件已复制到服务器: 服务器的私钥:server.example.com.key.pem 服务器证书:server.example.com.crt.pem 证书颁发机构(CA)证书:ca.crt.pem 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
- 列表:服务器的私钥:server.example.com.key.pem
- 列表:服务器证书:server.example.com.crt.pem
- 列表:证书颁发机构(CA)证书:ca.crt.pem
- 列表:将 CA 和服务器证书存储在 /etc/pki/tls/certs/ 目录中: # mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/
- 列表:对 CA 和服务器证书设置权限,使 MySQL 服务器能够读取文件: # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem 由于证书是客户端和服务器建立安全连接之前通信的一部分,因此任何客户端都可以在没有身份验证的情况下检索它们。因此,您不需要对 CA 和服务器证书文件设置严格的权限。
- 命令/配置摘录:
# mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/
# chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem2.4.2. 在 MySQL 服务器上配置 TLS 加密
- 要点:默认情况下,MySQL 使用未加密的连接。对于更多安全连接,您可以在 MySQL 服务器上启用传输层安全(TLS)支持,并将客户端配置为建立加密连接。
- 要点:先决条件
- 列表:您已安装了 MySQL 服务器。
- 列表:mysqld 服务正在运行。
- 列表:服务器上存在 Privacy Enhanced Mail(PEM)格式的以下文件,并可由 mysql 用户读取: 服务器的私钥:/etc/pki/tls/private/server.example.com.key.pem 服务器证书:/etc/pki/tls/certs/server.example.com.crt.pem 证书颁发机构(CA)证书 /etc/pki/tls/certs/ca.crt.pem
- 列表:服务器的私钥:/etc/pki/tls/private/server.example.com.key.pem
- 列表:服务器证书:/etc/pki/tls/certs/server.example.com.crt.pem
- 列表:证书颁发机构(CA)证书 /etc/pki/tls/certs/ca.crt.pem
- 命令/配置摘录:
[mysqld] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pem
ssl_crl = /etc/pki/tls/certs/example.crl.pem2.4.3. MySQL 服务器上的特定用户帐户需要 TLS 加密连接
- 要点:您可以配置特定的 MySQL 用户帐户,以要求 TLS 加密连接来保护敏感数据传输。
- 要点:如果您无法在服务器上配置所有连接都需要安全传输(require_secure_transport = on),请将单个用户帐户配置为需要 TLS 加密。
- 列表:MySQL 服务器启用了 TLS 支持。
- 列表:您配置为需要安全传输的用户已存在。
- 列表:CA 证书存储在客户端上。
- 列表:以管理员用户身份连接到 MySQL 服务器: # mysql -u root -p -h server.example.com 如果您的管理用户没有远程访问服务器的权限,请在 MySQL 服务器上执行命令,并连接到 localhost。
- 列表:使用 REQUIRE SSL 子句强制用户必须使用 TLS 加密连接进行连接: MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
- 列表:使用 TLS 加密,以 example 用户身份连接到服务器: # mysql -u example -p -h server.example.com ... MySQL [(none)]> 如果命令没有返回任何错误,并且您可以访问交互式 MySQL 控制台,则与 TLS 的连接成功。 默认情况下,如果服务器提供了 TLS 加密,客户端会使用 TLS 加密。您不需要指定 --ssl-ca=ca.crt.pem 和 --ssl-mode=VERIFY_IDENTITY 选项。但是,指定这些选项通过验证服务器的身份来提高安全性。
- 命令/配置摘录:
# mysql -u root -p -h server.example.com
MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;2.5. 将 MySQL 客户端配置为默认使用 TLS 加密
- 要点:在 RHEL 上,全局配置 MySQL 客户端使用 TLS 加密,并验证服务器证书中的通用名称(CN)是否与用户连接的主机名匹配。这可防止中间人攻击。
- 要点:先决条件
- 列表:MySQL 服务器启用了 TLS 支持。
- 列表:CA 证书存储在客户端上的 /etc/pki/tls/certs/ca.crt.pem 文件中。
- 列表:使用以下内容创建 /etc/my.cnf.d/mysql-client-tls.cnf 文件: [client] ssl-mode=VERIFY_IDENTITY ssl-ca=/etc/pki/tls/certs/ca.crt.pem 这些设置定义 MySQL 客户端使用 TLS 加密,并且客户端将主机名与服务器证书中的 CN (ssl-mode=VERIFY_IDENTITY)进行比较。另外,它还指定到 CA 证书的路径(ssl-ca)。
- 列表:使用主机名连接到服务器,并显示服务器的状态: # mysql -u root -p -h server.example.com -e status ... SSL: Cipher in use is TLS_AES_256_GCM_SHA384 如果 SSL 条目包含 Cipher in use is…,则连接加密了。 请注意,您在这个命令中使用的用户具有远程身份验证的权限。 如果您连接的主机名与服务器的 TLS 证书中的主机名不匹配,则 ssl-mode=VERIFY_IDENTITY 参数导致连接失败。例如,如果您连接到 localhost : # mysql -u root -p -h localhost -e statu…
- 命令/配置摘录:
[client] ssl-mode=VERIFY_IDENTITY ssl-ca=/etc/pki/tls/certs/ca.crt.pem
# mysql -u root -p -h server.example.com -e status ... SSL: Cipher in use is TLS_AES_256_GCM_SHA3842.6. 使用逻辑转储备份和恢复 MySQL 数据
- 要点:MySQL 数据的逻辑备份由恢复数据所需的 SQL 语句组成。与物理备份相比,逻辑备份的优点在于可以在其他硬件配置和 MySQL 版本上恢复数据。
2.6.1. 使用 mysqldump执行逻辑备份
- 要点:mysqldump 工具是一个备份实用程序,可以导出一个或多个数据库。mysqldump 的输出通常由重新创建服务器表结构、为其填充数据的 SQL 语句组成,或两者兼而有之。
- 要点:要执行 mysqldump 备份,您可以使用以下选项之一:
- 列表:备份一个或多个所选的数据库
- 列表:备份所有数据库
- 列表:从一个数据库备份表子集
- 列表:要转储单个数据库,请运行: # mysqldump [options] --databases db_name > backup-file.sql
- 列表:要一次转储多个数据库,请运行: # mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sql
- 列表:要转储所有数据库,请运行: # mysqldump [options] --all-databases > backup-file.sql
- 命令/配置摘录:
# mysqldump [options] --databases db_name > backup-file.sql
# mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sql- 注意:注意 此时,db_name 数据库必须存在。
2.6.2. 以 SQL 格式从转储中恢复 MySQL 数据
- 要点:如果您将一个或多个数据库备份到 SQL 文件,您可以使用此文件重新创建数据库结构及其数据。
- 要点:先决条件
- 列表:mysqld 服务正在运行。
- 列表:您有具有恢复数据的权限的凭证,例如 root 帐户。
- 列表:如果要恢复的数据库已存在,且您的 SQL 文件不包含 DROP TABLE IF EXISTS 语句,请手动删除表或整个数据库: 要删除表,请输入: # mysql -u root -p -e "DROP TABLE <database>.<table>;" 对 SQL 文件重新创建的每个表重复此命令。 要删除数据库,请输入: # mysql -u root -p -e "DROP DATABASE <database>;" 对 SQL 文件重新创建的每个数据库重复此命令。
- 列表:要删除表,请输入: # mysql -u root -p -e "DROP TABLE <database>.<table>;" 对 SQL 文件重新创建的每个表重复此命令。
- 列表:要删除数据库,请输入: # mysql -u root -p -e "DROP DATABASE <database>;" 对 SQL 文件重新创建的每个数据库重复此命令。
- 列表:导入 SQL 文件: # mysql -u root -p < backup.sql"
- 命令/配置摘录:
# mysql -u root -p -e "DROP TABLE <database>.<table>;"
# mysql -u root -p -e "DROP DATABASE <database>;"2.7. 使用物理副本备份和恢复 MySQL 数据
- 要点:MySQL 数据的物理备份包含存储内容的文件和目录。此方法的大小通常更快、更小。
2.7.1. 在 MySQL 服务器上执行文件系统备份
- 要点:文件系统级备份是备份完整的 MySQL 实例的一种快速方法。此方法需要关闭 mysqld 服务以实现数据一致性。
- 要点:流程
- 列表:停止 mysqld 服务: # systemctl stop mysqld.service
- 列表:创建备份目录,例如: # mkdir -p /root/mysqld-backup/{data,config}/
- 列表:备份数据目录: # cp -rp /var/lib/mysql/ /root/mysqld-backup/data/
- 列表:备份配置文件: # cp -rp /etc/my.cnf /etc/my.cnf.d/ /root/mysqld-backup/config/
- 列表:启动 mysqld 服务: # systemctl start mysqld.service
- 命令/配置摘录:
# systemctl stop mysqld.service
# mkdir -p /root/mysqld-backup/{data,config}/- 注意:重要 文件系统级备份特定于架构和 MySQL 版本。您不能在不同的构架或 MySQL 版本中恢复由此方法备份的数据。
2.7.2. 在 MySQL 服务器上恢复文件系统备份
- 要点:如果在 MySQL 实例中发生损坏,并且您之前执行了包含数据目录和配置文件的文件系统备份,请从此备份中恢复实例。
- 要点:先决条件
- 列表:您在 MySQL 服务器上执行文件系统备份。
- 列表:目标服务器必须满足备份源的以下条件: MySQL 版本必须相同或更高。 系统架构必须相同。
- 列表:MySQL 版本必须相同或更高。
- 列表:系统架构必须相同。
- 列表:停止 mysqld 服务: # systemctl stop mysqld.service
- 列表:删除当前的 /var/lib/mysql/ 目录: # rm -rf /var/lib/mysql/
- 命令/配置摘录:
# systemctl stop mysqld.service
# rm -rf /var/lib/mysql/2.8. 复制具有 TLS 加密的 MySQL
- 要点:您可以使用 TLS 加密配置 MySQL 复制,以便在源和副本服务器间创建安全的数据复制。
- 注意:警告 复制本身并不是一个足够的备份解决方案。复制可以防止源服务器出现硬件故障,但它不能确保防止数据的丢失。
2.8.1. 配置 MySQL 源服务器
- 要点:您可以设置 MySQL 源服务器所需的配置选项,以便通过 TLS 协议正确地运行并复制数据库服务器上所做的所有更改。
- 要点:先决条件
- 列表:源服务器已安装。
- 列表:源服务器已 配置了 TLS。 重要 源和目标证书必须由同一证书颁发机构签名。
- 列表:包括 /etc/my.cnf.d/mysql-server.cnf 文件中 [mysqld] 部分下的以下选项: bind-address=source_ip_adress 副本需要这个选项来连接源。 server-id=id id 必须是唯一的。 log_bin=path_to_source_server_log 此选项定义 MySQL 源服务器的二进制日志文件的路径。例如:log_bin=/var/log/mysql/mysql-bin.log。 gtid_mode=ON 此选项在服务器上启用全局事务标识符(GTID)。 enforce-gtid-consistency=ON 服务器通过仅允许执行服务器可使用 GTID 安全日…
- 列表:bind-address=source_ip_adress 副本需要这个选项来连接源。
- 列表:server-id=id id 必须是唯一的。
- 列表:log_bin=path_to_source_server_log 此选项定义 MySQL 源服务器的二进制日志文件的路径。例如:log_bin=/var/log/mysql/mysql-bin.log。
- 命令/配置摘录:
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
# systemctl restart mysqld.service- 注意:重要 源和目标证书必须由同一证书颁发机构签名。
2.8.2. 配置 MySQL 副本服务器
- 要点:您可以设置 MySQL 副本服务器所需的配置选项,以确保成功复制。
- 要点:先决条件
- 列表:副本服务器已安装。
- 列表:副本服务器已 配置了 TLS。 重要 源和目标证书必须由同一证书颁发机构签名。
- 列表:包括 /etc/my.cnf.d/mysql-server.cnf 文件中 [mysqld] 部分下的以下选项: server-id=id id 必须是唯一的。 relay-log=path_to_replica_server_log 中继日志是 MySQL 副本服务器在复制期间创建的一组日志文件。 log_bin=path_to_replica_sever_log 此选项定义 MySQL 副本服务器的二进制日志文件的路径。例如:log_bin=/var/log/mysql/mysql-bin.log。 gtid_mode=ON 此选项在服务器上启用全局事务标识符(GTID)。 enforce-gtid-consistency=O…
- 列表:server-id=id id 必须是唯一的。
- 列表:relay-log=path_to_replica_server_log 中继日志是 MySQL 副本服务器在复制期间创建的一组日志文件。
- 列表:log_bin=path_to_replica_sever_log 此选项定义 MySQL 副本服务器的二进制日志文件的路径。例如:log_bin=/var/log/mysql/mysql-bin.log。
- 命令/配置摘录:
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
# systemctl restart mysqld.service- 注意:重要 源和目标证书必须由同一证书颁发机构签名。
2.8.3. 在 MySQL 源服务器上创建复制用户
- 要点:您必须在 MySQL 源服务器上创建具有适当权限的复制用户,以便副本服务器能够连接和接收数据更改。
- 要点:先决条件
- 列表:源服务器已安装并配置,如 配置 MySQL 源服务器 中所述。
- 列表:创建复制用户: mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
- 列表:授予用户复制权限: mysql> GRANT REPLICATION SLAVE ON . TO 'replication_user'@'replica_server_hostname';*
- 列表:重新在 MySQL 数据库中载入授权表: mysql> FLUSH PRIVILEGES;
- 列表:将源服务器设置为只读状态: mysql> SET @@GLOBAL.read_only = ON;
- 命令/配置摘录:
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';*2.8.4. 将 MySQL 副本服务器连接到源服务器
- 要点:您必须使用源服务器凭证配置副本服务器,并开始复制以在 MySQL 副本和源服务器之间建立连接。
- 要点:先决条件
- 列表:源服务器已安装并配置,如 配置 MySQL 源服务器 中所述。
- 列表:副本服务器已安装并配置,如 配置 MySQL 副本服务器 中所述。
- 列表:您已创建了复制用户。请参阅 在 MySQL 源服务器上创建复制用户。
- 列表:将副本服务器设置为只读状态: mysql> SET @@GLOBAL.read_only = ON;
- 列表:配置复制源: mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_hostname', SOURCE_USER='replication_user', SOURCE_PASSWORD='password', SOURCE_AUTO_POSITION=1, SOURCE_SSL=1, SOURCE_SSL_CA='path_to_ca_on_source', SOURCE_SSL_CAPATH='path_to_directory_with_certificates', SOURCE_SSL_CERT='path_to_source_certificate'…
- 列表:在 MySQL 副本服务器中启动副本线程: mysql> START REPLICA;
- 命令/配置摘录:
mysql> SET @@GLOBAL.read_only = ON;
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_hostname', SOURCE_USER='replication_user', SOURCE_PASSWORD='password', SOURCE_AUTO_POSITION=1, SOURCE_SSL=1, SOURCE_SSL_CA='path_to_ca_on_source', SOURCE_SSL_CAPATH='path_to_directory_with_certificates', SOURCE_SSL_CERT='path_to_source_certificate', SOURCE_SSL_KEY='path_to_source_key';- 注意:注意 如果副本服务器启动或连接失败,请在 SHOW MASTER STATUS 命令显示的二进制日志位置后跳过事件。例如,从定义的位置跳过第一个事件: mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 之后,尝试再次启动副本服务器。
2.8.5. 验证 MySQL 服务器上的复制
- 要点:您可以通过在源和目标服务器上创建测试数据库并检查复制状态来验证 MySQL 复制是否正常工作。
- 要点:流程
- 列表:在源服务器上创建一个示例数据库: mysql> CREATE DATABASE test_db_name;
- 列表:验证 test_db_name 数据库是否在副本服务器上进行复制。
- 列表:在源或副本服务器上执行以下命令,显示 MySQL 服务器的二进制日志文件的状态信息: mysql> SHOW MASTER STATUS; Executed_Gtid_Set 列,针对在源上执行的事务显示一组 GTID,它不能为空。 注意 当在副本服务器上使用 SHOW REPLICA STATUS 时,Executed_Gtid_Set 行显示相同的 GTIDs 集合。
- 列表:MySQL 复制文档
- 列表:带有全局事务标识符的复制
- 命令/配置摘录:
mysql> CREATE DATABASE test_db_name;
mysql> SHOW MASTER STATUS;- 注意:注意 当在副本服务器上使用 SHOW REPLICA STATUS 时,Executed_Gtid_Set 行显示相同的 GTIDs 集合。
2.9. 在 RHEL 10 上将 MySQL 实例从以前的 RHEL 版本迁移到 MySQL 8.4
- 要点:RHEL 10 提供 MySQL 8.4.如果在以前的 RHEL 版本上运行 MySQL 实例,您可以在新主机上配置 RHEL 10,并将实例迁移到其上。
- 要点:先决条件
- 列表:您可以在新主机上配置 RHEL 10。
- 列表:您在 RHEL 8 或 RHEL 9 主机上执行 MySQL 实例的文件系统备份。
- 列表:安装 mysql8.4-server 软件包: # dnf install mysql8.4-server
- 列表:如果服务已在运行,停止该服务: # systemctl stop mysqld.service
- 列表:将之前主机上 /var/lib/mysql/ 目录的内容复制到 RHEL 10 主机上的相同位置。
- 列表:将之前主机中的配置文件复制到 /etc/my.cnf.d/ 目录中,并确保文件只包含对 MySQL 8.4 有效的选项。详情请查看 上游文档。
- 命令/配置摘录:
# dnf install mysql8.4-server
# systemctl stop mysqld.service第 3 章 使用 PostgreSQL
- 要点:PostgreSQL 服务器是一个基于 SQL 语言的开源、健壮且高度可扩展的数据库服务器。PostgreSQL 服务器提供了一个对象关系型数据库系统,其可以管理大量的数据集和大量的并发用户。
- 要点:PostgreSQL 服务器包含确保数据完整性、构建容错环境和应用程序的功能。使用 PostgreSQL 服务器,您可以使用自己的数据类型、自定义功能或来自不同编程语言的代码来扩展数据库,而无需重新编译数据库。
3.1. 安装 PostgreSQL
- 要点:RHEL 10 提供 PostgreSQL 16 作为 Application Stream 的初始版本,您可以将其作为 RPM 软件包安装。在次发行版本中,RHEL 10 提供了额外的 PostgreSQL 版本作为具有较短的生命周期的替代版本。
- 要点:在 RHEL 10 中,PostgreSQL 服务器在以下版本中可用:
- 列表:PostgreSQL 16
- 列表:从 RHEL 10.2 开始可用的 PostgreSQL 18
- 列表:安装 PostgreSQL 服务器软件包: 对于 PostgreSQL 16,请输入: # dnf install postgresql-server 对于 PostgreSQL 18,请输入: # dnf install postgresql18-server postgres 超级用户会自动创建。
- 列表:对于 PostgreSQL 16,请输入: # dnf install postgresql-server
- 列表:对于 PostgreSQL 18,请输入: # dnf install postgresql18-server
- 列表:初始化数据库集群: # postgresql-setup --initdb 将数据存储在默认的 /var/lib/pgsql/data 目录中。
- 命令/配置摘录:
# dnf install postgresql-server
# dnf install postgresql18-server- 注意:重要 按照设计,您只能安装同一应用程序流的一个版本(流),并且因为冲突的 RPM 软件包,您无法在同一主机上安装多个 PostgreSQL 实例。作为替代方案,您也可以在容器中运行数据库服务器服务。请参阅 使用容器在单个主机上运行多个 PostgreSQL 实例。
3.2. 使用容器在单个主机上运行多个 PostgreSQL 实例
- 要点:如果您从软件包安装 PostgreSQL,则只能在同一主机上运行它的一个版本。要运行多个实例或 PostgreSQL 的不同版本,您可以在容器中运行服务。
- 要点:先决条件
- 列表:podman 软件包已安装。
- 列表:使用您的红帽客户门户网站帐户认证到 registry.redhat.io 注册中心: # podman login registry.redhat.io 如果您已登录到容器注册中心,请跳过这一步。
- 列表:启动您要使用的容器。 对于 PostgreSQL 16,请输入: $ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -p <host_port_1>:5432 rhel10/postgresql-16 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。 对于 PostgreSQL 18,请输入: $ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_…
- 列表:对于 PostgreSQL 16,请输入: $ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -p <host_port_1>:5432 rhel10/postgresql-16 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
- 列表:对于 PostgreSQL 18,请输入: $ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -p <host_port_2>:5432 rhel10/postgresql-18 有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
- 列表:要确保客户端可以访问网络上的数据库服务器,请在防火墙中打开主机端口: # firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,...} # firewall-cmd --reload
- 命令/配置摘录:
# podman login registry.redhat.io
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -p <host_port_1>:5432 rhel10/postgresql-16- 注意:重要 容器名称和两个数据库服务器的主机端口必须不同。
3.3. 创建 PostgreSQL 用户
- 要点:您可以创建具有特定权限的 PostgreSQL 用户,以管理数据库访问和控制用户权限,以进行安全数据库管理。
- 要点:PostgreSQL 用户为以下类型:
- 列表:postgres Linux 系统用户:只使用它来运行 PostgreSQL 服务器和客户端应用程序,如 pg_dump。不要将 postgres 系统用户用于 PostgreSQL 管理方面的任何交互式工作,如数据库创建和用户管理。
- 列表:数据库超级用户:默认的 postgres PostgreSQL 超级用户与 postgres 系统用户无关。您可以在 /var/lib/pgsql/data/pg_hba.conf 文件中限制 postgres 超级用户的访问,否则不存在其他权限限制。您也可以创建其他数据库超级用户。
- 列表:具有特定数据库访问权限的角色: A database user:具有默认登录的权限。 A group of users:启用管理整个组的权限。
- 列表:A database user:具有默认登录的权限。
- 列表:A group of users:启用管理整个组的权限。
- 列表:PostgreSQL 服务器已安装。
- 命令/配置摘录:
# su - postgres
$ psql psql (16.4) Type "help" for help. postgres=#- 注意:重要 以不是超级用户的角色执行大部分任务。常见的做法是创建一个具有 CREATEDB 和 CREATEROLE 特权的角色,并将此角色用于所有数据库和角色的日常管理。
3.4. 配置 PostgreSQL
- 要点:您可以通过编辑数据库集群目录中的配置文件来配置 PostgreSQL,以设置数据库参数、身份验证和客户端访问。默认情况下,PostgreSQL 使用 /var/lib/pgsql/data/ 目录。
- 要点:PostgreSQL 配置文件包括:
- 列表:/var/lib/pgsql/data/postgresql.conf - 设置数据库集群参数。
- 列表:/var/lib/pgsql/data/postgresql.auto.conf - 包含与 postgresql.conf 类似的基本的 PostgreSQL 设置。但是,此文件受服务器的控制。ALTER SYSTEM 查询编辑此文件。您不能手动编辑它。
- 列表:/var/lib/pgsql/data/pg_ident.conf - 将外部身份验证机制的用户身份映射到 PostgreSQL 用户身份。
- 列表:/var/lib/pgsql/data/pg_hba.conf - 为 PostgreSQL 数据库配置客户端身份验证。
- 列表:编辑 /var/lib/pgsql/data/postgresql.conf 文件,并配置数据库集群参数的基本设置,例如: log_connections = yes log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB password_encryption = scram-sha-256
- 列表:编辑 /var/lib/pgsql/data/pg_hba.conf 文件,并配置客户端身份验证,例如: # TYPE DATABASE USER ADDRESS METHOD local all all trust host postgres all 192.168.93.0/24 ident host all all .example.com scram-sha-256
- 命令/配置摘录:
log_connections = yes log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB password_encryption = scram-sha-256
# TYPE DATABASE USER ADDRESS METHOD local all all trust host postgres all 192.168.93.0/24 ident host all all .example.com scram-sha-2563.5. 在 PostgreSQL 服务器上配置 TLS 加密
- 要点:默认情况下,PostgreSQL 使用未加密的连接。对于更安全的连接,您可以对 PostgreSQL 服务器启用传输层安全(TLS)支持,并将客户端配置为建立加密连接。
- 要点:先决条件
- 列表:您创建了 TLS 私钥,证书认证机构(CA)为您的 PostgreSQL 服务器发布了一个服务器证书。
- 列表:PostgreSQL 服务器已安装。
- 列表:数据库集群已初始化。
- 列表:如果启用了 FIPS 模式,客户端必须支持 Extended Master Secret(EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 在 RHEL 9.2 及更高版本上强制执行 TLS 扩展 "Extended Master Secret"。
- 列表:将私钥和服务器证书存储在 /var/lib/pgsql/data/ 目录中: # cp server.{key,crt} /var/lib/pgsql/data/
- 列表:设置私钥和证书的所有权: # chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
- 命令/配置摘录:
# cp server.{key,crt} /var/lib/pgsql/data/
# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}3.6. 使用逻辑转储备份和恢复 PostgreSQL 数据
- 要点:PostgreSQL 数据的逻辑备份由恢复数据所需的 SQL 语句组成。与物理备份相比,逻辑备份的优点是您可以从其他硬件配置和 PostgreSQL 版本上的逻辑备份中恢复数据。
- 要点:SQL 转储方法生成包含 SQL 命令的转储文件。上传文件到数据库服务器,会在转储时重新创建其状态。
- 列表:pg_dump 转储单个数据库,而没有集群范围的有关角色或表空间的信息
- 列表:pg_dumpall 转储给定集群中的每个数据库,并保留集群范围的数据,如角色和表空间定义。
3.6.1. SQL 转储的优点和缺陷
- 要点:SQL 转储是包含数据库结构和数据的文本文件,格式为 SQL 语句。
- 要点:优点:
- 列表:SQL 转储是唯一一个不是特定于服务器版本的 PostgreSQL 备份方法。您可以将 pg_dump 工具的输出重新载入到 PostgreSQL 的后续版本中,这不适用于文件系统级备份或持续归档。
- 列表:SQL 转储是将数据库传输到不同计算机架构(比如从 32 位服务器传输到 64 位服务器)的唯一方法。
- 列表:SQL 转储提供内部一致的转储。转储表示 pg_dump 开始运行时的数据库的快照。
- 列表:pg_dump 工具在运行时不会阻止对数据库的其他操作。
- 列表:与文件系统级别备份相比,SQL 转储需要更长的时间。
3.6.2. 使用 pg_dump备份单个 PostgreSQL 数据库
- 要点:您可以使用 pg_dump 实用程序创建单个 PostgreSQL 数据库的备份,将数据库结构和数据导出到文件中。
- 要点:先决条件
- 列表:您以 postgres 超级用户或具有数据库管理员特权的用户身份登录。
- 列表:转储没有集群范围信息的数据库: $ pg_dump <db_name> > <dump_file> 要指定 pg_dump 联系的数据库服务器,请使用以下命令行选项: -h 选项用来定义主机的。 默认主机是本地主机,也可以是 PGHOST 环境变量指定的。 -p 选项用来定义端口 。 PGPORT 环境变量表示默认端口或编译后的默认值。
- 列表:-h 选项用来定义主机的。 默认主机是本地主机,也可以是 PGHOST 环境变量指定的。
- 列表:-p 选项用来定义端口 。 PGPORT 环境变量表示默认端口或编译后的默认值。
- 命令/配置摘录:
$ pg_dump <db_name> > <dump_file>3.6.3. 使用 pg_dump恢复单个 PostgreSQL 数据库
- 要点:您可以使用 pg_restore 工具重新创建数据库结构和数据,从 SQL 转储文件恢复 PostgreSQL 数据库。
- 要点:先决条件
- 列表:您以 postgres 超级用户或具有数据库管理员特权的用户身份登录。
- 列表:创建新数据库: $ createdb <db_name>
- 列表:验证在转储数据库中拥有对象或具有对象权限的所有用户是否已存在。如果这样的用户不存在,恢复将无法重新创建具有原始所有权和权限的对象。
- 列表:运行 psql 工具来恢复 pg_dump 工具创建的文本文件转储: $ psql <db_name> < <dump_file> 其中 <dump_file> 是 pg_dump 命令的输出。要恢复非文本文件转储,请使用 pg_restore 工具: $ pg_restore <non-plain_text_file>
- 命令/配置摘录:
$ createdb <db_name>
$ psql <db_name> < <dump_file>3.6.4. 使用 pg_dumpall备份 PostgreSQL 服务器上的所有数据库
- 要点:您可以使用 pg_dumpall 实用程序将所有数据库和集群范围数据导出到单个文件中,在 PostgreSQL 服务器上创建所有数据库的备份。
- 要点:先决条件
- 列表:您以 postgres 超级用户或具有数据库管理员特权的用户身份登录。
- 列表:转储数据库集群中的所有数据库,并保留集群范围的数据: $ pg_dumpall > <dump_file> 要指定 pg_dumpall 联系人的数据库服务器,请使用以下命令行选项: -h 选项用来定义主机的。 默认主机是本地主机,也可以是 PGHOST 环境变量指定的。 -p 选项用来定义端口 。 PGPORT 环境变量表示默认端口或编译后的默认值。 -l 选项用来定义默认数据库。 这个选项使您能够选择一个与初始化过程中自动创建的 postgres 数据库不同的默认数据库。
- 列表:-h 选项用来定义主机的。 默认主机是本地主机,也可以是 PGHOST 环境变量指定的。
- 列表:-p 选项用来定义端口 。 PGPORT 环境变量表示默认端口或编译后的默认值。
- 列表:-l 选项用来定义默认数据库。 这个选项使您能够选择一个与初始化过程中自动创建的 postgres 数据库不同的默认数据库。
- 命令/配置摘录:
$ pg_dumpall > <dump_file>3.6.5. 使用 pg_dumpall在 PostgreSQL 服务器上恢复所有数据库
- 要点:您可以使用 psql 工具重新创建整个数据库集群,从 pg_dumpall 文件恢复 PostgreSQL 服务器上的所有数据库。
- 要点:先决条件
- 列表:您以 postgres 超级用户或具有数据库管理员特权的用户身份登录。
- 列表:确保在转储数据库中拥有对象或已被赋予了对象权限的所有用户已存在。如果这样的用户不存在,恢复将无法重新创建具有原始所有权和权限的对象。
- 列表:运行 psql 工具来恢复 pg_dumpall 工具创建的文本文件转储: $ psql < <dump_file> 其中 <dump_file> 是 pg_dumpall 命令的输出。
- 命令/配置摘录:
$ psql < <dump_file>3.6.6. 在恢复过程中处理 SQL 错误
- 要点:默认情况下,如果出现 SQL 错误,psql 会继续执行,从而导致数据库只部分恢复。或者,您可以将 psql 配置为停止出错以确保数据完整性。
- 要点:先决条件
- 列表:您以 postgres 超级用户或具有数据库管理员特权的用户身份登录。
- 列表:设置 ON_ERROR_STOP 变量,使 psql 在发生 SQL 错误时退出,且退出状态为 3: $ psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
- 列表:指定整个转储作为一个事务来恢复,以便要么全部完成,要么全部取消。 当使用 psql 工具恢复文本文件转储时: $ psql -1 当使用 pg_restore 工具恢复非文本文件转储时: $ pg_restore -e 请注意,当您使用此方法时,即使是小的错误也可能会取消已运行了数小时的恢复操作。
- 列表:当使用 psql 工具恢复文本文件转储时: $ psql -1
- 列表:当使用 pg_restore 工具恢复非文本文件转储时: $ pg_restore -e
- 列表:PostgreSQL 文档 - SQL 转储
- 命令/配置摘录:
$ psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
$ psql -13.7. 使用物理副本备份和恢复 PostgreSQL 数据
- 要点:PostgreSQL 数据的物理备份包含存储内容的文件和目录。此方法的大小通常更快、更小。
3.7.1. 在 PostgreSQL 服务器上执行文件系统备份
- 要点:文件系统级备份是备份完整的 PostgreSQL 实例的快速方法。此方法需要关闭 postgresql 服务以实现数据一致性。
- 要点:流程
- 列表:停止 postgresql 服务: # systemctl stop postgresql.service
- 列表:创建备份目录,例如: # mkdir -p /root/postgresql-backup/
- 列表:备份 /var/lib/pgsql/ 目录: # cp -rp /var/lib/pgsql/ /root/postgresql-backup/ /var/lib/pgsql/ 包含 PostgreSQL 数据库服务器的所有基本文件,包括配置文件、数据文件和日志。
- 列表:启动 postgresql 服务: # systemctl start postgresql.service
- 命令/配置摘录:
# systemctl stop postgresql.service
# mkdir -p /root/postgresql-backup/- 注意:重要 PostgreSQL 文件系统级备份特定于架构和 RHEL 主版本。您不能在不同的构架或 RHEL 主版本中恢复由此方法备份的数据。
3.7.2. 在 PostgreSQL 服务器上恢复文件系统备份
- 要点:如果您的 PostgreSQL 实例损坏,并且之前执行了包含数据目录的文件系统备份,您可以从此备份中恢复实例。
- 要点:先决条件
- 列表:您在 PostgreSQL 服务器上执行文件系统备份。
- 列表:目标服务器必须满足备份源的以下条件: PostgreSQL 版本必须相同。 系统架构必须相同。
- 列表:PostgreSQL 版本必须相同。
- 列表:系统架构必须相同。
- 列表:停止 postgresql 服务: # systemctl stop postgresql.service
- 列表:删除当前的 /var/lib/pgsql/ 目录: # rm -rf /var/lib/pgsql/
- 命令/配置摘录:
# systemctl stop postgresql.service
# rm -rf /var/lib/pgsql/3.8. 使用持续归档备份和恢复 PostgreSQL 数据
- 要点:您可以通过将 WAL 文件与基础备份相结合,以实现时间恢复和高可用性,使用持续归档来创建强大的 PostgreSQL 备份。
- 要点:PostgreSQL 将对数据库的数据文件的每个更改记录到 write-ahead 日志(WAL)文件中,该文件位于集群数据目录的 pg_wal/ 子目录中。此日志主要服务崩溃恢复。崩溃后,您可以使用自上次检查点后进行的日志条目将数据库恢复到一致状态。
- 列表:归档 WAL 文件的存储卷。
- 列表:需要恢复时数据恢复的最可能持续时间。自上次备份以来的很长一段时间,系统重新运行了更多 WAL 段,因此恢复需要更长的时间。
- 注意:注意 您不能使用 pg_dump 和 pg_dumpall SQL 转储作为持续归档备份解决方案的一部分。SQL 转储生成逻辑备份,且不包含 WAL replay 的信息。
3.8.1. 持续归档的优点和缺陷
- 要点:持续存档是一种功能,通过持续保存数据库的事务日志文件,为数据备份、高可用性和时间恢复(PITR)提供可靠的策略。
- 要点:优点:
- 列表:使用持续备份方法,您可以使用不完全一致的基础备份,因为日志重播更正任何内部不一致。因此,您可以对运行的 PostgreSQL 服务器执行基础备份。
- 列表:您不需要文件系统快照 ; tar 或类似的归档工具就足够了。
- 列表:您可以通过继续归档 WAL 文件来实现持续备份,因为日志重播的 WAL 文件序列可能会无限期地进行。这对大型数据库尤其重要。
- 列表:持续备份支持点恢复。不需要将 WAL 条目重新显示到结尾。您可以在任何点上停止重播,并在进行基础备份后随时将数据库恢复到其状态。
- 列表:如果 WAL 文件在具有相同基础备份的另一台机器上持续可用,您可以在该机器上恢复数据库。恢复的副本可以在任何时候都处于最新的状态。
- 列表:持续备份方法只支持恢复整个数据库集群,而不是子集。
3.8.2. 设置 WAL 归档
- 要点:您可以在 PostgreSQL 服务器上启用写前日志(WAL)归档,以捕获并保存 WAL 段文件用于备份和恢复目的。
- 要点:PostgreSQL 服务器在运行时生成 WAL 记录序列。服务器物理将这个序列分成 WAL 段文件,并为每个文件分配一个数字名称来反映其在 WAL 序列中的位置。如果没有 WAL 归档,服务器会重复使用片段文件,并使用更高的段号对其进行重命名。
- 列表:在 /var/lib/pgsql/data/postgresql.conf 文件中: 将 wal_level 配置参数设置为 replica 或更高的值。 将 archive_mode 参数设置为 on。 在 archive_command 配置参数中指定 shell 命令。您可以使用 cp 命令、其它命令或 shell 脚本。 例如: archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' 其中 %p 参数指定归档文件的相对路径,%f 参数指定文件名。 此命令将可归档的 WAL 段复制到 /mnt/ser…
- 列表:将 wal_level 配置参数设置为 replica 或更高的值。
- 列表:将 archive_mode 参数设置为 on。
- 列表:在 archive_command 配置参数中指定 shell 命令。您可以使用 cp 命令、其它命令或 shell 脚本。 例如: archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' 其中 %p 参数指定归档文件的相对路径,%f 参数指定文件名。
- 列表:重启 postgresql 服务以使修改生效: # systemctl restart postgresql.service
- 列表:测试您的归档命令,并确保它不会覆盖现有的文件,如果失败,它将返回一个非零退出状态。
- 命令/配置摘录:
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
test ! -f /mnt/server/archivedir/00000001000000A900000065 && cp pg_wal/00000001000000A900000065 /mnt/server/archivedir/00000001000000A900000065- 注意:注意 归档命令仅在 WAL 段完成后运行。生成小 WAL 流量的服务器在交易完成和其归档存储中的安全记录之间可能会有很长时间的延迟。要限制未归档数据可保留多久,您可以: 设置 archive_timeout 参数,来强制服务器以给定频率切换到新的 WAL 段文件。 使用 pg_switch_wal 参数强制段切换,以确保交易在完成后立即归档。
3.8.3. 进行基础备份
- 要点:您可以使用 pg_basebackup 工具创建 PostgreSQL 基础备份,以捕获数据库的一致性快照,以满足备份和恢复目的。
- 要点:基础备份在 WAL 归档区域中创建一个历史记录文件,该文件以备份所需的第一个 WAL 段命名。
- 列表:您以 postgres 超级用户、具有数据库管理员特权的用户身份或至少具有 REPLICATION 权限的另一个用户身份登录。
- 列表:您必须保留在基础备份期间和之后生成的所有 WAL 段文件。
- 列表:使用 pg_basebackup 工具执行基础备份。 将基础备份创建为单个的文件(纯格式): $ pg_basebackup -D <backup_directory> -Fp 使用您选择的备份位置替换 backup_directory。 如果您使用表空间并在与服务器相同的主机上执行基础备份,则必须使用- tablespace-mapping 选项。否则,在尝试将备份写入同一位置时备份会失败。 将基础备份创建为一个 tar 归档(tar 和压缩格式): $ pg_basebackup -D <backup_directory> -Ft -z 使用您选择的备份位置替换 backup_directory。 要恢复此数据,您必须手动提取…
- 列表:将基础备份创建为单个的文件(纯格式): $ pg_basebackup -D <backup_directory> -Fp 使用您选择的备份位置替换 backup_directory。 如果您使用表空间并在与服务器相同的主机上执行基础备份,则必须使用- tablespace-mapping 选项。否则,在尝试将备份写入同一位置时备份会失败。
- 列表:将基础备份创建为一个 tar 归档(tar 和压缩格式): $ pg_basebackup -D <backup_directory> -Ft -z 使用您选择的备份位置替换 backup_directory。 要恢复此数据,您必须手动提取正确位置中的文件。
- 列表:-h 选项用来定义主机的。 默认主机要么是本地主机,要么是 PGHOST 环境变量所指定的主机。
- 命令/配置摘录:
$ pg_basebackup -D <backup_directory> -Fp
$ pg_basebackup -D <backup_directory> -Ft -z- 注意:注意 请考虑保留多个备份集,以确保您可以恢复数据。
3.8.4. 使用持续归档备份恢复数据库
- 要点:您可以通过恢复基础备份并应用归档的 WAL 文件来恢复 PostgreSQL 数据库。
- 要点:流程
- 列表:停止服务器: # systemctl stop postgresql.service
- 列表:将必要的数据复制到临时位置。 最好复制整个集群数据目录和任何表空间。请注意,这需要系统上有足够的可用空间来保存现有数据库的两个副本。 如果您没有足够的空间,就保存集群的pg_wal 目录的内容,其中可能包含系统关闭前没有归档的日志。
- 列表:删除集群数据目录下的所有现有文件和子目录,并在您要使用的任何表空间的根目录下删除。
- 列表:从您的基础备份恢复数据库文件。 确保: 恢复的文件具有正确的所有权(数据库系统用户,而不是 root)。 恢复的文件具有正确的权限。 pg_tblspc/ 子目录中的符号链接被正确恢复。
- 列表:恢复的文件具有正确的所有权(数据库系统用户,而不是 root)。
- 列表:恢复的文件具有正确的权限。
- 命令/配置摘录:
# systemctl stop postgresql.service
restore_command = 'cp /mnt/server/archivedir/%f "%p"'3.9. 直接将 PostgreSQL 数据库从一个服务器传输到另一个服务器
- 要点:您可以使用 pg_dump 和 psql 工具来备份 PostgreSQL 数据库,并在另一个 PostgreSQL 服务器上直接恢复它。使用此方法,您可以在没有中间文件的单一步骤中传输数据库。
- 要点:先决条件
- 列表:以 postgres 用户身份登录。
- 列表:将数据库从源服务器传送到目标服务器: $ pg_dump -h <source_server> <db_name> | psql -h <destination_server> <db_name>
- 命令/配置摘录:
$ pg_dump -h <source_server> <db_name> | psql -h <destination_server> <db_name>3.10. 在 RHEL 10 上将 PostgreSQL 实例从以前的 RHEL 版本迁移到 PostgreSQL
- 要点:如果您已在 RHEL 9 上运行 PostgreSQL,并希望将数据库软件移到运行 RHEL 10 的主机,您可以迁移数据库。
- 要点:可用的迁移方法是:
- 列表:备份和恢复升级 - 这个方法可能需要更多时间,但在大多数情况下可以正常工作。
- 列表:使用 pg_upgrade 工具快速升级 - 此方法会更快,但仅在从 PostgreSQL 13 迁移到 16 时工作,且硬件架构保持不变。
- 注意:重要 在 PostgreSQL 迁移前,始终备份源主机上的 /var/lib/pgsql/data/ 目录。
3.10.1. 使用备份和恢复方法迁移到 RHEL 10 上的 PostgreSQL
- 要点:使用备份和恢复方法将数据从任何 RHEL 8 或 RHEL 9 版本 PostgreSQL 迁移到 RHEL 10 上的 PostgreSQL 的任何相等或更新版本。
- 要点:先决条件
- 列表:现有数据库服务器在 RHEL 8 或 RHEL 9 上运行,并使用从 RHEL 存储库安装的 PostgreSQL 版本。
- 列表:两个主机上的区域设置是相同的。要验证这一点,请比较两个主机上的 echo $LANG 命令的输出。
- 列表:在具有您要迁移的现有 PostgreSQL 实例的主机上: 将所有数据库导出到 /var/lib/pgsql/pgdump_file.sql 文件中: # su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql" 检查导出的文件: # su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"' 将您在之前步骤中创建的数据库转储和 PostgreSQL 配置文件复制到 RHEL 10 主机,例如: # scp /var/lib/pgsql/pgdump_file.sql \ /var/lib/pgsql/dat…
- 列表:将所有数据库导出到 /var/lib/pgsql/pgdump_file.sql 文件中: # su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql"
- 列表:检查导出的文件: # su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"'
- 列表:将您在之前步骤中创建的数据库转储和 PostgreSQL 配置文件复制到 RHEL 10 主机,例如: # scp /var/lib/pgsql/pgdump_file.sql \ /var/lib/pgsql/data/pg_hba.conf \ /var/lib/pgsql/data/pg_ident.conf \ /var/lib/pgsql/data/postgresql.conf \ <user>@<rhel_10_host>:/tmp/
- 命令/配置摘录:
# su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql"
# su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"'3.10.2. 使用 pg_update 将以前 RHEL 版本的 PostgreSQL 13 迁移到 RHEL 10 上的 PostgreSQL 16
- 要点:如果要将 PostgreSQL 13 实例从以前的 RHEL 版本迁移到 RHEL 10 上的 PostgreSQL 16,您可以使用快速升级方法。使用此方法,您可以将 /var/lib/pgsql/data/ 目录的内容复制到 RHEL 10 主机,并使用 pg_update 工具转换数据库。
- 要点:先决条件
- 列表:现有数据库服务器使用 PostgreSQL 13。
- 列表:当前和未来服务器的硬件架构是相同的。
- 列表:RHEL 10 主机在存放 /var/lib/pgsql/ 目录的磁盘上有足够的可用空间。 例如,迁移 10 GiB PostgreSQL 目录需要在 RHEL 10 主机上至少 20 GiB 的可用磁盘空间。
- 列表:两个主机上的区域设置是相同的。要验证这一点,请比较两个主机上的 echo $LANG 命令的输出。
- 列表:在具有您要迁移的现有 PostgreSQL 实例的主机上: 停止 postgresql 服务: # systemctl stop postgresql.service 进到 /var/lib/pgsql/ 目录,并备份 data 子目录: # cd /var/lib/pgsql/ # tar -zcf ~/pgdata.bak.tar.gz data/ 将 ~/pgdata.bak.tar.gz 存档复制到 RHEL 10 主机,例如: # scp ~/pgdata.bak.tar.gz <user>@<rhel_10_host>:/tmp/
- 列表:停止 postgresql 服务: # systemctl stop postgresql.service
- 命令/配置摘录:
# systemctl stop postgresql.service
# cd /var/lib/pgsql/ # tar -zcf ~/pgdata.bak.tar.gz data/- 注意:重要 只有在您的现有 PostgreSQL 实例版本 13 且硬件架构在源和目标主机上相同时,快速升级方法才可以正常工作。在其他情况下,请使用 备份和恢复方法。
- 注意:重要 pg_upgrade 工具只迁移数据库,而不迁移配置文件。迁移后,/var/lib/pgsql/data/ 仅包含默认的 .conf 文件。如果您之前有自定义配置文件,请从 /var/lib/pgsql/data-old/ 目录中复制它们,并确保它们与新的 PostgreSQL 版本兼容。
3.11. 从 PostgreSQL 16 的 RHEL 10 版本升级到 PostgreSQL 18
- 要点:您可以将 PostgreSQL 数据库服务器从 RHEL 10 上的版本 16 升级到 18,以访问新功能和改进。
- 要点:有关显著改进和更改,请参阅 RHEL 10.2 发行注记文档中的发行注记。
- 列表:现有数据库服务器在 RHEL 10 上使用 PostgreSQL 16。
- 列表:主机在磁盘上有足够的可用空间,存放 /var/lib/pgsql/ 目录。 例如,如果目录的大小是 10 GiB,则至少需要 10 GiB 额外可用磁盘空间。
- 列表:显示当前数据页面校验和状态: # pg_controldata /var/lib/pgsql/data | grep "Data page checksum" Data page checksum version: 0 如果命令返回 0, 则数据页面校验和被禁用。
- 列表:停止 postgresql 服务: # systemctl stop postgresql
- 列表:如果禁用了数据页面校验和,请确定策略: 如果要在升级前启用数据页面校验和来提高数据完整性: 启用数据页面校验和: # pg_checksums --enable -D /var/lib/pgsql/data/ 根据数据库的大小,此操作可能需要大量时间。 验证激活: # pg_controldata /var/lib/pgsql/data | grep "Data page checksum" Data page checksum version: 1 如果要使数据页面校验和被禁用,请将 PGSETUP_INITDB_OPTIONS 环境选项设置为 --no-data-checksums : # export PGSETUP_INI…
- 列表:如果要在升级前启用数据页面校验和来提高数据完整性: 启用数据页面校验和: # pg_checksums --enable -D /var/lib/pgsql/data/ 根据数据库的大小,此操作可能需要大量时间。 验证激活: # pg_controldata /var/lib/pgsql/data | grep "Data page checksum" Data page checksum version: 1
- 命令/配置摘录:
# pg_controldata /var/lib/pgsql/data | grep "Data page checksum"
Data page checksum version: 0- 注意:重要 在继续操作前,仔细检查所提议的 dnf 事务。确保之前版本中的每个软件包都被替换为其在新版本中的等效软件包。如果安装列表不完整,-- allowerasing 选项可能会导致意外删除软件包,这可能会删除超过其安装的软件。
- 注意:重要 pg_upgrade 工具只迁移数据库,而不迁移配置文件。迁移后,/var/lib/pgsql/data/ 仅包含默认的 .conf 文件。如果您之前有自定义配置文件,请从 /var/lib/pgsql/data-old/ 目录中复制它们,并确保它们与新的 PostgreSQL 版本兼容。
完整目录
- 在数据库服务器上安装、配置、备份和迁移数据
- 对红帽文档提供反馈
- 第 1 章 使用 MariaDB
- 1.1. 安装 MariaDB
- 1.2. 使用容器在单个主机上运行多个 MariaDB 和 MySQL 实例
- 1.3. 配置对 MariaDB 的网络访问
- 1.4. 在 MariaDB 服务器上设置 TLS 加密
- 1.4.1. 将 CA 证书、服务器证书和私钥放在 MariaDB 服务器上
- 1.4.2. 在 MariaDB 服务器上配置 TLS 加密
- 1.4.3. MariaDB 服务器上特定的用户帐户需要 TLS 加密连接
- 1.5. 将 MariaDB 客户端配置为默认使用 TLS 加密
- 1.6. 使用逻辑转储备份和恢复 MariaDB 数据
- 1.6.1. 使用 mariadb-dump执行逻辑备份
- 1.6.2. 以 SQL 格式从转储中恢复 MariaDB 数据
- 1.7. 使用物理副本备份和恢复 MariaDB 数据
- 1.7.1. 使用 mariabackup执行物理在线备份
- 1.7.2. 使用 mariabackup恢复数据
- 1.7.3. 对 MariaDB 服务器执行文件系统备份
- 1.7.4. 在 MariaDB 服务器上恢复文件系统备份
- 1.8. 使用 Galera 复制 MariaDB
- 1.8.1. MariaDB Galera 集群介绍
- 1.8.2. 构建 MariaDB Galera 集群的组件
- 1.8.3. 部署 MariaDB Galera 集群
- 1.8.4. 检查 MariaDB Galera 集群的状态
- 1.8.5. 在 MariaDB Galera 集群中添加新节点
- 1.8.6. 重启 MariaDB Galera 集群
- 1.9. 将 MariaDB 实例从之前的 RHEL 版本迁移到 RHEL 10 上的 MariaDB 10.11
- 1.10. 从 MariaDB 10.11 的 RHEL 10 版本升级到 MariaDB 11.8
- 第 2 章 使用 MySQL
- 2.1. 安装 MySQL
- 2.2. 使用容器在单个主机上运行多个 MariaDB 和 MySQL 实例
- 2.3. 配置对 MySQL 的网络访问
- 2.4. 在 MySQL 服务器上设置 TLS 加密
- 2.4.1. 将 CA 证书、服务器证书和私钥放在 MySQL 服务器上
- 2.4.2. 在 MySQL 服务器上配置 TLS 加密
- 2.4.3. MySQL 服务器上的特定用户帐户需要 TLS 加密连接
- 2.5. 将 MySQL 客户端配置为默认使用 TLS 加密
- 2.6. 使用逻辑转储备份和恢复 MySQL 数据
- 2.6.1. 使用 mysqldump执行逻辑备份
- 2.6.2. 以 SQL 格式从转储中恢复 MySQL 数据
- 2.7. 使用物理副本备份和恢复 MySQL 数据
- 2.7.1. 在 MySQL 服务器上执行文件系统备份
- 2.7.2. 在 MySQL 服务器上恢复文件系统备份
- 2.8. 复制具有 TLS 加密的 MySQL
- 2.8.1. 配置 MySQL 源服务器
- 2.8.2. 配置 MySQL 副本服务器
- 2.8.3. 在 MySQL 源服务器上创建复制用户
- 2.8.4. 将 MySQL 副本服务器连接到源服务器
- 2.8.5. 验证 MySQL 服务器上的复制
- 2.9. 在 RHEL 10 上将 MySQL 实例从以前的 RHEL 版本迁移到 MySQL 8.4
- 第 3 章 使用 PostgreSQL
- 3.1. 安装 PostgreSQL
- 3.2. 使用容器在单个主机上运行多个 PostgreSQL 实例
- 3.3. 创建 PostgreSQL 用户
- 3.4. 配置 PostgreSQL
- 3.5. 在 PostgreSQL 服务器上配置 TLS 加密
- 3.6. 使用逻辑转储备份和恢复 PostgreSQL 数据
- 3.6.1. SQL 转储的优点和缺陷
- 3.6.2. 使用 pg_dump备份单个 PostgreSQL 数据库
- 3.6.3. 使用 pg_dump恢复单个 PostgreSQL 数据库
- 3.6.4. 使用 pg_dumpall备份 PostgreSQL 服务器上的所有数据库
- 3.6.5. 使用 pg_dumpall在 PostgreSQL 服务器上恢复所有数据库
- 3.6.6. 在恢复过程中处理 SQL 错误
- 3.7. 使用物理副本备份和恢复 PostgreSQL 数据
- 3.7.1. 在 PostgreSQL 服务器上执行文件系统备份
- 3.7.2. 在 PostgreSQL 服务器上恢复文件系统备份
- 3.8. 使用持续归档备份和恢复 PostgreSQL 数据
- 3.8.1. 持续归档的优点和缺陷
- 3.8.2. 设置 WAL 归档
- 3.8.3. 进行基础备份
- 3.8.4. 使用持续归档备份恢复数据库
- 3.9. 直接将 PostgreSQL 数据库从一个服务器传输到另一个服务器
- 3.10. 在 RHEL 10 上将 PostgreSQL 实例从以前的 RHEL 版本迁移到 PostgreSQL
- 3.10.1. 使用备份和恢复方法迁移到 RHEL 10 上的 PostgreSQL
- 3.10.2. 使用 pg_update 将以前 RHEL 版本的 PostgreSQL 13 迁移到 RHEL 10 上的 PostgreSQL 16
- 3.11. 从 PostgreSQL 16 的 RHEL 10 版本升级到 PostgreSQL 18
