华为云RDS-MariaDB对接使用全流程与SQL语法实战指南
1. 认识华为云RDS for MariaDB
云数据库RDS for MariaDB是华为云基于开源MariaDB打造的一款稳定可靠、可弹性伸缩的在线关系型数据库服务。MariaDB作为MySQL源代码的一个分支,由开源社区维护,采用GPL授权许可。MariaDB完全兼容MySQL,包括API和命令行,使其能够轻松成为MySQL的替代品。在存储引擎方面,MariaDB使用XtraDB来代替MySQL的InnoDB,而XtraDB完全兼容InnoDB,创建一个InnoDB表内部默认会转换成XtraDB。对于前端应用(如PHP、Perl、Python、Java、.NET、MyODBC、Ruby、MySQL C connector)来说,几乎感觉不到任何不同。
华为云RDS for MariaDB具有完善的性能监控体系和多重安全防护措施,并提供专业的数据库管理平台。它支持即开即用、弹性伸缩、便捷管理等特性。RDS for MariaDB完全兼容RDS for MySQL,在一些常见的增删改查操作中完全兼容,但如果涉及MariaDB新特性,两者可能存在差异,需要通过POC测试来确保正确性。
2. 对接前的准备工作
在使用华为云RDS for MariaDB之前,需要完成一系列准备工作。首先需要注册华为账号并开通华为云服务。购买实例前需要确保账户有足够金额。
如果需要对接入用户进行精细的权限管理,应使用统一身份认证服务(IAM)创建IAM用户及用户组,并授予相应的操作权限。通过IAM,可以根据企业的业务组织,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证并使用RDS资源。同时可以根据企业用户的职能设置不同的访问权限,实现用户之间的权限隔离。如果华为云账号已经能满足要求,不需要创建独立的IAM用户,可以跳过此步骤。
IAM授权的基本流程是:先在IAM控制台创建用户组并授予RDS权限(例如“RDS ReadOnlyAccess”只读权限),然后创建用户并将其加入该用户组。新创建的用户登录控制台后,可以在授权区域验证权限是否生效。如果系统预置的RDS权限不满足授权要求,还可以创建自定义策略。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
3. 购买RDS for MariaDB实例
3.1 进入购买页面
登录华为云管理控制台后,在页面左上角选择区域和项目。单击页面左上角的服务列表图标,选择“数据库 > 云数据库 RDS”。进入RDS管理页面后,单击“购买数据库实例”进入自定义购买页面。
3.2 基础配置
在自定义购买页面,首先需要选择计费模式。RDS for MariaDB支持“包年/包月”和“按需计费”两种模式。包年/包月是一种预付费模式,先付费再使用,按照订单的购买周期进行结算,购买周期越长享受的折扣越大,适用于需求量长期稳定的成熟业务。按需计费是一种后付费模式,先使用再付费,秒级计费,每小时扣费一次,不足一小时按照实际使用时长收费,允许根据实际业务需求灵活调整资源使用,无需提前预置资源。
接下来选择数据库引擎为“MariaDB”,并选择数据库版本(不同区域所支持的数据库版本不同,以实际界面为准)。实例类型可选择“主备”或“单机”。主备实例采用一主一备的经典高可用架构,主备实例的每个节点规格保持一致,备机提高了实例的可靠性。单机实例采用单个数据库节点部署架构,具有高性价比,适用于个人学习、微型网站以及中小企业的开发测试环境。
存储类型可选择SSD云盘或极速型SSD。SSD云盘实现了计算与存储分离,最大吞吐量350 MB/s。极速型SSD结合25GE网络和RDMA技术,提供单盘最大吞吐量达1000 MB/s并具有亚毫秒级低时延性能。可用区指在同一区域下电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。RDS支持在同一个可用区内或者跨可用区部署数据库主备实例,以提供故障切换能力和高可用性。
3.3 实例选配
性能规格决定实例的CPU和内存大小,不同性能规格对应不同连接数和最大IOPS。实例创建成功后还可以进行规格变更。存储空间支持40GB到4000GB,用户选择容量大小必须为10的整数倍。数据库创建成功后也可以进行扩容。如果存储类型为SSD云盘或极速型SSD,还可以设置存储空间自动扩容,当存储空间可用率过低时会自动扩容存储空间。
网络配置方面需要选择VPC和子网。创建实例时RDS会自动配置内网地址,也可以输入子网号段内未使用的内网地址,目前仅支持设置IPv4地址。子网在可用区内才会有效,创建RDS for MariaDB实例的子网默认开启DHCP功能,不可关闭。
3.4 参数模板
数据库参数模板就像是数据库引擎配置值的容器,参数模板中的参数可应用于一个或多个相同类型的数据库实例。创建数据库实例时可以指定数据库参数模板为默认参数模板或已有参数模板。对于HA实例创建成功后,主备参数模板相同。实例创建成功后,参数模板也可进行修改。每个用户最多可以创建100个RDS for MariaDB参数模板,各RDS for MariaDB引擎共享该配额。
完成所有配置后,单击“立即购买”即可创建实例。
4. 连接RDS for MariaDB实例
华为云RDS for MariaDB提供三种主要的连接方式:数据管理服务DAS、MySQL命令行客户端和JDBC。
4.1 通过DAS连接(推荐)
数据管理服务(Data Admin Service,简称DAS)是一款专业的简化数据库管理工具,提供优质的可视化操作界面,大幅提高工作效率,让数据管理变得既安全又简单。云数据库RDS服务默认为您开通了远程主机登录权限,推荐您使用更安全便捷的数据管理服务连接实例。
通过DAS连接的具体操作是:登录管理控制台,选择“数据库 > 数据管理服务 DAS”,进入DAS管理页面。在DAS中选择对应的RDS for MariaDB实例,即可通过可视化的SQL窗口执行各种数据库操作。DAS支持用户添加常用的SQL以及查看和管理SQL语句。建议打开SQL提示开关,用户在SQL窗口输入语句时可以帮助用户快速输入库名、表名、字段名称等信息。
4.2 通过MySQL命令行客户端连接
RDS实例购买完成后,可以先登录到Linux弹性云服务器,在ECS上安装MariaDB客户端,然后执行MariaDB命令行通过内网IP连接到实例。操作流程分为四个步骤:
准备工作:注册华为账号并开通华为云、实名认证、账户充值,以及对RDS进行精细权限管理。
步骤1:购买RDS for MariaDB实例。选择RDS for MariaDB的基础配置和高级配置信息,购买数据库实例。
步骤2:购买ECS。通过MariaDB客户端连接数据库实例时,必须先准备一台服务器,在服务器上安装MariaDB客户端并执行连接命令。购买Linux ECS,并确认ECS实例与RDS for MariaDB实例在同一区域、同一VPC内。
步骤3:测试连通性并安装MariaDB客户端。测试ECS到RDS for MariaDB实例内网IP和端口的网络连通性,并在ECS上安装MariaDB客户端。
步骤4:使用命令行连接实例。使用命令行通过内网IP和端口连接RDS for MariaDB实例。
具体的连接命令格式如下:
mysql -h <内网地址> -P <端口号> -u <用户名> -p其中内网地址可以在实例“概览”或“连接管理”页面的“连接信息”区域查看。
如果无法通过内网IP地址访问RDS实例,可以使用公网访问方式。公网访问需要为实例绑定弹性公网IP,并设置安全组规则开放相应端口。RDS提供两种连接方式:非SSL连接和SSL连接。SSL连接实现了数据加密功能,具有更高的安全性。RDS for MariaDB新实例默认关闭SSL数据加密,开启SSL需要参考设置SSL数据加密。SSL连接实现了数据加密功能,但同时也会增加网络连接响应时间和CPU消耗,不建议在不需要加密的场景下开启SSL数据加密。
4.3 通过JDBC连接
通过JDBC连接RDS for MariaDB数据库实例是最常用的应用程序接入方式。JDBC连接格式如下:
jdbc:mysql://<instance_ip>:<instance_port>/<database_name>其中instance_ip是实例的内网地址,instance_port是数据库端口,database_name是连接实例使用的数据库名。
通过JDBC连接实例包括两种方式:无需下载SSL证书和需下载SSL证书。使用SSL证书连接经过了加密功能,具有更高的安全性。
以下是完整的Java代码示例(非SSL连接):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RDSMariaDBExample {
public static void main(String[] args) {
String url = "jdbc:mysql://192.168.0.10:3306/mydatabase";
String user = "root";
String password = "your_password";
try {
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()");
if (rs.next()) {
System.out.println("Database version: " + rs.getString(1));
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}如果需要使用SSL连接,需要先下载SSL证书,然后在JDBC URL中添加SSL参数:
jdbc:mysql://192.168.0.10:3306/mydatabase?useSSL=true&trustCertificateKeyStoreUrl=file:/path/to/truststore4.4 安全组设置
为了保障数据库的安全性和稳定性,在使用RDS数据库实例之前需要设置安全组,开通需访问数据库的IP地址和端口。默认情况下,一个用户可以创建100个安全组。默认情况下,一个安全组最多只允许拥有50条安全组规则。目前一个RDS实例允许绑定多个安全组,一个安全组可以关联多个RDS实例。
5. 数据库与账号管理
5.1 创建数据库
在RDS for MariaDB实例中创建数据库可以通过DAS控制台或SQL命令完成。创建数据库的SQL语法如下:
CREATE DATABASE database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];示例:
CREATE DATABASE myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;5.2 账号管理
RDS for MariaDB支持创建非管理员权限的数据库账号。创建数据库账号的SQL语法:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';授予权限的语法:
GRANT privilege1, privilege2, ...
ON database_name.table_name
TO 'username'@'host';示例:
CREATE USER 'appuser'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT SELECT, INSERT, UPDATE, DELETE
ON myapp.*
TO 'appuser'@'%';
FLUSH PRIVILEGES;数据库账号管理还支持重置密码、修改权限、修改主机IP以及删除账号等操作。
6. SQL语法与常用操作
RDS for MariaDB的SQL语法与MySQL完全兼容。以下列举常用的SQL操作示例。
6.1 表操作
创建表的语法:
CREATE TABLE table_name (
column1 datatype [constraints],
column2 datatype [constraints],
...
[table_constraints]
) ENGINE=InnoDB;示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;修改表结构:
ALTER TABLE users ADD COLUMN age INT DEFAULT 0;
ALTER TABLE users DROP COLUMN age;
ALTER TABLE users MODIFY COLUMN email VARCHAR(200);删除表:
DROP TABLE table_name;6.2 数据操作
插入数据:
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
INSERT INTO users (username, email) VALUES
('alice', 'alice@example.com'),
('bob', 'bob@example.com');查询数据:
SELECT * FROM users WHERE id = 1;
SELECT username, email FROM users ORDER BY created_at DESC LIMIT 10;
SELECT COUNT(*) AS total FROM users;更新数据:
UPDATE users SET email = 'newemail@example.com' WHERE id = 1;删除数据:
DELETE FROM users WHERE id = 1;
-- 删除所有数据但保留表结构
TRUNCATE TABLE users;6.3 索引操作
创建索引:
CREATE INDEX idx_username ON users(username);
CREATE UNIQUE INDEX idx_email ON users(email);删除索引:
DROP INDEX idx_username ON users;6.4 存储过程与函数
RDS for MariaDB支持存储过程和函数。存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发工作,减少数据在数据库和应用服务器之间的传输,提高数据处理效率。
创建存储过程示例:
DELIMITER //
CREATE PROCEDURE GetUserById(IN userId INT)
BEGIN
SELECT * FROM users WHERE id = userId;
END //
DELIMITER ;调用存储过程:
CALL GetUserById(1);创建函数示例:
DELIMITER //
CREATE FUNCTION CountUsers() RETURNS INT
DETERMINISTIC
BEGIN
DECLARE userCount INT;
SELECT COUNT(*) INTO userCount FROM users;
RETURN userCount;
END //
DELIMITER ;调用函数:
SELECT CountUsers();6.5 事务操作
START TRANSACTION;
UPDATE users SET email = 'temp@example.com' WHERE id = 1;
UPDATE users SET email = 'final@example.com' WHERE id = 1;
COMMIT;
-- 或回滚
ROLLBACK;7. 备份与恢复
云数据库RDS for MariaDB支持使用已有的自动备份和手动备份将实例数据恢复到备份被创建时的状态。
7.1 备份类型
按照数据量分为全量备份和增量备份。全量备份是对当前状态下的数据库实例中的所有数据进行一次完整的备份。用户可在任意时刻使用全量备份恢复创建备份时的完整数据。自动备份和手动备份都属于全量备份。开启自动备份策略后,会自动触发一次全量备份,备份方式为物理备份。之后会按照策略中的备份时间段和备份周期进行全量备份。系统根据指定的备份保留期保存数据库实例的自动备份。
7.2 手动备份
在“实例管理”页面选择指定的实例,在操作列选择“创建手动备份”即可。
7.3 数据恢复
恢复操作可以在“备份管理”页面选择需要恢复的备份,单击操作列的“恢复”。也可以在“实例管理”页面单击指定的实例名称,在左侧导航栏单击“备份恢复”,在“全量备份”页签下单击目标备份对应的操作列中的“恢复”。
云数据库RDS支持将备份恢复至新实例、当前实例和已有实例。也支持将实例恢复到指定时间点。对于误删除的实例,通过数据库回收站中重建实例功能可以恢复1到7天内删除的实例。
如果需要将本地数据库迁移至RDS,可以采用数据复制服务DRS的迁移功能,将数据库备份恢复至RDS。DRS支持将MariaDB同步到MariaDB。DRS接收到的源数据库Binlog日志中保存的是原始的执行SQL语句,这些SQL语句将会直接在目标数据库中执行。
8. 只读实例与读写分离
只读实例为单个物理节点的架构(没有备节点),采用MariaDB的原生复制功能将主实例的更改同步到所有只读实例,主实例和只读实例之间的数据同步不受网络延时的影响。一个主实例最多可以创建5个只读实例。如果需要创建更多只读实例可以提交工单申请,最多可以创建10个只读实例。不支持单独购买只读实例,需要购买主实例后才能购买只读实例。一次最多可以选择50个主实例进行批量创建只读。只读实例跟主实例在同一区域。
创建只读实例的操作:在“实例管理”页面选择指定的实例,单击操作列的“更多 > 创建只读”进入创建只读页面。
9. 监控与告警
RDS与云监控服务CES配合,实时监控账户中的实例,并根据设置报告告警和发送通知。用户可以实时获取实例的运行指标和存储使用情况等详细信息。
用户需要重点关注的监控指标有:CPU利用率、内存利用率、磁盘空间利用率。可以根据实际应用场景配置告警提示,当收到告警时可采取相应措施消除告警。告警策略中,是否触发告警取决于连续周期的数据是否达到阈值。例如CPU使用率监控周期为5分钟,连续三个周期平均值大于等于80%,则触发告警。
设置告警规则的操作路径:在服务列表中选择“管理与监管 > 云监控服务 CES”进入云监控服务页面,选择“告警 > 告警规则”进行设置。
10. 实例运维管理
10.1 参数修改
实例创建成功后可以修改参数模板。如果在实例详情页面的“参数修改”页修改当前实例的参数模板,更改动态参数并保存时系统将立即应用更改。当更改静态参数并保存数据库参数模板时,需要重启实例才能生效。在“参数管理”页面修改自定义参数模板时,需执行“应用”操作才会对实例生效。
10.2 规格变更
实例创建成功后可进行规格变更。存储空间支持扩容。
10.3 其他运维操作
RDS for MariaDB还支持升级内核小版本、修改实例名称、修改实例备注、修改数据同步方式、切换主备实例的可用性策略、开启或关闭事件定时器等操作。
11. 常见问题解答
问1:RDS for MariaDB与RDS for MySQL有什么区别?
答:MariaDB是MySQL源代码的一个分支,完全兼容MySQL,包括API和命令行。在存储引擎方面使用XtraDB代替InnoDB,但XtraDB完全兼容InnoDB。对于前端应用来说几乎感觉不到任何不同。
问2:如何选择RDS for MariaDB的实例类型?
答:主备实例采用一主一备的高可用架构,适用于生产环境。单机实例采用单个节点部署,具有高性价比,适用于个人学习、微型网站以及中小企业的开发测试环境。
问3:RDS for MariaDB支持哪些连接方式?
答:支持三种连接方式:数据管理服务DAS(推荐)、MySQL命令行客户端、JDBC。
问4:如何保障RDS for MariaDB的数据安全?
答:可以通过IAM进行精细的权限管理、设置安全组规则限制访问IP和端口、开启SSL数据加密、配置自动备份策略等方式保障数据安全。
问5:一个RDS for MariaDB主实例最多可以创建多少个只读实例?
答:默认最多可以创建5个只读实例。提交工单申请后最多可以创建10个只读实例。
问6:RDS for MariaDB的备份如何恢复?
答:可以在“备份管理”页面选择需要恢复的备份单击“恢复”,也可以在实例的“备份恢复”页面操作。支持恢复到新实例、当前实例和已有实例。误删除的实例可以通过回收站重建功能恢复1到7天内删除的实例。



