华为云云数据库 RDS for MariaDB 从零到一:购买、连接、Python实战与生产级运维指南
1. 云数据库 RDS for MariaDB 概览与选型
华为云云数据库 RDS for MariaDB 是一项基于开源 MariaDB 构建的在线数据库服务,它兼容 MySQL 协议,具备即开即用、稳定可靠、弹性伸缩等核心特性。与传统的自建数据库相比,RDS for MariaDB 免去了底层硬件采购、软件安装、补丁升级等繁琐的运维工作,让开发者能够更加专注于业务逻辑的实现。
在实例类型的选择上,华为云提供了主备与单机两种架构。主备实例采用一主一备的高可用架构,当主节点发生故障时,系统会自动切换到备节点,确保业务连续性不受影响,非常适合生产环境的核心业务。单机实例则仅包含一个数据库节点,具有更高的性价比,适用于个人学习、微型网站以及中小企业的开发测试环境。需要说明的是,无论选择哪种部署架构,RDS 都会自动将主实例和备实例分布到不同的物理机上,从物理层面保障数据的可靠性。
存储类型方面,华为云 RDS for MariaDB 提供了 SSD 云盘和极速型 SSD 两种选择。SSD 云盘实现了计算与存储分离,最大吞吐量可达 350 MB/s;而极速型 SSD 则结合了 25GE 网络和 RDMA 技术,能够提供单盘最大吞吐量 1000 MB/s 以及亚毫秒级的低时延性能,适合对 IO 性能有极致要求的场景。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 购买 RDS for MariaDB 实例
2.1 计费模式解析
华为云 RDS for MariaDB 支持包年/包月和按需计费两种计费模式。包年/包月是一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大,非常适合需求量长期稳定的成熟业务。按需计费则是一种后付费模式,秒级计费,按小时结算,允许用户根据实际业务需求灵活调整资源使用,无需提前预置资源,能够有效降低预置过多或不足的风险。此外,两种计费模式之间支持相互转换,用户可以根据业务发展阶段灵活调整。
2.2 购买操作步骤
购买 RDS for MariaDB 实例的操作非常简单,具体步骤如下:
- 登录华为云管理控制台,在服务列表中选择“数据库 > 云数据库 RDS”,进入云数据库 RDS 信息页面。
- 单击“购买数据库实例”,进入自定义购买页面。
- 在基础配置区域,选择目标区域。需要特别注意的是,不同区域内的产品内网不互通,且创建后不能更换,请根据业务就近原则谨慎选择。
- 选择计费模式(包年/包月或按需计费),并配置数据库引擎为 MariaDB、数据库版本(如 10.5)。
- 选择实例类型(主备或单机)、存储类型(SSD 云盘或极速型 SSD)以及可用区。如果选择主备实例,建议将主备节点部署在不同的可用区,以实现跨可用区的高可用容灾。
- 在实例选配区域,根据业务预估的并发连接数和 IOPS 需求选择合适的性能规格。
- 配置完成后,单击“立即购买”,按照提示完成支付即可。
3. 连接 RDS for MariaDB 实例的三种方式
华为云 RDS for MariaDB 提供了三种主流的连接方式,以满足不同场景下的数据库访问需求。
3.1 通过数据管理服务 DAS 连接(推荐)
数据管理服务(Data Admin Service,简称 DAS)是一款专业的简化数据库管理工具,提供优质的可视化操作界面,能够大幅提高工作效率。云数据库 RDS 服务默认为用户开通了远程主机登录权限,推荐使用 DAS 连接实例,这种方式兼具安全性与便捷性。
通过 DAS 连接实例的操作步骤如下:
- 登录华为云管理控制台,选择“数据库 > 云数据库 RDS”。
- 在“实例管理”页面,找到目标实例,单击操作列中的“登录”按钮,进入数据管理服务的“实例登录”界面。
- 正确输入数据库的用户名和密码,单击“测试连接”验证网络连通性。
- 连接成功后,单击“登录”即可进入数据库管理界面,执行 SQL 查询、数据导入导出、表结构设计等操作。
3.2 通过 MariaDB 客户端连接(命令行方式)
对于习惯使用命令行的开发者或运维人员,可以通过 MariaDB 官方客户端工具从弹性云服务器(ECS)连接到 RDS for MariaDB 实例。这种方式适合批量脚本执行、自动化运维等场景。
操作流程如下:
- 购买一台 Linux 弹性云服务器(ECS),并确保该 ECS 与 RDS for MariaDB 实例处于同一区域、同一 VPC 内。
- 确认 ECS 实例处于 RDS 实例所属安全组允许访问的范围内。如果安全组规则不允许访问,需要添加相应的入方向规则。
- 在 ECS 上安装 MariaDB 客户端。建议下载的 MariaDB 客户端版本高于已创建的 RDS 实例的数据库版本。
- 使用以下命令通过内网 IP 和端口连接 RDS for MariaDB 实例:
mysql -h <内网IP地址> -P <端口号> -u <用户名> -p输入密码后即可进入 MariaDB 命令行界面,执行 SQL 语句。
3.3 通过公网连接(绑定弹性公网 IP)
当无法通过内网 IP 地址访问 RDS 实例时,可以使用公网访问方式。这种方式需要为 RDS 实例绑定一个弹性公网 IP(EIP),然后通过公网地址进行连接。需要注意的是,只有主实例和只读实例才能绑定弹性公网 IP,且绑定后也可以根据需要解绑。公网连接存在一定的安全风险,建议仅在测试或临时访问场景下使用,生产环境应优先使用内网连接。
4. 使用 Python 连接 RDS for MariaDB
在实际的应用开发中,通过编程语言连接数据库是最常见的场景。下面以 Python 为例,介绍如何使用 PyMySQL 和 SQLAlchemy 两种方式连接华为云 RDS for MariaDB 实例。
4.1 使用 PyMySQL 连接
PyMySQL 是 Python 中一个纯 Python 实现的 MySQL/MariaDB 客户端库,兼容 DB-API 2.0 规范,使用非常广泛。
首先安装 PyMySQL:
pip install pymysql以下是使用 PyMySQL 连接 RDS for MariaDB 并执行基本 CRUD 操作的示例代码:
import pymysql
# 数据库连接配置
config = {
'host': 'your-rds-mariadb-internal-ip', # RDS 内网 IP 地址
'port': 3306, # 数据库端口,默认为 3306
'user': 'your_username', # 数据库用户名
'password': 'your_password', # 数据库密码
'database': 'your_database', # 数据库名称
'charset': 'utf8mb4' # 字符集
}
try:
# 建立连接
connection = pymysql.connect(**config)
with connection.cursor() as cursor:
# 创建表示例
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# 插入数据
cursor.execute(
'INSERT INTO users (name, email) VALUES (%s, %s)',
('张三', 'zhangsan@example.com')
)
# 提交事务
connection.commit()
# 查询数据
cursor.execute('SELECT * FROM users')
results = cursor.fetchall()
for row in results:
print(f'ID: {row[0]}, Name: {row[1]}, Email: {row[2]}')
except pymysql.MySQLError as e:
print(f'数据库操作失败: {e}')
finally:
if connection:
connection.close()4.2 使用 SQLAlchemy ORM 连接
SQLAlchemy 是 Python 中最流行的 ORM(对象关系映射)框架,支持多种数据库后端,能够帮助开发者以面向对象的方式操作数据库。
首先安装 SQLAlchemy 和 PyMySQL(作为驱动):
pip install sqlalchemy pymysql以下是使用 SQLAlchemy 连接 RDS for MariaDB 的示例:
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime
# 数据库连接字符串
# 格式: mysql+pymysql://用户名:密码@主机:端口/数据库名?charset=utf8mb4
DATABASE_URL = (
'mysql+pymysql://your_username:your_password@your-rds-internal-ip:3306/'
'your_database?charset=utf8mb4'
)
# 创建数据库引擎
engine = create_engine(
DATABASE_URL,
pool_size=10, # 连接池大小
max_overflow=20, # 连接池最大溢出连接数
pool_recycle=3600 # 连接回收时间(秒)
)
# 创建基类和会话工厂
Base = declarative_base()
SessionLocal = sessionmaker(bind=engine)
# 定义模型
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(100), nullable=False)
email = Column(String(100), unique=True, nullable=False)
created_at = Column(DateTime, default=datetime.now)
# 创建表
Base.metadata.create_all(engine)
# 使用 ORM 操作数据库
def main():
session = SessionLocal()
try:
# 创建新用户
new_user = User(name='李四', email='lisi@example.com')
session.add(new_user)
session.commit()
# 查询所有用户
users = session.query(User).all()
for user in users:
print(f'ID: {user.id}, Name: {user.name}, Email: {user.email}')
except Exception as e:
session.rollback()
print(f'操作失败: {e}')
finally:
session.close()
if __name__ == '__main__':
main()在生产环境中,建议将数据库连接信息配置在环境变量或配置文件中,避免硬编码在代码中。同时,合理配置连接池参数(如 pool_size、max_overflow、pool_recycle)能够有效提升数据库连接的复用效率,避免连接泄漏。
5. 性能优化与调优
5.1 核心参数调优
RDS for MariaDB 的性能与数据库参数配置密切相关。华为云 RDS 控制台提供了参数管理功能,用户可以修改自定义参数模板中的参数值来优化数据库性能。
以下是一些关键参数的调优建议:
- innodb_buffer_pool_size:这是 InnoDB 存储引擎最重要的参数之一,用于缓存数据和索引。建议根据业务实际情况进行调整,一般可设置为实例内存的 50% 到 70%。MariaDB 本身具有内存动态平衡机制,当该参数值低于 90% 时通常无需过度关注。
- innodb_spin_wait_delay:该参数控制 InnoDB 在等待互斥锁时的自旋延迟时间,设置不当可能导致性能变慢。建议在充分了解业务负载特征后进行调优。
- long_query_time:该参数用于定义慢查询的阈值,精度可达微秒级别,默认为 15 秒。建议根据业务对响应时间的要求适当调低该值,以便及时发现性能瓶颈。
- SQL 审计开关:RDS for MariaDB 默认关闭 SQL 审计功能,开启后可能会对性能产生一定影响。建议仅在需要审计时开启,并在完成审计后及时关闭。
5.2 慢 SQL 问题定位
慢 SQL 是数据库性能问题的主要来源之一。导致慢 SQL 的原因有很多,例如库表结构设计不合理、索引缺失、扫描行数过多等。华为云 RDS 控制台提供了慢日志查询功能,用户可以在慢日志页面下载并查看执行缓慢的 SQL 语句及其执行耗时信息。
定位慢 SQL 的一般思路如下:
- 查看云数据库 RDS 的 CPU 使用率、内存利用率、磁盘空间利用率等监控指标,确认是否存在资源瓶颈。
- 如果资源使用率各项指标都接近 100%,说明实例可能到达了瓶颈,建议升级实例规格。
- 如果资源使用率正常,则重点关注慢日志中的 SQL 语句,分析是否存在缺失索引、全表扫描等问题。
- 对于复杂的查询语句,可以使用 EXPLAIN 命令分析执行计划,优化索引设计或改写 SQL。
5.3 读写分离与只读实例
在对数据库有少量写请求但有大量读请求的应用场景下,单个实例可能无法抵抗读取压力,甚至对主业务产生影响。华为云 RDS for MariaDB 支持创建只读实例,利用 MariaDB 的原生复制功能将主实例的更改同步到所有只读实例,且主实例和只读实例之间的数据同步不受网络延时的影响。
每个 RDS for MariaDB 主备实例最多支持创建 5 个只读实例。只读实例为单个物理节点的架构(没有备节点),具有独立的连接地址。通过将读请求分流到只读实例,能够有效分担主实例的读取压力,提升整体系统的吞吐量。读写业务并发较高时,建议创建只读实例并开启读写分离。
6. 备份与恢复
6.1 备份类型与策略
华为云 RDS for MariaDB 提供了完善的备份机制,保障数据的安全性与可恢复性。
按照数据量划分,备份分为全量备份和增量备份两种类型。全量备份是对数据库所有数据进行一次完整的备份,包含自动备份和手动备份两种执行方式。增量备份则是备份某个时间段内变化的数据,系统会自动每 5 分钟或在一定数据量时对上一次自动备份或增量备份后更新的数据进行备份。
按照执行方式划分,备份分为自动备份和手动备份。自动备份由系统按照用户设置的自动备份策略自动执行,包括备份时间段、备份周期和备份保留天数。备份保留天数的设置范围为 1 到 732 天。手动备份则由用户触发产生,会一直保存直到用户手动删除。
6.2 备份与恢复的最佳实践
根据华为云官方的最佳实践建议:
- 业务高峰时执行备份可能会失败,建议手动备份选择在业务低峰期间执行,自动备份建议根据业务需要自定义备份时间段(默认自动备份时间段为 01:00-02:00)。
- 实例写入业务较多时,建议将备份策略设置为每天执行一次自动备份。
- 建议根据业务需要合理设置备份保留天数,默认保留 7 天。
- 删除实例后,自动备份的全量备份和 Binlog 备份也会随之删除。如果对数据有长期保留需求,建议在删除实例前进行手动全量备份。
- 建议自定义回收站策略,防止误删实例导致数据无法恢复。
当需要进行数据恢复时,可以通过备份文件恢复到实例上。系统会从 OBS 备份空间中将备份文件下载到实例上进行全量恢复,恢复时长和实例的数据量有关,平均恢复速率约为 40MB/s。
7. 安全管理
7.1 安全组与访问控制
安全组是一个逻辑上的分组,为同一个虚拟私有云(VPC)内具有相同安全保护需求并相互信任的弹性云服务器和云数据库 RDS 实例提供访问策略。为了保障数据库的安全性和稳定性,在使用 RDS 数据库实例之前,需要正确设置安全组规则,开通需访问数据库的 IP 地址和端口。
设置安全组规则时,需要为 RDS 所在安全组配置相应的入方向规则。安全组默认规则为出方向上数据报文全部放行,因此通常无需对 ECS 配置额外的安全组规则。目前一个 RDS 实例允许绑定多个安全组,一个安全组也可以关联多个 RDS 实例。
7.2 SSL 加密连接
为了保障数据在传输过程中的安全性,华为云 RDS for MariaDB 支持 SSL 加密连接。SSL 连接实现了数据加密功能,具有更高的安全性。在需要通过公网访问数据库,或者对数据传输安全性有严格要求的场景下,建议启用 SSL 连接。
7.3 身份认证与权限管理
华为云推荐使用统一身份认证服务(IAM)对云上资源进行精细管理。通过创建 IAM 用户及用户组,并授予具体的操作权限,可以实现最小权限原则,避免使用主账号进行日常操作带来的安全风险。例如,可以为不同团队或不同项目创建独立的 IAM 用户,并仅授予其所需的 RDS 操作权限。
在使用 RDS 过程中,如果忘记了数据库管理员账号密码,可以通过控制台重新设置密码。如果 root 账号自身出现问题(如丢失或删除),也可以通过重置密码的方法恢复 root 账号权限。
8. 监控与告警
8.1 核心监控指标
运维人员需要重点关注以下 RDS for MariaDB 监控指标:
- CPU 利用率:反映实例的计算资源使用情况。持续高 CPU 利用率可能意味着需要升级实例规格或优化 SQL 查询。
- 内存利用率:反映实例的内存资源使用情况。内存不足可能导致性能下降或 OOM(内存溢出)问题。
- 磁盘空间利用率:反映实例的存储空间使用情况。当磁盘空间写满时,数据库将无法进行写入操作。随着业务数据的增长,需要及时进行磁盘扩容。
8.2 设置告警规则
华为云云监控服务(CES)支持为 RDS for MariaDB 设置告警规则。告警规则包括告警规则名称、资源类型、维度、监控对象、监控指标、告警阈值、监控周期和是否发送通知等参数。用户可以根据实际应用场景配置告警策略,例如当 CPU 使用率连续三个周期(每个周期 5 分钟)的平均值大于等于 80% 时触发告警。当收到告警通知后,运维人员可以及时采取相应的处理措施,如升级规格、优化 SQL 或扩容磁盘。
9. 常见问题解答
问:RDS for MariaDB 和自建 MariaDB 有什么区别?
答:RDS for MariaDB 是华为云提供的托管式数据库服务,免去了底层硬件采购、软件安装、补丁升级等运维工作,同时提供了自动备份、监控告警、高可用切换等企业级特性。自建 MariaDB 则需要用户自行承担全部的运维工作,但在配置灵活性上更高。
问:如何查看 RDS for MariaDB 实例的连接数?
答:可以通过华为云 RDS 控制台的监控页面查看实例的连接数使用情况。如果连接数达到上限,需要重启实例断开空闲连接或升级实例规格。
问:RDS for MariaDB 支持哪些数据库版本?
答:不同区域所支持的数据库版本有所不同,请以实际控制台界面为准。建议在购买前查看目标区域支持的版本列表。
问:如何修改 RDS for MariaDB 的数据库端口?
答:可以在 RDS 控制台的实例详情页面修改数据库端口。需要注意的是,如果提交的数据库端口被临时占用,可能会导致实例状态异常,需要重试端口变更操作。
问:RDS for MariaDB 的自动备份文件可以手动删除吗?
答:自动备份的备份文件不支持手动删除。如果需要调整备份保留时间,可以通过修改自动备份策略中的备份保留天数来控制,超出保留天数的备份文件会被系统自动删除。
问:只读实例可以独立存在吗?
答:不可以。只读实例必须在购买主备实例或单机实例之后才能创建,不能单独存在。只读实例和主实例使用独立的 IP 连接地址。



