共享 MySQL
服务概述
共享 MySQL 服务是新浪云基于 MySQL-5.6 开发的一个共享数据库服务,您仅需几秒钟即可获得一个包括主从节点、高可用服务、自动备份、在线扩容以及监控等各种管理功能的 MySQL 服务。
不同于 独享MySQL,创建一个共享 MySQL 数据库并不会创建新的 mysql-server(mysqld)实例,而只是在已有的 mysql-server 集群里选择一个实例,然后在这个实例上调用 CREATEDATABASEapp_$APPNAME
创建一个新的 database 供您使用。
主从架构
共享 MySQL 数据库采用主从架构,当数据库发生故障或延迟时,系统会在秒级内自动切换,保证服务稳定可靠。
MySQL 从库有时候会因为网络抖动或者用户 SQL 语句不够优化,导致从库数据同步会有些微延时(3-10 秒)。如果您有对数据实时性要求比较高的查询,建议在主库上进行操作。
性能
共享 MySQL 数据库可以支持最高百万级的数据库访问,对于数据库性能要求更高的应用建议使用 独享MySQL。
MySQL 存储引擎
共享 MySQL 数据库服务支持 MyISAM 和 InnoDB 引擎,目前 InnoDb 引擎仅对企业版开放,详见 企业版介绍。
安全和隔离
共享 MySQL 数据库服务通过 RDC(我们为共享数据库服务开发的高性能 MySQL 代理)和 MySQL 本身的认证机制来实现数据库和数据库之间的隔离。所有的数据库连接会首先连接 RDC,在 RDC 认证通过之后,由 RDC 将连接代理给实际的后端数据库。
RDC 的功能主要如下:
- 通过其强隔绝性为数据库提供更高的安全性,保障您的数据安全。
- 通过预判用户执行的 SQL 语句,提前拦截可能损伤系统的 SQL 语句。
RDC 会对所有的 SQL 语句执行以下预判,如果超过了其限制,RDC 会直接拦截这个 SQL 查询,返回查询错误,您可以根据 MySQL 错误码判断该请求是否是被 RDC 拦截以及拦截的原因。
预判条件 |
相关错误信息 |
限额 |
---|---|---|
单表的最大行数 |
Table has too many rows |
10,000,000 行 |
库的最大表数量 |
Database has too many tables |
512 个 |
不支持的存储引擎类型 |
Not support table type |
memory, temporary |
不支持的内置函数 |
Not support function |
sleep, benchmark |
最大外排序的行数 |
Filesort on too many rows |
100,000 行 |
最大无索引的操作行数 |
Select on too many rows without index |
300,000 行 |
查询的最大操作行数 |
Select on too many rows |
1,000,000 行 |
更新的最大操作行数 |
Update on too many rows |
1,000,000 行 |
删除的最大操作行数 |
Delete on too many rows |
1,000,000 行 |
创建索引时允许的表的最大行数 |
Create index on big table |
500,000 行 |
修改表结构时允许的表的最大行数 |
Alter table on big table |
500,000 行 |
警报阈值百分比 |
无 |
80% |
表主键及聚簇索引奖励系数 |
无 |
1024 倍 |
RDC 的预判和拦截是针对 Web 应用的使用场景来优化的,如果您的数据库表结构、索引、SQL 语句等合理的话是不会触发这些拦截的,相反,如果出现这些拦截,您就需要根据对应的错误码以及其优化建议对你的数据库或者 SQL 语句去做相应的优化。
以下是被 RDC 拦截返回的错误码说明以及建议:
错误码 |
错误信息 |
说明 |
建议 |
---|---|---|---|
13000 |
Not support multi statements |
不支持一个字符串多条 SQL 语句 |
无 |
13001 |
Select on too many rows |
查询的表记录超过了限制 [1]
|
优化 SQL 语句,减少扫描行 |
13002 |
Update on too many rows |
更新的表记录超过了限制 [1]
|
优化 SQL 语句,减少扫描行 |
13003 |
Delete on too many rows |
删除的表记录超过了限制 [1]
|
减少 SQL 语句,减少扫描行 |
13004 |
Create index on big table |
在一个过大的表上创建索引 |
使用新浪云 DefferedJob 离线任务队列执行 |
13005 |
Alter table on big table |
在一个过大的表上改变表结构 |
使用新浪云 DefferedJob 离线任务队列执行 |
13006 |
Operations take too much time cost |
超过 SQL 并发执行时间和 |
优化 SQL 语句,或者购买更大的并发支持 |
13007 |
Filesort on too many rows |
SQL 导致高时间复杂度的外排序 |
优化 SQL 语句 |
13008 |
Table has too many rows |
单表行数超过规定上限 |
分表以降低表内的记录数 |
13009 |
Database has too many tables |
用户当前表数目已达到规定上限 |
降低表的数量(可以通过 MySQL 的跨应用授权使用多库) |
13010 |
Not support table type |
试图创建不支持的表类型 |
了解支持的表类型 |
13011 |
Not support table optimization |
试图执行 optimize table 语句 |
去掉该语句 |
13012 |
Not support function |
试图执行禁用函数 |
不执行该函数 |
13013 |
Scanned too many databases when querying INFORMATION_SCHEMA |
查询 INFORMATION_SCHEMA 时导致过多的跨库扫描 |
查询时 INFORMATION_SCHEMA 时显式指明库和表 |
13014 |
Too complicated sql case uncacheable |
过于复杂的语句导致不可被 cache |
降低语句复杂度 |
13016 |
Not support show databases |
不支持 show databases |
不要调用 show databases |
13017 |
Select on too many rows without index |
查询时过于复杂且不带索引 |
请使用索引查询 |
13018 |
Impossible where that may caused by sql injection |
出现永远不可能的条件语句 有可能是被 SQL 注入导致 |
检查该语句是否有安全隐患 |
13019 |
Invalid operate information_schema |
对 information_schema 操作不当 |
避免对 information_schema 的操作 |
13044 |
Backends connection error |
连接时出现未知错误 |
稍后重试,连续失败时,请向官方反馈 |
13045 |
Backends connection timeout |
连接时超时 |
稍后重试,连续失败时,请向官方反馈 |
13046 |
No available backends |
没有可用的后端 |
向官方反馈 |
13047 |
Be banned (maybe out of quota) |
因为慢查询过多导致被禁用 |
优化 SQL 语句 |
共享 MySQL 服务对用户开放了以下权限:
新建
在控制台管理页面导航中点击『数据库与缓存/共享 MySQL』进入创建页面。选择你要创建的数据库类型开始创建。
导入、导出
导入
- 上传数据库文件到 Storage 中。
- 在控制台管理页面导航中点击『数据库与缓存/共享 MySQL/导入导出』进入异步任务创建页面,添加新的导入任务。
- 导入成功后,可以在管理面板收到任务执行成功通知。
导出
- 在控制台管理页面导航中点击『数据库与缓存/共享 MySQL/导入导出』进入异步任务创建页面,添加新的导出任务。
- 导出成功后,可以在管理页面收到任务执行成功通知。您可以在通知提供的链接中下载导出的数据库文件。
备份、恢复
共享数据库服务会每天定时自动帮您备份数据库,您可以在控制台管理页面导航中点击[数据库服务 > MySQL > 共享 MySQL 服务 > 数据恢复]进入管理面板中恢复数据库到最近 14 天内任意时间点。
跨应用授权
您可以在管理面板中授权其它应用访问你的数据库。