教你玩转腾讯云云数据库

发布时间:2017-06-28 09:44:55
第一部分:云数据库入门,简介和优势

1. 云数据库是什么
(1)云存储服务,是腾讯云平台提供的面向互联网应用的数据存储服务
(2)完全兼容MySQL协议,适用于面向表结构的场景,适用MySQL的地方都可以使用云数据库
(3)提供了高性能、高可靠、易用、便捷的MySQL集群服务
(4)整合了备份、扩容、迁移等功能,同时提供phpMyAdmin管理后台,用户可以方便的进行数据库的管理


2. 哪些场景可以使用云数据库
MySQL适用的地方都可以使用云数据库。相比于自行搭建MySQL,使用云数据库更加方便和可靠。
云数据库完全兼容MySQL协议,同时提供master-slave热备和定时冷备服务,此外支持实例无缝升级,可最大程度减少开发者在部署、监控、扩容和故障恢复等方面的投入,使开发者可以集中精力进行产品开发和运营。


3. 云数据库相比用户自建的数据库有什么优势
(1)便捷:用户可以快速的在腾讯云平台中申请实例资源,通过IP/PORT直接访问MySQL实例,无需自行安装MySQL实例。
(2)易用:完全兼容MySQL协议,用户可通过基于MySQL协议的客户端或者API访问实例。用户可无缝的将原有MySQL应用迁移到云存储平台,无需进行任何的代码改造。
(3)安全:提供在线的主从两份数据存储,确保线上数据安全。同时通过备份机制保存多天的备份数据以便于在灾难情况进行数据恢复。
(4)高性能:集中安装专用高性能存储服务器来支持海量访问。
(5)省心:提供7×24小时的专业服务,扩容和迁移对用户透明且不影响服务。提供全方位、全天候立体式监控,用户无需半夜去处理MySQL实例故障。


 
4. 云数据库如何对MySQL进行管理、
开发者不需要对MySQL进行日常管理,日常的维护和调整由云数据库运维系统完成。
当MySQL出现异常时,运维系统会及时发现并通知运维人员处理,开发者不需要做任何变更操作
 

 
第二部分:云数据库操作使用

1.如何登录云数据库
目前腾讯云支持Mysql客户端直接访问和通过集成的phpMyAdmin工具进行登录管理
 

2.如何重置云数据库密码
 

3.如何在云数据库中建立数据库和数据表
我们登录云数据库之后,可以通过sql语句或是图形化管理工具进行建库建表:http://wiki.qcloud.com/wiki/%E5%BB%BA%E7%AB%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E5%92%8C%E8%A1%A8

4.如何修改字符集编码
下面是修改云数据库字符集的方法:
(1)执行如下语句可修改云数据库实例的默认字符集编码:
SET @@global.character_set_client = utf8;
SET @@global.character_set_results = utf8;
SET @@global.character_set_connection = utf8;
SET @@global.character_set_server = utf8;
其中@@global.character_set_server 10分钟左右将自动同步到本机文件进行持久化(另外3个变量不会同步到本机文件),迁移或重启将保持设置后的值。
(2)执行如下语句可修改当前连接的字符集编码:
SET @@session.character_set_client = utf8;
SET @@session.character_set_results = utf8;
SET @@session.character_set_connection = utf8;
或者
SET names utf8;
(3)对于php程序,可通过以下函数设置当前连接的字符集编码:
bool mysqli::set_charset(string charset);
或者
bool mysqli_set_charset(mysqli link, stringcharset);
详细请参考MySQL官方手册。
(4)对于java程序,可通过如下方式设置当前连接的字符集编码:
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
详细请参考MySQL官方手册。

5.如何修改CDB的配置参数
开发者可通过命令行和phpMyAdmin,修改云数据库配置参数:
1.命令行方式
以下变量可以通过执行“set global var_name=var_value”语法运行时动态修改,10分钟左右将自动同步到本机文件,迁移或重启将保持设置后的值。其中常见的var_name包括如下变量:
character_set_server 服务器默认字符集
connect_timeout           连接超时
long_query_time           超过该时间的查询为慢查询
max_allowed_packet 最大包长度
max_connections          最大连接数
sql_mode                  当前的服务器SQL模式
table_open_cache         所有线程打开表的个数,增大该值可以增加mysqld被请求打开的文件描述符个数
wait_timeout               非交互连接超时时间
2.phpMyAdmin
通过phpMyAdmin登录云数据库后,点击上面菜单中的“变量”,在下面的变量列表中,点击需要修改的变量对应的值,对其进行修改。

6.如果我要把数据导入CDB,如何准备好要导入的数据
 

7.数据导入方式一:通过CVM中转导入
 
 

8.数据导入方式二:通过云数据库管理控制台导入
 
 

9.Linux CVM 通过多线程导入导出工具(cdb_mydumper),来快速备份和恢复实例数据
 

10.Linux CVM通过cdb_dump导出云数据库慢查询日志导出和错误日志、冷备数据
 

