PolarDB数据库维护
1. 创建实验资源
在实验开始之前,您需要创建相关实验资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要5~8分钟。
2. PolarDB MySQL从表回收站中恢复误删的表
由于DDL语句无法回滚,如果误删除了表(例如DROP TABLE),可能会导致数据丢失。PolarDB MySQL提供表回收站的功能,删除的表会被临时转移到表回收站,本实验可以学习到如何从表回收站恢复误删的表。
一、修改PolarDB参数
设置集群参数recycle_bin为ON,开启表回收站功能。
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看PolarDB资源所在的地域。
- 在集群列表页面,找到您的PolarDB实例,单击实例ID。
说明:您可在云产品资源列表中查看实验室分配的PolarDB实例ID。
- 在左侧导航栏中,单击参数配置。
- 在参数配置页面,单击修改参数。
- 将loose_recycle_bin参数,修改为ON,单击提交修改。
- 在保存改动面板,单击确定。
等待loose_recycle_bin参数修改完成。
- 可通过右上角任务,查看修改参数的任务进度。
- 修改完成。
二、创建模拟数据及模拟误操作
创建数据库和数据库账号,创建模拟数据表student,并插入模拟数据,模拟误操作删除student表。
- 创建账号。
1.1 在左侧导航栏中,选中配置与管理>账号管理。在账号管理页面,单击创建账号。
1.2 在创建账号面板,账号名为testuser,账号类型为高权限账号,密码为1234@abc,单击确定。
1.3 创建完成。
- 创建数据库。
2.1 在左侧导航栏中,选中配置与管理>数据库管理。在数据库管理页面,单击创建数据库。
2.2 在创建数据库面板,数据库名称为dbtest,支持字符集为utf8mb4,单击确定。
3.3 创建完成。
- 登录数据库。
3.1 在数据库管理页面,单击上方的登录数据库。
3.2 在登陆实例对话框中,输入数据库账号为testuser,密码为1234@abc,单击测试连接。
3.3 测试连接成功后,单击登录。
- 创建模拟数据。
4.1 在场景引导页面,单击左侧的数据库实例,在已登录实例中,找到实验室分配的PolarDB数据库,双击dbtset数据库。
说明:您可在云产品资源列表中查看实验室分配的PolarDB数据库资源。
4.2 在SQL Console页签中,输入如下SQL语句,单击执行,创建一个名为students的表。
CREATE TABLE students ( id INT4, name VARCHAR(10), grade INT4, class INT4 );
4.3 在SQL Console页签中,输入如下SQL语句,单击执行,在students表中插入基础数据。
INSERT INTO students(id,name,grade,class) values (1,'Nick',5,4),(2,'Joy',4,3),(3,'Lucy',3,2),(4,'Lulu',6,1),(5,'Merry',2,4),(6,'Jason',1,5);
4.4 模拟误删除操作,在SQL Console页签中,输入如下SQL语句,单击执行,误删除了students表。
DROP TABLE students;
三、查看回收站中所有临时保存的表
查看回收站中所有临时保存的表。
- 在SQL Console页签中,输入如下SQL语句,单击执行,查看该集群的回收站中所有临时保存的表。
CALL DBMS_RECYCLE.show_tables();
返回结果如下图所示。
返回结果中的参数说明如下:
参数 |
说明 |
SCHEMA |
回收站的Schema。 |
TABLE |
进入回收站后的表名。 |
ORIGIN_SCHEMA |
原始表的Schema。 |
ORIGIN_TABLE |
原始表的表名。 |
RECYCLED_TIME |
回收时间。 |
PURGE_TIME |
预计在回收站中被清理的时间。 |
四、快速恢复回收站内的某张表
快速恢复回收站内的表,其中的语法为:
CALL DBMS_RECYCLE.restore_table('RECYCLE_TABLE','DEST_DB','DEST_TABLE');
该语句中的参数说明如下:
参数 |
说明 |
RECYCLE_TABLE |
需要恢复的表进入回收站后的表名,即上一步骤查询结果的Table列。 |
DEST_DB |
为恢复后的表指定目标数据库。 |
DEST_TABLE |
为恢复后的表指定新的表名。 |
说明:语法仅供学习,请勿执行。在本实验中操作如何恢复回收站内的表的SQL示例,请参考下方。
- 在SQL Console页签中,输入如下SQL语句,单击执行,快速恢复回收站内的表。
说明:您需要将RECYCLE_TABLE改为在上一步骤中(三、查看回收站中所有临时保存的表)查询结果的Table列,例如刚刚查询的Table列是__innodb_1077。
CALL DBMS_RECYCLE.restore_table('RECYCLE_TABLE','dbtest','new_students');
- 执行成功。
五、验证数据
当库表恢复完成后,进行数据比对,验证数据。
- 执行如下语句,进行验证。
SELECT * FROM `new_students`;
- 如下图所示,恢复成功。
3. PolarDB MySQL误操作后恢复库表数据
PolarDB MySQL 5.6版本提供库表恢复功能,可将目标库或表恢复到日志保存期限内的任意时间点。
一、创建模拟数据
在PolarDB MySQL集群中,创建模拟数据及模拟误操作。
- 在SQL Console页签中,输入如下SQL语句,单击执行,创建一个名为students的表。
CREATE TABLE students ( id INT4, name VARCHAR(10), grade INT4, class INT4 );
- 在SQL Console页签中,输入如下SQL语句,单击执行,在students表中插入基础数据。
INSERT INTO students(id,name,grade,class) values (1,'Nick',5,4),(2,'Joy',4,3),(3,'Lucy',3,2),(4,'Lulu',6,1),(5,'Merry',2,4),(6,'Jason',1,5);
二、手动备份
- 在PolarDB控制台的左侧导航栏中,选择配置与管理>备份恢复。
- 在数据备份列表,单击创建备份。
- 在创建备份对话框中,单击确定。
- 备份完成。
三、模拟误操作
模拟误删除操作,覆盖某条或者某些数据。
在SQL Console页签中,输入如下SQL语句,单击执行,误覆盖了students表中的某条数据。
UPDATE students SET name='Tom',grade=6,class=1 WHERE id=2;
四、获取误操作的时间点(选做)
首先,需要获取误操作的具体时间点,从而判断需要恢复到什么时间点以前。对于PolarDB MySQL集群版,若集群已开通SQL洞察功能,可通过该功能查看审计日志,获取误操作的时间点。
说明:本实验暂不支持开通SQL洞察,您可跳过此步骤,若需要进行操作,请您使用您自己的阿里云账号开通PolarDB MySQL集群和SQL洞察,进行体验。SQL洞察会收费,费用与审计日志的存储容量和存储时长有关。
- 在PolarDB控制台,进入集群列表,找到目标集群,单击集群ID。
- 在左侧导航栏中,选中日志与审计>SQL洞察页面。
- 单击搜索页签,进入如下页面。
- 设置查询条件。
- 时间范围:根据预估的误操作时间点选择。
- 用户:输入进行误操作的用户的用户名。
- 数据库:输入误操作对象的数据库名。
- 操作类型:本示例中使用UPDATE语句作为误操作模拟,因此选择UPDATE即可。
- 单击查询,并在搜索结果中查看误操作的执行时间。
五、开始库表恢复
- 在备份恢复页面,单击库(表)恢复。
- 在库/表集恢复对话框中,其中恢复方式有两种,分别为按备份集和按时间点,在本实验中选中按备份集恢复,选中需要恢复的备份集,选中需要恢复的目标库,并在右侧选中目标表,单击确定。
说明: 选中目标库或目标表后,系统会自动在原库(testdb)或原表名称(students)后加_backup作为新库(testdb_backup)或新表的名称(如students _backup)。
- 等待备份恢复完成,您可在右上角任务列表中查看库表恢复进度。
- 刷新页面,状态为运行中时,表示备份完成。
六、进行数据比对
当库表恢复完成后,您可以通过DMS登录集群,进行数据比对,验证数据。
- 切换至DMS控制台中。在表区域,单击 图标刷新表,我们可以看到恢复后的students_backup表。
- 在SQL Console页签中,输入如下SQL语句,单击执行,查询students_backup表。
SELECT * FROM `students_backup`;
- 查找到误操作的数据,确认其是否已恢复到误操作前。
4. 使用DAS实现数据库异常检测
数据库自治服务DAS(Database Autonomy Service)提供为数据库提供异常检测功能。使用DAS对数据库PolarDB MySQL 进行异常检测,能够更为及时地发现数据库的异常变化提升数据库系统的稳定性,提高运维效率。
说明:因实验室暂不支持DAS自治服务,所以本章节仅供学习,请勿在实验室环境中操作本章节的步骤。若需要进行本章节的操作,请您使用您自己的阿里云账号开通PolarDB MySQL集群和DAS自治服务。
一、准备环境
已创建PolarDB MySQL实例,版本无特殊要求,商品类型为按量付费,规格为2核8GB,且已在集群中创建账户。
二、开启DAS自治服务
- 登录PolarDB MySQL控制台,单击集群列表,选择已创建的集群ID,进入集群详情页。
- 在左侧导航栏选择一键诊断,在自治中心页签下,单击右侧自治功能开关进入设置页面。
- 开启自治服务。
自治功能设置选项具体触发条件如下:
自治服务 |
触发条件 |
自动索引创建和删除 |
当打开开启自治服务开关后,默认开启SQL诊断。 |
自动限流 |
可根据业务场景自定义,本次触发条件以下设置为例:CPU利用率 > 80%且活跃会话数量 > 20。持续时间>2分钟。可限流时间段 00:00-23:59。最大限流时间 10 分钟。同时KILL执行中的异常SQL。 |
自动扩容 |
可根据业务场景自定义,本次触发条件以以下设置为例:CPU利用率 >= 70%。升配实例规格上限是 88核710G。只读节点数量上限是 3 个。观察窗口时间 30 分钟。 |
自动回缩 |
自动扩容后,发现在观测窗口内,满足自动回缩的条件,进行自动回缩操作;本次静默期 30 分钟。 |
- 单击确定。
三、构建数据
- 登录PolarDB MySQL控制台,单击集群ID,进入集群详情页后,单击数据库管理-创建数据库,完成数据库的创建。
说明:为案例展示需要,本案例中数据库的名称定为das_test。
- 通过DMS登录数据库:在PolarDB MySQL控制台,进入实例详情页,单击SQL查询,跳转DMS控制台后输入账号和密码。
说明:首次使用DMS连接PolarDB MySQL实例时,系统会提示您授权白名单,单击确认后即可完成授权。
- 成功登录后,直接打开数据库的SQL Console面板,输入以下语句,创建PolarDB MySQL表。
a. 执行如下语句创建一张students表。
CREATE TABLE students ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', si char(64) NOT NULL COMMENT 'student id', name varchar(64) NOT NULL COMMENT 'name', birth_date date NOT NULL COMMENT 'birth date', gender char(16) NOT NULL COMMENT 'gender', extra_info varchar(1024) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY uk_sid (sid) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
b. 如下两条INSERT INTO语句各执行一次,写入两条数据。
INSERT INTO students(sid, name, birth_date, gender, extra_info) VALUES(UUID(), SUBSTRING(UUID(), FLOOR(1+(RAND() * 18)), FLOOR(2+(RAND() * 16))), CONCAT(FLOOR(1990 + (RAND() * 20)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 30)),2,0)), 'female', UUID()); INSERT INTO students(sid, name, birth_date, gender, extra_info) VALUES(UUID(), SUBSTRING(UUID(), FLOOR(1+(RAND() * 18)), FLOOR(2+(RAND() * 16))), CONCAT(FLOOR(1990 + (RAND() * 20)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 30)),2,0)), 'male', UUID());
c. 重复执行如下语句建议执行20次以上,生成200万行数据。
INSERT INTO students(sid, name, birth_date, gender, extra_info) (select UUID(), SUBSTRING(UUID(), FLOOR(1+(RAND() * 18)), FLOOR(2+(RAND() * 16))), CONCAT(FLOOR(1990 + (RAND() * 20)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 28)),2,0)), gender, UUID() FROM students limit 1000000);
四、模拟压测
本步骤需要在ECS控制台中,登录ECS实例部署压测程序,并介绍使用该程序模拟流量注入。
- 登录下载地址,下载压测程序。
- 开通ECS服务器,本次案例要求配置如下:
- 地域与可用区:与已创建的polarDB MySQL实例一致。
- 实例规格:建议选择计算型、4vCPU 8GiB以上规格。
- 镜像:CentOS 7.8 64位。
- 系统盘 :选择ESSD云盘 40GB。
- 公网IP:勾选分配公网IPV4地址。
- 带宽计费模式:选择按使用流量。
- 带宽峰值:设置为10Mbps。
- 登录凭证
密钥对:选择已有的密钥对,或者单击创建密钥对即时创建密钥对。
自定义密码:输入并确认密码。使用用户名和密码登录实例时,Linux实例默认用户名为root,Windows实例默认用户名为administrator
创建后设置:在实例创建完成后,自行绑定密钥对或者重置实例密码。
其余配置不做要求,选择默认即可。
- 在PolarDB MySQL控制台的集群详情中,将ECS的IP地址添加至PolarDB MySQL的白名单中。
- 登录ECS。
a. 登录ECS控制台,选择实例,点击开通的实例ID名称。
b. 单击远程连接。
c. 可选择Workbench远程连接方式,单击立即登录。
- 执行如下命令创建目录。
mkdir -p /user/local/src
- 将下载的das-testbed-simple.zip 压缩包上传至ECS 实例的 /usr/local/src 目录下。
- Windows系统下载使用MobaXterm工具登录ECS地址上传。
- Macos系统使用终端上传。
- 在src 目录下执行如下命令解压das-testbed-simple.zip。
unzip das-testbed-simple.zip
- 依次执行如下命令编辑data-source.properties,复制PolarDB的集群地址替换该文件里的占位符,并设置账户和密码。
1)在PolarDB集群的基本信息页面,获取集群链接地址。
2)修改配置文件data-source.properties。
cd das-testbed-simple/config vi data-source.properties
按i进行修改,修改完成后按Esc再输入:wq保存退出。
说明:标红位置参数按照实际环境配置
- jdbc.url:
- *****.rwlb.rds.aliyuncs.com:PolarDB MySQL集群的链接地址。
- das_test:数据库名称。
- jdbc.username:账户名,登录PolarDB控制台,在配置与管理 > 账号管理页面,进行查看。
- jdbc.password:账户密码。
- 在 /usr/local/src目录下执行以下命令,克隆一个目录。
cp -r das-testbed-simple das-testbed-simple1
- 修改das-testbed-simple/config/test-scenario-config.json的内容如下:
cd das-testbed-simple/config vi test-scenario-config.json
按i进行修改,修改完成后按Esc再输入:wq保存退出。
{ "variables": [ { "name": "names", "expression": "query(dataSource, 'SELECT name FROM students LIMIT 10000')" } ], "queries": [ "update students set extra_info = UUID() where name = '${random(names).name}'" ], "queryConfig": { "threadCount": 20, "durationTimeInMinute": 20 } }
说明:该配置测试程序以 20个线程并发执行 update 语句20分钟,把 PolarDB主库的 CPU持续打高。
- 修改das-testbed-simple1/config/test-scenario-config.json的内容如下:
cd /user/local/src/das-testbed-simple1/config vi test-scenario-config.json
按i进行修改,修改完成后按Esc再输入:wq保存退出。
{ "variables": [ { "name": "names", "expression": "query(dataSource, 'SELECT name FROM students LIMIT 10000')" }, { "name": "sids", "expression": "query(dataSource, 'select substring(sid, 2, 5) as sid from students limit 10000')" } ], "queries": [ "select * from students where name = '${random(names).name}'", "select * from students where sid like '%${random(sids).sid}%'" ], "queryConfig": { "threadCount": 10, "durationTimeInMinute": 20 } }
说明:该配置测试程序以 10个线程并发执行慢查询select语句20分钟,把PolarDB只读库或者主库的CPU持续打高。
- 通过 yum命令在 ECS上安装 java。
yum install java-1.8.0-openjdk* -y
- 在2个终端窗口分别运行以下2条命令,对 PolarDB进行高并发压测。
[root@iZwz******** das-testbed-simple]# java -jar das-testbed-simple.jar [root@iZwz******** das-testbed-simple1]# java -jar das-testbed-simple.jar
四、异常检测
- 登录PolarDB MySQL控制台。
- 在左侧菜单单击一键诊断。
- 在自治中心页签下查看异常事件、优化事件和弹性伸缩事件。
- 向下拖动页面,查看每个事件的描述和详情。
- 单击异常检测事件的详情,查看异常的指标。
查看异常指标分析:
查看异常指标可视化信息:
实验地址:https://developer.aliyun.com/adc/scenario/9f364009c8aa4475950db87194ea9d06