本文档包含以下内容:
- 连接RDS for Mysql实例
- RDS for MySQL数据迁入
- RDS for MySQL数据迁出
- 只读实例简介
- RDS异地灾备实例
- 数据压缩
- 使用约束
- RDS for MySQL创建高权限账号必读
1.连接RDS for Mysql实例
对于数据库类型为MySQL的RDS实例,有以下几种连接方法:
DMS(控制台登录数据库)
使用DMS连接RDS实例,需要先登陆阿里云管理控制台,进入RDS管理控制台并选择对应实例之后,点击右上角的功能扩展区“登录数据库”按钮, 在登陆框页面输入需要登录的数据库连接地址,账号和密码即可访问RDS数据库。
MySQL-Front
在“打开登陆信息”对话框中点击“新建”按钮,弹出“添加信息”对话框。在对话框的“Host”和“端口”栏里分别输入RDS实例的内/外网地址和端口号(可在RDS管理控制台实例的基本信息页面查看),在“用户”和“密码”栏分别输入数据库账号和密码,点击“确定”即可连接。
Navicat for MySQL
选择“连接->MySQL”,在“MySQL–新建连接”中的“主机名或IP地址”和“端口”栏里分别输入RDS实例的内/外网地址和端口号(可在RDS管理控制台实例的基本信息页面查看),在“用户名”和“密码”栏分别输入数据库账号和密码,点击“确定”即可连接。
使用mysql命令登录
用户安装MySQL客户端后,可进入命令行方式连接数据库。
命令格式:
mysql –hexample.mysql.rds.aliyuncs.com –P3306 –uUserName –pPassword
其中,-h指定的是主机名(即RDS实例的内/外网地址),-P指定的是端口,-u指定的是用户名(即RDS数据库账号),-p指定的是密码。
2.RDS for MySQL数据迁入
RDS for MySQL提供数据传输服务DTS和mysqldump两种途径帮助用户将自建数据库迁移上云。
数据传输服务DTS
使用数据传输服务将自建的MySQL迁移至RDS,可以实现应用不停服务的情况下,平滑完成数据库的迁移工作。
迁移类型简介
-
结构迁移
DTS会将迁移对象的结构定义迁移到目标实例。目前DTS支持结构迁移的对象有:表、视图、触发器、存储过程、存储函数 -
全量迁移
DTS会将源数据库迁移对象在的数据全部迁移到目标实例。如果用户还选择了增量迁移,那么全量迁移过程中,为了保证数据一致性,无主键的非事务表会被锁定,锁定期间这些表无法写入,锁定时长依赖于这些表的数据量大小,在这些无主键非事务表迁移完成后,锁才会释放。 -
增量迁移
增量迁移会将迁移过程进行数据变更同步到目标实例,如果迁移期间进行了DDL操作,那么这些结构变更不会迁移到目标实例。
迁移限制
- 迁移过程中,不支持DDL操作
- 结构迁移不支持event的迁移
- 如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败
- 当选择增量迁移时,源MySQL实例需要开启binlog
- 当选择增量迁移时,源库的binlog_format 要为row
- 当选择增量迁移且源MySQL如果为5.6版本时,它的binlog_row_image必须为full
迁移权限要求
当使用DTS进行MySQL迁移时,在不同迁移类型情况下,源跟目标数据库的迁移帐号权限要求如下:
迁移类型 | 结构迁移 | 全量迁移 | 增量迁移 |
---|---|---|---|
MySQL实例(本地或ECS上自建) | select | select |
select replication slave replication client |
目的RDS实例 | 读写权限 | 读写权限 | 读写权限 |
迁移步骤
下面详细介绍下用户如何使用DTS将本地的MySQL迁移到RDS上的流程
RDS实例数据库创建
在正式迁移之前,需要确认目标RDS实例中是否已经创建好了需要迁入的数据库,如果没有创建的话,需要在RDS控制台中,先创建迁入数据库。
迁移帐号创建
在正式迁移之前,需要先在本地MySQL数据库及云上RDS实例中创建迁移帐号,并将要迁移的库表的读写权限授权给上面创建的帐号。 可以使用grant语法给本地MySQL的迁移帐号授权,具体需要授权的权限可以参考上面的迁移权限要求
对于目标RDS实例,需要在RDS控制台中创建帐号,并将迁入库的读写帐号授权给这个帐号。
其他准备工作
如果需要进行增量迁移,那么需要确认源库的binlog是否开启,格式是否满足要求。具体确认项如下:
1) 确认源库的binlog是否开启,执行如下命令:
show global variables like "log_bin";
如果这里面查询出来的log_bin=OFF,那么说明源库没有开启binlog。为了使迁移过程中产生的增量数据能同步迁移,需要修改本地MySQL的binlog配置,打开binlog日志。
a) 开启二进制日志,修改log_bin=mysql_bin
b) 设置binlog模式为row,修改binlog_format=row
c) 配置server_id大于1,即server_id=某一个大于1的整数
d) 如果版本为5.6,修改binlog_row_image=full
e) 修改完成后,重启MySQL进程
2) 确认源库的binlog格式为row模式
show global variables like "binlog_format";
使用上面的命令确认本地MySQL的binlog格式是否为ROW,如果查询出来的结果不为ROW的话,那么通过如下的参数设置命令将模式修改为ROW
set global binlog_format=ROW;
当修改完成后,最好将已有的老连接KILL掉重连,否则可能出现其他的连接依然使用statement格式记录binlog日志。
3)当本地MySQL版本大等于5.6.2时,确认源库的binlog_row_image=full
show global variables like “binlog_row_image”;
如果查询出来的结果不为FULL的话,那么通过如下的参数设置命令将其修改为full
set global binlog_row_image=full;
正式迁移
当上面的所有前提条件都配置完成后,就可以开始正式的数据迁移了。下面详细介绍下具体的迁移步骤。
1)进入DTS控制台,点击创建迁移任务,正式开始任务创建
2) 填写本地MySQL跟目标RDS实例的连接信息
这里面源实例类型要选择有公网IP的自建数据库
3)选择迁移对象及迁移类型
默认情况下,迁移对象迁移到目标库后,对象名跟源库一致。如果用户想修改对象在目标库上的名字时,可以直接修改已选择的对象名。
当点击编辑后,即进入对象名称修改页面:
修改了对象名后,目标实例的对象名即为修改后的对象名。
4)启动预检查
在数据正式迁移之前,会先进行基础预检查,只有预检查通过后,才能启动迁移
如果预检查失败,那么可以查看具体的失败详情,根据失败原因修复后,重新进行预检查
当点击查看后,可以查看到具体的预检查失败原因:
当修复完成后,可以在任务列表中,选择这个任务,然后重新启动预检查
5)启动迁移任务
当预检查通过后,我们可以启动迁移任务,任务启动后,可以到任务列表中查看具体的迁移状态及进度
至此,完成将本地MySQL数据库迁移到RDS的数据迁移工作。
mysqldump工具
使用mysqldump工具的优点是简单易行,容易上手;缺点是停机时间较长。因此它适用于数据量不大,或者允许停机的时间较长的情况。 由于RDS提供的关系数据库服务与原生的数据库服务完全兼容,所以对于用户来说,将原有数据库迁移到RDS实例的过程,与从一个MySQL服务器迁移到另外一台MySQL服务器的过程基本类似。
迁移步骤
1) 购买RDS实例
用户购买RDS实例后,系统会为用户提供RDS实例的内/外网连接地址和端口,如:
example.mysql.rds.aliyuncs.com:3306
2)利用mysqldump备份数据
停止业务,使用mysqldump的数据导出工具,将线下原有数据库数据导出为数据文件(本步骤仅仅导出数据,不包括存储过程、触发器及函数)。
命令格式:
mysqldump -hlocalIp -uuserName -p --opt --default-character-set=utf8 --hex-blob dbName --skip-triggers > /tmp/dbName.sql
参数说明:
(1) localIp:MySQL服务器IP地址;
(2) userName:数据库用户名;
(3) dbName:需要备份的数据库名;
(4) /tmp/dbName.sql:备份生成的文件名。
3) 利用mysqldump导出存储过程、触发器和函数
备份线下原有数据库的存储过程、触发器和函数(若数据库中没有使用存储过程、触发器和函数,可跳过此步骤),在导出存储过程、触发器和函数时,需要将definer去掉,以兼容RDS。
命令格式:
mysqldump -hlocalIp -uuserName -p --opt --default-character-set=utf8 --hex-blob dbName -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/triggerProcedure.sql
参数说明:
(1) localIp:MySQL服务器IP地址;
(2) userName:数据库用户名;
(3) dbName:需要备份的数据库名;
(4) /tmp/triggerProcedure.sql:备份生成的文件名。
4) 将数据文件和存储过程文件上传到已经购买的云服务器ECS中
假设已上传的文件在云服务器中的路径为:
/tmp/dbName.sql
/tmp/triggerProcedure.sql
5) 将数据导入至RDS
远程登录到云服务器,将刚才上传的数据文件导入到已购买的RDS实例中, 命令格式:
mysql -hexample.mysql.rds.aliyuncs.com –uuserName -p dbName < /tmp/dbName.sql
参数说明:
(1) example.mysql.rds.aliyuncs.com:RDS实例连接地址;
(2) userName:RDS数据库账号;
(3) dbName:需要导入的数据库名;
(4) /tmp/dbName.sql:导入所使用的文件名。
6) 将存储过程、触发器和函数导入至RDS
远程登录到云服务器,将刚才上传的存储过程文件(包含存储过程、触发器和函数,若没有则请跳过此步)导入到已购买的RDS实例中。
命令格式:
mysql -h example.mysql.rds.aliyuncs.com -u userName -p dbName < /tmp/triggerProcedure.sql
参数说明:
(1) example.mysql.rds.aliyuncs.com:RDS实例连接地址;
(2) userName:RDS数据库账号;
(3) dbName:需要导入的数据库名;
(4) /tmp/triggerProcedure.sql:导入所使用的文件名。
至此数据迁移完毕,用户可使用iDB Cloud、数据库客户端工具(如MySQL-Front)或程序的方式,通过RDS实例连接地址、端口号、数据库账号和密码连接数据库。连接RDS>>
3.RDS for MySQL数据迁出
RDS for MySQL支持通过物理备份文件和逻辑备份文件两种途径将云上数据迁移至自建数据库。
利用物理备份文件导出
RDS使用开源软件Xtrabackup对MySQL数据库进行全量物理备份,版本号为2.0.6。用户需要下载该软件,并使用该软件进行恢复。
Xtrabackup官方网站为:https://www.percona.com/,请选择与您操作系统版本对应的Xtrabackup版本进行下载。
例如,我们这里下载RHEL6/x86_64版本。并使用rpm命令进行安装:
sudo rpm -ivh percona-xtrabackup-2.0.6-521.rhel6.x86_64.rpm
操作步骤
1) 下载备份文件
在RDS管理控制台对应实例的“备份与恢复->备份列表”,选择备份方法为物理备份的备份文件。
方法一: 将备份文件下载至本地的Linux系统环境下,并在系统上检测,如下图所示:
方法二: 复制下载地址,在Linux系统中执行wegt命令,注意wget后的地址要加引号,否则会报错。
2) 解压备份文件
在Linux系统下,执行命令,进行解压:tar vizxf filename.tar.gz
filename.tar.gz对应下载得到的完整备份文件名。
3) 查询解压后生成的文件,其中蓝色字体的目录文件为备份生成时RDS实例中存在的数据库,如下图所示:
4) 恢复数据文件
进入解压目录,执行如下命令:
innobackupex --defaults-file=./backup-my.cnf --apply-log ./
如果看到类似如下输出,表示执行成功,如下图所示:
5) 修改配置文件
由于存在的版本问题,请将解压文件backup-my.cnf中的innodb_fast_checksum,innodb_page_size,innodb_log_block_size注释掉并且添加datadir=/xxx/xxx/(备份文件解压路径),如下图所示:
6) 重装mysql系统库
用户可以删除现有的mysql系统库,重新生成mysql系统库从而拥有数据库的root权限。删除mysql系统库命令为:rm -rf mysql,并确认删除成功,如图所示:
7) 重装mysql系统库
命令格式:
mysql_install_db --user=mysql --datadir=/xxx/xxx/
(备份文件所属目录),并确认操作成功,如下图所示:
8) 修改文件属主
命令格式:chown -R mysql:mysql /xxx/xxx/(备份文件所属目录)
检查文件所属为mysql用户,如下图所示:
9) 启动mysqld进程,并验证启动成功,如下图所示: 命令格式:
mysqld_safe --defaults-file=/xxx/xxx/backup-my.cnf &(备份文件所属目录)
10) 客户端登录MySQL验证,如下图所示:
命令格式:
mysql –u root –p
因为软件限制,目前恢复只支持在Linux系统下进行。Linux下恢复的数据文件,无论Windows、Linux下,MySQL都可以正常使用。
利用逻辑备份文件导出
1) 在RDS管理控制台对应实例的“备份与恢复->备份列表”,选择备份方法为逻辑备份的备份文件并将其下载到本地。
2) 将备份文件放到系统的某个目录下,并通过命令解压:
tar -xvf filename.tar (filename.tar对应下载的文件名)
解压完成后可以发现解压出来的都是实例里面各个数据库的sql压缩文件,以通过gunzip进行解压
gunzip filename.sql.gz
解压后的文件即为sql文件,如:filename.sql
4) 执行数据库导入操作,对数据库进行逻辑导入
mysql -u userName -p -h hostName -P port dbName < filename.sql (filename.sql对应解压后sql压缩文件名)
4.只读实例简介
简要介绍
在对数据库有少量写请求,但有大量的读请求的应用场景下,单个实例可能无法抵抗读取压力, 甚至对主流程业务产生影响。为了实现读取能力的弹性扩展,分担数据库压力,阿里云RDS支持在某个地域中创建一个或多个只读实例,利用多个只读实例满足大量的数据库读取工作负载,以此增加应用的吞吐量。
基础架构
只读实例采用 MySQL 的原生复制功能,将源数据库实例(以下简称主实例)的更改同步到所有相关的只读节点。只读实例统一采用单节点架构,RDS承若只读实例宕机24小时内恢复。
功能特点
l 一个主实例(限MySQL 5.6)最多可以创建5个只读实例;
l 只读实例的规格大小可以与主实例不一致,可以更方便的弹性升降级;
l 根据业务压力,在需要时可以随时将实例规格升级,并在业务低峰降级(没有时间限制); l 支持按小时计费 ;
l 只读实例不需要维护帐号与数据库,全部通过主实例同步;
l 独立的白名单配置;
l 系统性能监控:RDS提供近20个系统性能的监控视图,如磁盘容量、IOPS、连接数、CPU利用率、网络流量等,用户可以轻松查看实例的负载;
l 优化建议:RDS提供多种优化建议,如存储引擎检查、主键检查、大表检查、索引偏多、缺失索引等,用户可以根据优化建议并结合自身的应用来对数据库进行优化;
使用注意事项
l 只读节点只支持MySQL5.6,在主实例(A)升级版本前,请最好做一下兼容性测试;或者新建一个实例(B),将数据从A实例复制到B实例,然后在B实例上面生成只读实例;
l 为保证数据同步需要有足够的IO性能支撑,建议只读实例的规格配置(内存)不小于主实例;
l 由于只读实例的设计是“单节点”(没有主备),所以请购买多个只读实例来完成高可用目标;
功能限制
由于只读实例的数据均由源数据库实例同步而来,以下功能只读实例将无法使用。
l 备份设置:不支持备份设置以及临时备份的功能;
l 数据迁移:不支持数据迁移至只读实例;
l 数据库管理:不支持创建\删除数据库;
l 帐号管理:不支持创建、删除帐号;不支持为帐号授权以及修改帐号密码功能;
l 实例恢复 : 只读实例不支持通过备份文件或任意时间点创建临时实例,不支持通过备份集覆盖实例。
绑定有只读实例的主实例不支持通过备份集直接覆盖实例。但可以采用此方法:根据备份集或者任意时间点创建临时实 例,创建成功确认数据无误后,将临时实例中的单个或多个库迁移到主实例上。
5.RDS异地灾备实例
简要介绍
对于数据可靠性有强需求业务场景或是有监管需求的金融业务,RDS for MySQL提供异地灾备实例,帮助用户实现最高程度的数据可靠性保障。
RDS通过数据传输DTS实现两地实例间的实时同步。主实例及灾备实例均搭建主从高可用架构,当主实例所在区域发生突发性自然灾害等状况,Master节点及Slave节点均完全无法连接时,可将异地灾备实例切换为主实例,在应用端修改数据库链接地址后,即可快速恢复应用的业务访问。
功能特点
l 异地灾备实例通过数据传输DTS实现两地间实例的实时同步,可通过DTS控制台实现同步对象变更、同步速度设置、延迟报警等同步链路原生功能。 数据同步说明>>
l 灾备实例提供独立的数据库连接地址,由用户应用端自助控制连接
l 灾备实例本身也是主从高可用架构
l 支持按小时计费,即开即用,即停即止
l 提供独立的白名单配置,账号管理
使用注意事项
l 灾备实例只支持MySQL5.6版本
l 暂仅支持在国内五大地域:杭州、青岛、北京、上海、深圳间相互创建异地灾备实例。
l 灾备实例暂不支持创建在VPC环境内(主实例可创建在VPC内)
l 灾备实例暂不支持访问控制
l 出于同步链路自身稳定性的需要,灾备实例仅支持创建只读权限的账号,仅在高安全访问模式下可申请外网地址
l 灾备实例不支持备份设置、备份恢复、数据迁移、数据库管理、 修改连接地址功能
l 灾备实例仅支持创建只读权限的账号
l 灾备实例上会自动生成一个账号供DTS同步使用,账号名统一为:dtssyncwriter;请勿对该账号进行任何修改或删除操作,否则将引起同步异常
灾备实例创建流程
1、从RDS控制台主实例关系图上创建灾备实例
2、购买灾备实例 ,并授权白名单进入(灾备实例购买暂仅支持选择地域,其余配置信息默认与主实例一致,若有升级需求,可在创建成功后在灾备实例控制台进行变配)
-
实例创建需要数分钟时间,在此期间请勿关闭该窗口,否则引起灾备实例创建失败。
3、实例创建成功后,将自动创建迁移账号,该账号用于同步链路的管理,在同步过程中请勿删除该账号。
4、选择需要进行异地数据同步的对象(数据库或者表),并设置同步速度(可不填)。
5、完成上述配置后,会自动进行预检查,若检查通过则进入同步阶段。
6、在DTS同步链路列表页可看到生成的同步链路,并进行对象变更或监控报警设置。为保障灾备实例数据的实时性,请不要对灾备实例的同步链路进行暂停操作。
灾备实例切换流程
用户可随时在控制台将灾备实例切换为主实例,切换后将自动断开灾备实例与主实例间的同步链路,灾备实例将变成一个独立且具备完整功能的实例与原主实例间不再有数据同步关系。 用户在应用端修改连接地址后,即可实现正常的实例管理。
-
若切换时,灾备实例的同步链路处于同步异常状态,则切换后的实例不含有同步异常期间主实例产生的数据变更。
6.数据压缩
RDS for MySQL 5.6版本通过TokuDB引擎支持数据压缩功能。经过大量测试表明,数据从InnoDB表转到TokuDB表里面后数据空间可以减少80%到90%,即2T的数据量能压缩到400G甚至更低。 除了压缩外,TokuDB还支持事务和在线DDL操作,可以很好兼容运行于MyISAM或InnoDB引擎上的应用。
压缩步骤
1、检查RDS for MySQL版本
目前只有RDS for MySQL 5.6版本支持TokuDB引擎,如果版本是5.1或者5.5,需要先升级至5.6
2、获取loose_tokudb_buffer_pool_ratio配置
将需要转化成TokuDB引擎的表名填入如下SQL,并通过命令行执行:
select sum(data_length) into @all_size from information_schema.tables where engine='innodb';
select sum(data_length) into @change_size from information_schema.tables where engine='innodb' and concat(table_schema, '.', table_name) in ('XX.XXXX', 'XX.XXXX', 'XX.XXXX');
select round(@change_size/@all_size*100);
3、配置TokuDB
登录RDS控制台,将loose_tokudb_buffer_pool_ratio设置为上步计算得到百分比。 该参数需要重启数据库才能生效。
4、开启压缩
通过命令行方式执行:
ALTER TABLE XX.XXXX ENGINE=TokuDB
DMS:
TokuDB限制
TokuDB无法支持外键Foreign Key。
TokuDB不适用于频繁大量读取的场景 。
7.使用约束
为保障实例的稳定及安全,RDS for MySQL有部分使用上的约束,详情如下:
操作 | RDS使用约束 |
---|---|
修改数据库参数设置 |
大部分数据库参数须使用RDS管理控制台或OPEN API进行修改, 具体可修改参数可参看RDS管理控制台。小部分参数无法修改 |
数据库的root权限 | RDS无法向用户提供root或者sa权限 |
数据库备份 |
可使用命令行或图形界面进行逻辑备份, 必须通过RDS管理控制台或OPEN API进行物理备份, 不支持第三方工具进行物理备份 |
数据库还原 |
可使用命令行或图形界面进行逻辑数据还原; 必须通过RDS管理控制台或OPEN API进行物理还原 |
数据迁入 |
可使用命令行或图形界面进行逻辑导入 MySQL用户可以使用mysqldump、数据传输进行数据迁入 |
MySQL存储引擎 |
目前仅支持MyISAM(新创建实例已不支持,只支持部分存量实例)、InnoDB、TokuDB三种。 出于性能和安全性考虑建议尽量采用InnoDB存储引擎 |
搭建数据库复制 |
系统自动搭建了MySQL主备复制,无需用户手动搭建 MySQL Slave节点对用户不可见,不能直接用于访问 |
重启RDS实例 | 必须通过RDS管理控制台或OPEN API操作重启实例 |
8.RDS for MySQL创建高权限账号必读
高权限账号简介
RDS for MySQL高权限账号模式,支持用户在实例内直接执行create/drop/grant等命令,实现更便捷的管理操作。
高权限账号使用须知
切换为高权限账号模式后,会有部分使用方式的变化:
1、高权限账号下,不再支持通过RDS控制台或者OPENAPI来管理数据库和账号,用户可在实例内直接执行相应的命令进行管理。 控制台上的 账号管理 和 数据库管理页面将会消失,如果您在应用程序里调用了OPEN API创建数据库和账号的接口,请及时修改程序。
2、高权限账号创建后MySQL的单库备份功能使用方式会改变,需要您手动输入需要备份的数据库。
3、高权限账号可以通过show grants for xxx 来查看已经创建的账号。
4、高权限账号不能直接访问mysql.user和mysql.db 表,可以通过mysql.user_view 和 mysql.db_view 视图来查看现有账号及权限。
5、高权限账号不能更改全局变量,如set global xxx = on
6、高权限账号在创建其他账号时,可以通过类似 grant select on test. to [email protected]’%’ identified by ‘user01password’ 方式赋权,当需要更改权限或密码时,需要Drop user user01; 后重新grant。
7、控制台和Open Api支持重置高权限账号的权限和密码。实例中已经创建的其他账户不受影响。
8、当主实例创建高权限账号后,会同步至只读实例。
9、创建高权限账号过程中可能会有一次网络闪断,请确保在合适的时间选择创建,同时建议应用程序支持数据库重连。
10、支持创建高权限账号的MySQL版本:MySQL5.5和MySQL5.6。
高权限账号开通流程
高权限账号目前针对有需要的用户开放,如果您有此需要可以提交工单进行申请开放,申请通过后您即可在控制台-账号管理 页面创建高权限账号。
1、工单申请通过后,控制台会出现“创建高权限账号”的按钮。
2、点击按钮,输入高权限账号的账号名和密码。(创建完成后,账号名不可修改,密码后续可在控制台进行修改)
3、创建中,该过程约需3-5分钟的时间,过程中,实例会发生一次闪断,请确保您的应用有自动重连机制。
4、创建成功,该账号作为高权限账号,可在实例内直接执行RDS所支持的所有操作命令。
高权限账号支持的权限列表
权限 | 是否支持 |
---|---|
Select | 支持 |
insert | 支持 |
update | 支持 |
delete | 支持 |
create | 支持 |
drop | 支持 |
reload | 部分支持 |
process | 支持 |
index | 支持 |
alter | 支持 |
Create_tem_table | 支持 |
Lock_tables | 支持 |
ececute | 支持 |
Repl_slave | 支持 |
Repl_client | 支持 |
Create view | 支持 |
Create_routine | 支持 |
Alter_routine | 支持 |
Create_user | 支持 |
event | 支持 |
trigger | 支持 |
grant | 部分支持 |