11.Linux CVM 通过 CdbRollbackTools 实现数据回档
 

12.通过MySql主从同步迁移CDB到自建的Mysql
 

13.如何获取云数据库运营数据查看API
 

14.如何授权其他用户操作CDB
root用户可以使用mysql的grant命令对其他用户进行授权,注意不能使用grant all进行授权。
目前shutdown和file权限没有开放给root用户,因此root不能新建拥有所有权限的用户。
授权时,请参考以下命令:
grant SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, ALTERon *.* to 'myuser'@'%' identified by 'mypasswd';
 

15.如何下线CDB
CDB是预付费产品,不需要手动下线,到期会自动回收处理

 
第三部分:云数据库限制说明

1.云数据库数据量限制
由于资源的有限性,腾讯在商务上对各种类型的MySQL实例做了数据量限制。下面从技术角度谈谈云数据库在大数据量下的单个实例以及单个表使用的影响:

大数据量表:单表数据量过大后,MySQL对单表资源的管理成本(数据、索引等)变更,将直接影响表的处理效率。例如,当一个业务表(innodb)数据量达到了5G后,更新操作延迟明显增大,直接影响了业务的响应时间,后来不得不通过迁移分表来缓解这个问题。

大数据量实例:云数据库默认存储引擎是Innodb,当实例中的数据及索引页都能被innodb 的cache buffer 缓存住时,MySQL实例能够支持很大的并发访问。如果实例数据量过大,会导致cache buffer频繁的数据换出换进,MySQL瓶颈很快转到IO上,访问吞吐量直趋下降(例如,某云数据库实例本可以支持8000次访问,当数据量为cache buffer 大小的两倍时,仅能支持700次每秒左右的访问)。

2.云数据库连接数限制
云数据库的连接数上限为MySQL的系统变量max_connections,当云数据库实例连接数量超过max_connections时,新的连接将无法建立。
云数据库大型默认值为3000,其它规格为800。用户可以根据需要自行调整max_connections的值。
但是,连接数越多,消耗系统资源也越多。如果连接数超过实际系统的负载承受能力范围,必然影响系统服务质量。
关于max_connections可以参考MySQL官方手册。

3.数据的导入导出有什么注意事项
导入数据文件限制
待导入的SQL文件不超过50GB,SQL文件名称不支持中文、不可见字符、空格以及文件名包含“test”字符。
导入数据文件字符集编码问题
1. 云数据库导入数据文件如果没有指定字符集编码,以云数据库设置的字符集编码执行。
2. 如果导入数据文件中有指定的字符集编码,则以指定的字符集编码执行。
3. 如果导入的数据文件的字符集编码与云数据库当前字符集编码不同,会造成乱码。

4.连接云数据库的MySQL客户端的版本限制
我们建议使用CVM系统自带的MySQL客户端和lib库,连接云数据库实例。

5.关于慢查询日志获取的限制
1. 对于使用Linux云服务器的开发者,可以通过云数据库导出工具获取慢查询日志,详见:第一部分使用cdb_dump导出云数据库慢查询日志
2. 对于使用Windows云服务器的开发者,暂时不能直接获取慢查询日志。如果有需要,请联系企业QQ获取慢查询日志文件。

6.云数据库的binlog保存时间说明
由于MySQL binlog会占用大量的存储空间,所云数据库只保存最近3天的binlog。另外,如果binlog数据量增加太快,服务器磁盘存储不下3天的binlog,会人工删除binlog,释放空间。

7.云数据库字符集说明
云数据库与MySQL数据库一样,默认字符集编码格式是:latin1,即ISO-8859-1编码格式。

虽然云数据库支持默认字符集编码的设置,但我们还是建议您在创建表时,显式的指定表的编码,并在连接建立时指定连接的编码。
这样,您的应用将会有更好的移植性。
关于MySQL字符集的相关资源请参考MySQL官方手册。

8.云数据库操作限制
(1) 请不要修改MySQL实例已有帐号的信息和权限,这个操作可能会令部分集群服务失效。
(2) 创建库和表时建议统一使用Innodb引擎,这个选择能使实例在支持高访问的能力上有更好的表现。
(3) 请不要修改、停止master-slave关系,这个操作可能会令热备失效。

9.高性能版限制说明
InnoDB存储格式
对于InnoDB存储引擎,高性能版云数据库默认使用DYNAMIC格式。建议用户不要自行修改,以免影响使用。
 
支持的最大并发事务数
云数据库支持的最大并发事务数为1000。
 
InnoDB支持的记录行内最大长度
高性能版InnoDB的支持记录行内最大长度为1982个字节;超过该值,会出现如下错误:
ERROR1118 (42000): Row size too large. The maximum row size for the used table type,not counting BLOBs, is 1982. You have to change some columns to TEXT or BLOBs
建议用户尽量减小记录行内的存储长度。比如,尽量将varchar的字段长度声明为256或者以上(这样字段会行外存储),或者使用text/blob代替。

10.云数据库不能单独访问,需要搭配云服务器使用


 
第四部分:云数据库的常见问题

1.在很短的时间,送入了N条SQL语句给云数据库执行,此时云数据库会逐条执行,还是卡死?如果会卡死,那么同时的连接并发数限制是多少?
云数据库提供的MySQL实例与平时我们自己安装的MySQL实例是一样的。并发执行的语句是否会卡死跟系统资源和SQL语句本身有关。
如果连接数max_connections到达极限值,那么该实例基本上已经无法正常提供服务,一般是由以下原因造成的:
(1)业务程序bug导致的空连接过多;
(2)前端过来的访问远远超出实例的处理能力;
(3)某个连接执行了太久地占用了MySQL的独占资源,导致大量的访问请求被阻塞。

 
2.云数据库连接故障诊断及解决方案
当使用云数据库出现连接故障时,首先确认你的云数据库实例的IP、端口、用户、密码,然后在你的应用机器上通过命令行登录云数据库:
mysql -h IP -P 端口号 -u root -p 云数据库密码
下面是出现的问题类型及解决方案:
(1)ERROR 1045(28000):Access denied for user...
当出现“Access denied for user ‘xxx’@‘x.x.x.x’(using password:YES)”的提示语时,表明密码不正确。
请确认你输入的云数据库密码是否正确,如果重复输入正确信息后仍然报该错,则请通过企业QQ联系技术支持。
 
(2)ERROR 1040(00000):Too many connections
当出现“ERROR 1040(00000):Too many connections”的提示语时,表明云数据库实例当前最大连接数超过了限制(云数据库实例的最大连接数限制详见这里)。
请检查程序,适当减少数据库的连接数。如果减少连接数后仍然报该错,则请通过企业QQ联系技术支持。
 
(3)ERROR 2003 (HY000): Can't connect to MySQL server...
当出现“ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)”的提示语时,表明云数据库地址不能连通,请确认你输入的云数据库的IP、端口信息是否正确。如果重复输入正确信息后仍然报该错,则请通过企业QQ联系技术支持。

 
3.云数据库后面是否是实体机?
云数据库后面是实体机。

4.云数据库会帮我做分库分表吗?
因为分库分表的标准和业务逻辑相关,所以云数据库不会帮业务做分库分表。

5.开发者自己如何备份数据?
云数据库实例每天会进行全量备份,开发者也可以采用云数据库提供的多线程快速导入导出工具进行备份,或者通过mysqldump工具自己备份数据。

6.云数据库占用空间与使用空间的区别?
开发者看到的云数据库占用空间会大于使用空间,这是由于统计占用空间的时候包含了binlog等日志数据。云数据库是按实际使用空间计费的。

7.如何申请云数据库实例slave只读权限开放/关闭?
如果需要开放/关闭slave只读,请按照模版提交工单申请。

8.云数据库的慢查询时间是多久
云数据库的慢查询时间(long_query_time)的默认值是10秒,用户可以自行修改,命令如下:
setglobal long_query_time = 1;

9.为什么查看云数据库中的中文数据时出现乱码?
开发者将数据存储到云数据库中时,请先到管理中心云数据库的“管理视图”页面查看该实例的默认字符集,在编写程序时,将character_set_client、character_set_results、character_set_connection设置为和云数据库实例相同的字符集。否则,如果存储的数据中有中文,会出现中文数据乱码的现象。
例如:云数据库实例的默认字符集为utf8,在编写程序连接数据库时,需要先执行以下语句,再将中文数据存储到云数据库。
SETNAMES 'utf8';

 
 
10.能否通过公网访问数据库
云数据库目前不提供公网的访问地址,无法直接通过公网IP进行访问。如果您需要通过公网访问,可以通过在有公网IP的云服务器上搭建MySQL Proxy的方式,利用MySQL Proxy进行访问。
详细请参考MySQL Proxy官方手册。
搭建方法参考如下:
或者参考
如果没有成功启动,欢迎咨询我们。

11.phpMyAdmin上传文件的限制
云数据库目前可以通过phpMyAdmin导入/导出sql数据文件。在导入上传文件时,文件必须是sql文件或者压缩(tar、bz2、zip)的sql文件,而且文件的大小不能超过2M。

12.如何导出数据库数据?
如果需要导出冷备数据,请使用冷备提取工具导出 
如果需要导出实时数据,可以申请从库访问权限,通过从库mysqldump获取

13.为什么云数据库默认会有tencentroot这个用户?
tencentroot是云数据库的内部系统管理帐户。为确保云数据库的正常工作,切勿删除该帐户。

14.如何获知云数据库磁盘空间不足了?
监控中心对云数据库的磁盘空间进行了监控,当云数据库的使用空间超过90%的时候就会触发短信和邮件告警,这里只需要在云监控中配置好对应的告警接收人,当空间不足的时候就能收到告警。

 
15.有云服务器各版本的性能比对说明么
性能对比测试请参考
 

16. 可以使用CVM搭建CDB的从库么