• [技术干货] MySQL的基础语句
    创建数据库:create database test1 ;查看数据库:show databases;选择数据库:use mysql;删除数据库:drop database test1;创建表:CREATE  [TEMPORARY]  TABLE  [IF NOT EXISTS] [database_name.] <table_name> (   <column_name>  <data_type>  [[not] null],… )注:TEMPORARY:指明创建临时表  IF NOT EXISTS:如果要创建的表已经存在,强制不显示错误消息  database_name:数据库名  table_name:表名  column_name:列名  data_type:数据类型  查看定义:desc emp;查看创建的表:show create table emp ;更新表名: alter table emp rename users;删除表:drop table emp;修改表字段:alter table emp modify ename varchar(30);增加表字段:alter table emp add column age int(3);修改表字段:alter table emp change age age int(4);删除表字段:alter table emp drop column age;change和modify:前者可以修改列名称,后者不能.  change需要些两次列名称.字段增加修改 add/change/modify/ 添加顺序:1 add 增加在表尾. 2 change/modify 不该表字段位置. 3 修改字段可以带上以下参数进行位置调整(frist/after column_name); alter table emp change age age int(2) after ename; alter table emp change age age int(3) first;插入记录://指定字段, //自增,默认值等字段可以不用列出来,没有默认值的为自动设置为NULL insert into emp (ename,hiredate,sal,deptno) values ('jack','2000-01-01','2000',1); //可以不指定字段,但要一一对应 insert into emp values ('lisa','2010-01-01','8000',2);批量记录:insert into emp values ('jack chen','2011-01-01','18000',2),('andy lao','2013-01-01','18000',2);更新记录:update emp set sal="7000.00" where ename="jack"; update emp e,dept d set e.sal="10000",d.deptname=e.ename where e.deptno=d.deptno and e.ename="lisa";删除记录://请仔细检查where条件,慎重 delete from emp where ename='jack';12查看记录://查看所有字段 select * from emp; //查询不重复记录 select distinct(deptno) from emp ; select distinct(deptno),emp.* from emp ; //条件查询 //比较运算符: > < >= <= <> != ... //逻辑运算符: and or ... select * from emp where sal="18000" and deptno=2;1234567891011排序//desc降序,asc 升序(默认) select * from emp order by deptno ; select * from emp order by deptno asc; select * from emp order by deptno desc,sal desc;限制记录数:select * from emp limit 1; select * from emp limit 100,10; select * from emp order by deptno desc,sal desc limit 1;聚合:函数:count():记录数 / sum(总和); / max():最大值 / min():最小值select count(id) from emp ; select sum(sal) from emp ; select max(sal) from emp ; select min(sal) from emp ;group by分组://分组统计 select count(deptno) as count from emp group by deptno; select count(deptno) as count,deptno from emp group by deptno; select count(deptno) as count,deptno,emp.* from emp group by deptno;having 对分组结果二次过滤:select count(deptno) as count,deptno from emp group by deptno having count > 2;with rollup 对分组结果二次汇总:select count(sal),emp.*  from emp group by sal, deptno with rollup ;表连接:left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录;right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录;inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行;full join:外连接,返回两个表中的行:left join + right join;cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。内连接:只返回两个表中连接字段相等的行select * from emp as e,dept as d where e.deptno=d.deptno; select * from emp as e inner join dept as d on e.deptno=d.deptno;左外连接:包含左表中所有的记录以及右表中连接字段相等的记录select * from emp as e left join dept as d on e.deptno=d.deptno;右外连接:包含右表中所有的记录以及左表中连接字段相等的记录select * from emp as e right join dept as d on e.deptno=d.deptno;子查询://=, != select * from emp where deptno = (select deptno from dept where deptname="技术部"); select * from emp where deptno != (select deptno from dept where deptname="技术部"); //in, not in  //当需要使用里面的结果集的时候必须用in();  select * from emp where deptno in (select deptno from dept where deptname="技术部"); select * from emp where deptno not in (select deptno from dept where deptname="技术部"); //exists , not exists //当需要判断后面的查询结果是否存在时使用exists(); select * from emp where exists (select deptno from dept where deptno > 5); select * from emp where not exists (select deptno from dept where deptno > 5);
  • [技术干货] Myqsl数据库的本地连接和用户管理
    命令行连接MySqlwin+r : mysql -u root -p -> 输入密码 -> 进入数据库远程连接数据库win+r:mysql -h 远程数据库IP -u user_name -p passwordexit -> 退出mysql的初始化,生成date文件夹并初始化密码通过CMD进入MySQL安装路径的bin 目录下:mysqld --initialize 或 mysqld --initialize-insecure随机密码文件是xxx.err 的文件,xxx还会有一个pid 文件,作用待究在xxx.err文件中找到[Note] A temporary password is generated for root@localhost:,“:”后面就是初始化得到的密码用户管理SHOW GRANTS FOR user_name(@'localhost'); SELECT USER,Db,HOST,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv FROM mysql.db;/*自己写一个取某个表的各字段名称的函数.参数:@prefix前缀     @tablename 表名.返回:该表的所有字段的字符串.*/CREATE FUNCTION [dbo].[dev_fns_GetColStr] (@prefix varchar(20),@tablename varchar(200))   RETURNS varchar(1000) AS   BEGIN  declare @str varchar(1000) select @str='' select @str=@str+@prefix+[name]+',' from syscolumns where [id]= object_id(@tablename) order by colorder if len(@str)>0 select @str=left(@str,len(@str)-1) return @str END用户名更改rename user 'aaa'@'%' to 'bbb'@'%';修改my.cnf,在mysqld配置节点添加skip-grant-tables配置skip-grant-tables重启SQL服务service mysqld restart修改密码update user set authentication_string=password('123456') where user='root';(5.7版本之后)创建用户并设置权限格式:grant 权限(具体可控制权限见下表) on DataBase_Name(*表示所有数据库).Table_Name(*表示所有数据库) to 用户名@登录主机(%表示任何机器) identified by '密码'(可以为空,表示此用户没有密码) with grant option(允许用户将自己的权限授权给其它用户);增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令: grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";  //如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。  //如果你不想user1有密码,可以再打一个命令将密码去掉。  grant select,insert,update,delete on mydb.* to user1@localhost identified by "";  grant all privileges on user_name.* to sunxiao@localhost identified by 'password';用户权限管理主要作用: 1. 可以限制用户访问哪些库、哪些表 2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、INSERT、ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用户自己的权限是否可以授权给别的用户修改密码:首先在DOS 下进入mysql安装路径的bin目录下,然后键入以下命令:mysqladmin -uroot -p123 password 456;创建用户:CREATE USER 'user_name'@'host' IDENTIFIED BY 'password';查看用户:SELECT user,host,authentication_string FROM mysql.user;修改权限:GRANT privileges(权限) ON database_name.table_name TO 'user_name'@'host';撤销用户权限:REVOKE privilege(可以撤销部分权限) ON DB_name.T_name FROM 'user_name'@'host';查看用户权限:在mysql.db中记录所有用户的权限删除用户:DROP USER 'user_name'@'host';
  • [技术干货] Mysqldump的6大使用场景的导出命令
    背景描述Mysqldump是MySQL最常用的逻辑导入导出的工具,下面介绍几种常见使用场景。Mysqldump选项解析表1选项名称说明add-drop-table每个数据表创建之前添加drop数据表语句。events,E导出事件。routines,R存储过程以及自定义函数。flush-logs开始导出之前刷新日志。no-create-db,n只导出数据,而不添加CREATE DATABASE语句。add-drop-database创建数据库之前添加drop数据库语句。no-create-info,t只导出数据,而不添加CREATE TABLE语句。no-data,d不导出任何数据,只导出数据库表结构。set-gtid-purged=OFF不导出gtid相关语句。hex-blob使用十六进制格式导出二进制字符串字段。场景描述适用场景举例如下。导出db1、db2两个数据库的所有数据。mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob --set-gtid-purged=OFF --single-transaction --order-by-primary --flush-logs -q --databases db1 db2 >db12.sql导出db1库的t1和t2表。mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob --set-gtid-purged=OFF --single-transaction --order-by-primary --flush-logs -q --databases db1 --tables t1 t2 >t1_t2.sql条件导出,导出db1表t1中id=1的数据。mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob --set-gtid-purged=OFF --single-transaction --order-by-primary --flush-logs -q --databases db1 --tables t1 --where='id=1'>t1_id.sql导出db1下所有表结构,而不导出数据。mysqldump -uroot -p -P8635 -h192.168.0.199 --no-data --set-gtid-purged=OFF --single-transaction --order-by-primary -n --flush-logs -q --databases db1 >db1_table.sql除db1下的表和数据外,其他对象全部导出。mysqldump -uroot -p -h192.168.0.199 -P8635 --set-gtid-purged=OFF -F -n -t -d -E -R db1> others.sql
  • [技术干货] 解决数据库查询运行缓慢的问题
    通过查看慢SQL日志来确定是否存在运行缓慢的SQL查询以及各个查询的性能特征(如果有),从而定位查询运行缓慢的原因。查询MySQL日志,请参见慢查询日志。查询PostgreSQL日志,请参见查看错误日志。Microsoft SQL Server可以通过查询DMV视图,从而定位查询运行缓慢的原因,有关使用DMV的信息,请参见官网信息。查看华为云关系型数据库实例的CPU使用率指标,协助定位问题。请参见通过Cloud Eye监控。创建只读实例专门负责查询。减轻主实例负载,分担数据库压力。多表关联查询时,关联字段要加上索引。尽量避免用select*语句进行全表扫描,可以指定字段或者添加where条件。
  • 数据库登录失败的常见原因有哪些
    数据库用户或密码问题类报错信息为:“Access denied for user 'myuser'@'100.xxx.xx.xx' (using password: YES)”。(1)报错原因:MySQL数据库账户名或密码不对。解决方法:请确认数据库账户名和密码是否正确。如果确认账户名和密码正确,可以通过客户端或命令行工具登入数据库,执行select * from mysql.user where user = 'myuser'命令查看用户信息,如果存在100.%网段的用户,则myuser@%与myuser@100.%是两个用户,其密码和权限都是独立的,DAS只能通过100.%网段的数据库用户去连接数据库,请确认输入的密码是否是100.%网段用户的密码。(2)报错原因:DAS服务器的IP地址不在您输入用户的白名单中解决方法:先用客户端或命令行工具登入到数据库,创建DAS可以访问的数据库用户create user 'das'@'100.%' identified by 'password'; grant all privileges on *.* to 'das'@'100.%';报错信息:“Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server xxx.xxx.xx.xx:8635. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" ”。报错原因:DDS用户名或密码不对,或者输入的数据库与账户名不匹配。解决方法:请确认用户名和密码是否正确,并确认输入的账号名是否是输入的数据库下的账号。报错信息:“Login failed for user 'root'. ClientConnectionId:XXX”。报错原因:SQLServer数据库账户名或密码不对。解决方法:请确认数据库账户名和密码是否正确。报错信息:“Connection refused (Connection refused)”。报错原因:PostgreSQL数据库账户名或密码不对。解决方法:请确认数据库账户名或密码是否正确。报错信息:“Host 'xxx.xxx.xx.xx' is not allowed to connect to this MySQL server.”。报错原因:您输入的数据库用户不允许远程登入MySQL(如root用户,mysql.user表中只设置了root@localhost用户,指定用户只能本地登入)。解决方法:先用客户端工具或命令行本地登入MySQL,创建可以远程登入的用户。create user 'das'@'%' identified by 'password'; grant all privileges on *.* to 'root'@'%';或者只指定DAS服务器的IP能登入数据库。create user 'das'@'100.%' identified by 'password'; grant all privileges on *.* to 'root'@'100.%';网络问题类报错信息:“Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server”。(1)报错原因:ECS设置的安全组规则不支持此端口被访问。解决方法:单击ECS实例的“安全组”,查看自建库端口是否在入方向规则中。如果不在,可以新增一条入方向规则,确保端口与ECS自建库保持一致,源IP地址建议设置为0.0.0.0/0或DAS服务器IP地址100.0.0.0/8。(2)报错原因:ECS虚拟机设置的防火墙策略不允许此端口被访问。解决方法:远程登入ECS虚拟机,通过输入iptables -S命令查看iptables配置。如果自建库端口号没在开放的白名单中,您可以新增一条iptables规则或通过systemctl stop iptables命令关闭防火墙,保证端口能被访问。报错信息:“The TCP/IP connection to the host 100.xxx.xx.xx, port XXX has failed.”。报错原因:SQLServer自建库输入的端口号不正确。解决方法:请确认输入的自建库端口号是否正确,并且放通了安全组规则和防火墙白名单。权限问题类报错信息:“很抱歉,您没有数据管理服务(DAS)的访问权限”。报错原因:您的华为云账号没有添加DAS Administrator权限。解决方法:请参考创建用户并授权使用DAS,添加DAS Administrator权限。报错信息:“您当前登录的账号仅具有只读权限,不能执行此操作。为确保您顺利使用DAS,请添加DAS Administrator权限”。报错原因:您的华为云账号没有添加DAS Administrator权限。解决方法:请参考创建用户并授权使用DAS,添加DAS Administrator权限。报错信息:“查询不到实例信息”。报错原因:请您确认当前华为云账户是否是委托账户,DAS目前暂不支持委托账户登录。解决方法:DAS目前暂不支持委托账户登入,请切换至非委托账户登录。
  • [行业资讯] 华为云数据库热门问答
    Q1:2019华为全联接大会推出哪些云上数据库“黑科技”呢?A:华为云数据库发布3款分布式数据库新品TaurusDB、GeminiDB、GaussDB及两大解决方案——MySQL云灾备、RDS for MCS,聚焦金融、互联网、车企、物联网、游戏、ISV等行业,提供覆盖六大行业典型场景的完整数据库解决方案。 Q2:云上数据库和自建数据库有什么区别,云上数据库最大的优势在哪?A:自建开源数据库依赖专业DBA和数据库技术人员等手工下载版本、补丁、分析Bug情况,然后人工安装部署,面临各种运维难题。而云数据库能够让您几分钟内申请到一个基本能解决上述所有问题的数据库实例。云端完全托管各类管理任务(如硬件扩容、数据库设置、补丁升级和备份恢复),同时华为云有强大的技术团队保障修改数据库社区还未来得及修改的Bug的能力,从而保证可用率高达99.95%,让您专注于应用程序开发,远离数据库运维的烦恼。 Q3:OLTP VS OLAP的区别A:按数据应用场景分类:分为OLTP和OLAP数据库。OLTP是传统关系型数据库的主要应用,主要是基本的、日常的事务处理场景,例如人们到银行去取1000块所发生的背后交易所用到的数据库场景。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,如银行给个人授予100万的贷款额度(授信),需要进行大数据分析的数据库场景。 Q4:关系型数据库 VS NoSQL数据库的区别A:按数据结构分类:关系型数据库是基于关系模型来组织数据的数据库,具有数据存储结构化、数据强一致性等特点,(TaurusDB、MySQL、PostgreSQL、SQL Server等),NoSQL数据库用于存储一些非结构化数据,如图片、文档、地理位置信息等(DDS、多模NoSQL服务、Redis等)。 Q5:TaurusDB VS 开源MySQLA:开源MySQL主要满足中小型业务系统的需求(QPS<12万),基本无法满足大型业务负载;而TaurusDB依托华为云最新一代硬件专为大型业务系统设计和打造,在完全兼容MySQL基础上性能提升高达7倍,百万级QPS,扩展性较非云源生数据库提升5倍,支持1写15读;容量支持最大128T;在数据0丢失的前提下,故障秒级恢复。 Q6:多模NoSQL服务GeminiDB中的多模是什么意思?GeminiDB有哪些黑科技优势?A:多模是多种数据模型的意思。当前GeminiDB已支持Cassandra接口、MongoDB接口,后续还会支持更多主流NoSQL接口。GeminiDB基于华为云最新一代DFV计算存储分离架构,实现分钟级扩展;相比于社区版和其它友商的基于开源的服务化版本,大幅优化长尾时延,集群更稳定,备份恢复性能提升5+倍,被2019中国数据库技术大会(DTCC)评选为年度最佳创新产品。 Q7:数据库迁移时,怎么保证对业务没有影响?DRS迁移时如何确保数据不丢失?A:DRS迁移时,对源数据仅仅是做最轻量的查询,没有任何锁等额外动作,同时对数据进行切片抓取,最小粒度的进行迁移,避免对源库产生大的性能消耗,同时业内独有的流控技术,限制流量的开销,避免对业务产生影响;DRS不但能检查迁移的一致性,而且很多贴心的设计确保迁移时数据不丢失。 Q8:DRS数据库迁移这方面有哪些客户案例吗?A:华为云DRS已成功支撑包括金融、互联网、车企、物联网、游戏、ISV 六大行业上千家企业云上迁移。锦江都城依托华为云DRS,仅用1小时就完成了原定约5小时的迁移,整体负载压力由80%降至20%,关键业务流程效率提升36倍,成为酒店管理行业云上迁移解决方案的典范。 Q9:华为云数据库的去O方案是什么?A:目前全球没有一家厂商能够提供百分百完全兼容Oracle的替代产品,但华为云数据库PG增强版,Oracle语法兼容性90%以上,仅需做部分边缘业务改造就可以完成去O目标,目前华为云已成功帮用友、金蝶、赛云等多个企业领先行业完成Oracle改造上云。 Q10:GaussDB和TaurusDB、GeminiDB三者的关系?A : TaurusDB和GeminiDB都是华为云基于主流开源版研发的分布式数据库,性能、可靠性、容量、扩展性等远远优于开源版。TaurusDB是关系型数据库MySQL的优化版,适用于传统OLTP场景。GeminiDB的定位是NoSQL领域,兼容MongoDB、Cassandra等多个主流NoSQL接口,产品已上线。而GaussDB是国产数据库代表产品,自主可控,是基于鲲鹏架构的OLTP数据库,适用于政企、银行、保险等(国家要求只能用国产数据库的行业,场景),并且GaussDB能高度兼容Oracle常用语法,预计将在2019年12月份正式公测。这十个问题涵盖了分布式数据库TaurusDB、GeminiDB、DRS迁移、GaussDB等相关数据库问题,聚焦客户痛点,为六大行业提供了新颖独特的解决方案。未来,华为云将持续构建业内顶尖的技术资源,为客户提供更高价值的数据库解决方案、产品和服务。
  • [行业资讯] 初识数据管理服务DAS
    什么是数据管理服务DAS ?数据管理服务( Data Admin Service,简称DAS),是一种提供登录和操作数据库的Web版服务。提供执行SQL语句、数据库日常管理、智能化运维等功能旨在帮助华为云用户易用、安全、智能的管理数据库,构建基于云生态的数据库管理**服务。数据管理,DAS可以为您做什么?面向程序员面向DBA面向运维面向安全通过数据库可视化操作,更加高解放DBA ,轻松管理,聚焦于文快速的完成数据库相关开发数据库架构设计等更大价值的工作。从实际场景和痛点出发,通过AI即将 上线DAS企业版,全面接和大数据;提供更加智能化的分入安全管控能力 ,满足企业级析和诊断能力和数据库管理诉求。数据管理,为什么选择DAS ?易用免安装、可视化的连接和管理云上数据库.支持多种数据库类型和ECS自建库等。安全无须开通公网IP和额外白名单设置、拒绝非实例资源所有者登录数据库。高级提供binlog数据追踪与回滚、周期性SQL任务调度、10G的SQL文件导入等高级管理功能。智能.一键识1nnoDB锁等待、 慢SQL诊断及索引优化建议、实时性能看板等智能化运维能力。DAS功能模块功能一库管理基于库维度的管理方式,在库级别提供日常大部分数据库管理功能,快速生成表的测试数据等,数据库管理更为便捷简单。功能二SQL窗口SQL智能提示能力进一步提升,用户输入SQL更加方便、流畅。交互体验流畅,企业的好帮手。提供详细的日志追踪记录并支复杂、极端的SQL语句写法,支持导出,您可以在导出的任何保障SQL语句拆分准确性。阶段主动终止该任务,及时规避可能对库产生的性能影响。最大支持可随时主动10G导入终止导出日志云DBA服务新增云DBA服务模块,使用A技术,与实例的性能数据相结合,国的智能化的预测出实最优的参数设置方案。智能诊断反馈,让数据库的性能状态更赞。数据追踪与回滚面对误操作或者bug引起的不必要数据篡改等问题,支持您进行核心数据变更审计,统计变更数量,查看敏感变更日志 ;帮您找回误篡改数据,恢复数据生命力。重数把算正。DAS具有可视化的操作界面,提供便捷云上管理,助力企业用好数据库。
  • [技术干货] RDS的高可用和高可靠
     对于数据库来说,可用性和可靠性是永恒的话题,DBA会按照业务的不同要求选择不同的策略保证系统正常运作,其中包含数据库本身内核提供的能力和外部的监控管理系统。商用数据库提供全套的管理系统,缺点只有一个,贵。开源数据库也有很多生态工具以及借助于其他组件的解决方案,也能完成相应功能,但有一定的技术门槛和维护成本。   云数据库服务以较低的价格提供了企业级的解决方案,并节省了运维成本,只需要配置,服务就能按照业务诉求执行不同的管理策略,是企业的高性价比选择。 而不同的云厂商提供的方案和策略也是不同的。首先从底层实现上,有两类,1是通过底层能力,比如AWS的DRBD方案,类似传统shared disk的冷备方案。 其他大部分厂商都利用数据库本身的能力即数据库主备同步的方式来实现。  MySQL有两种replication模式:  异步: 主机事务提交不会确认备机是否接到数据,写入和数据传输是个异步过程,主机性能比较好。  半同步:通常情况下主机会等待备机收到同步过去的binlog才提交数据,这样能保证数据不丢失。但是这个能否保证数据不丢失呢? 答案是否定的,当网络异常或其他因素影响时,复制方式会降为异步。 所以半同步大体来说就是尽量保证数据不丢,但是在异常场景下还是可用性优先。华为RDS是怎么做的呢?  首先在客户可以选根据业务可以选择复制模式, 如果业务有对账系统,希望保证最大的可用性和性能可以选择异步; 如果对可靠性要求较高可以选择半同步。  另外还增加了HA策略选择,客户可以选择高可用模式和高可靠模式。 HA monitor除了对主备实例进行健康检查以外还记录主备的同步情况;在高可用模式下发现故障直接切换。高可靠模式是HA monitor会根据当前的主备延迟进行判断,达到一定阈值则进行可靠性保护,不进行切换,保证数据库的可靠性。有了这两种设置,客户可以充分的根据业务进行灵活选择。  除了HA处理外,华为云还提供了补偿机制,可以将HA丢失数据找回,支持事后对账。当主备切换原主恢复后,会与原备新主做数据检查,将丢失的部分数据生成一个“碎片备份”, 客户可以在备份列表中看到,然后根据业务需要选择将这部分数据进行恢复。  上面是华为在云服务化方面的优化处理,提供了强大的管理能力。 而在内核优化版本HWSQL上,更是结合内核和服务化进一步优化:进行了半同步模式性能优化、并行复制等优化,半同步模式下性能损耗大幅降低,加上其他方面的性能优化,在半同步模式下HWSQL也能提供业界领先的性能表现,自信屏蔽异步模式。  在HA策略上,提供探针和降异步接口,控制降异步的过程,根据客户的选择可以提供强同步模式,保证数据0丢失。 在此模式下,如果故障则不进行切换,但是对于故障不会置之不理,虚拟化层的可靠性策略可以进行虚拟机层的HA漂移,将原主恢复。从服务化到数据库内核到底层平台,华为RDS提供了360度的数据库SLA保障。
  • [技术干货] 数据库设计的三大范式(通俗易懂)
            关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库.                目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。                范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦,但是操作困难,因为需要联系多个表才能得到所需要数据,而且范式越高性能就会越差。要权衡是否使用更高范式是比较麻烦的,一般在项目中,用得最多的也就是第三范式,我认为使用到第三范式也就足够了,性能好而且方便管理数据。                函数依赖,如果一个表中某一个字段Y的值是由另外一个字段或一组字段X的值来确定的,就称为Y函数依赖于X。                第一范式(1NF)             定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式。             简单的说,每一个属性都是原子项,不可分割。             1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库。关系数据库设计研究的关系规范化是在1NF之上               进行的。                例如(学生信息表):            学生编号  姓名  性别  联系方式            20080901  张三  男   email:zs@126.com,phone:88886666            20080902  李四  女   email:ls@126.com,phone:66668888                以上的表就不符合,第一范式:联系方式字段可以再分,所以变更为正确的是:               学生编号  姓名  性别  电子邮件   电话            20080901  张三  男   zs@126.com 88886666            20080902  李四  女   ls@126.com  66668888      第二范式(2NF)        定义:如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么就称R是第二范式。简单的说,第二范式要满足以下的条件:首先要满足第一范式,其次每个非主属性要完全函数依赖与候选键,或者是主键。也就是说,每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定。                例如(学生选课表):            学生    课程   教师    教师职称  教材          教室    上课时间            李四    Spring  张老师   java讲师   《Spring深入浅出》    301   08:00            张三    Struts  杨老师   java讲师  《Struts in Action》     302   13:30                这里通过(学生,课程)可以确定教师、教师职称,教材,教室和上课时间,所以可以把(学生,课程)作为主键。但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。这就叫不完全依赖,或者部分依赖。出现这种情况,就不满足第二范式。                修改后,选课表:            学生    课程    教师    教师职称  教室  上课时间             李四    Spring  张老师   java讲师  301  08:00             张三    Struts   杨老师   java讲师  302  13:30                课程表:        课程           教材                Spring      《Spring深入浅出》         Struts       《Struts in Action》                所以,第二范式可以说是消除部分依赖。第二范式可以减少插入异常,删除异常和修改异常。                第三范式(3NF)            定义:如果关系模式R是2NF,且关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式。            简单的说,第三范式要满足以下的条件:首先要满足第二范式,其次非主属性之间不存在函数依赖。由于满足了第二范式,表示每个非主属性都函数依            赖于主键。如果非主属性之间存在了函数依赖,就会存在传递依赖,这样就不满足第三范式。                上例中修改后的选课表中,一个教师能确定一个教师职称。这样,教师依赖于(学生,课程),而教师职称又依赖于教师,这叫传递依赖。第三范式就是要消除传递依赖。                修改后,选课表:           学生    课程   教师    教室  上课时间            李四    Spring  张老师   301 08:00            张三    Struts  杨老师   302 13:30                教师表:             教师    教师职称             张老师   java讲师            杨老师   java讲师                这样,新教师的职称在没被选课的时候也有地方存了,没人选这个教师的课的时候教师的职称也不至于被删除,修改教师职称时只修改教师表就可以了。        简单的说,             第一范式就是原子性,字段不可再分割;             第二范式就是完全依赖,没有部分依赖;             第三范式就是没有传递依赖。
  • [技术干货] RDS主备复制关系异常,如何处理?
    场景描述有时候客户会遇到RDS主备复制关系异常的情况,可能原因是误删除默认安全组策略,下面主要针对这个场景进行分析,供您参考。解决方案 步骤 1    登录管理控制台。 步骤 2     单击管理控制台左上角的  ,选择区域和项目。               您可选择自己的专属计算集群(DedicatedCoumputing Cluster ,简称DCC)创建实例。步骤 3     选择“数据库> 关系型数据库”。进入关系型数据库信息页面。步骤 4     在“实例管理”页面,选择指定的实例,单击实例名称。步骤 5     在“基本信息”页面,单击目标安全组名称,进入实例安全组页面。步骤 6     单击“添加规则”,选择入方向,Any协议,源地址为自身安全组,即安全组的远端要有安全组自己 。步骤 7   添加完策略之后准备复制的关系就恢复正常了。
  • [技术干货] 如何对RDS慢日志进行查询
    场景描述慢日志记录执行时间超过slowms设定值的语句(默认100ms),通过该日志,可查找出执行效率低的语句,以便优化。解决方案步骤 1     登录管理控制台。步骤 2     单击管理控制台左上角的  ,选择区域和项目。您可选择自己的专属计算集群(DedicatedCoumputing Cluster ,简称DCC)创建实例。步骤 3     选择“数据库> 关系型数据库”。进入关系型数据库信息页面。步骤 4     在数据库“实例管理”页面,查看RDS实例的数据库版本。步骤 5     单击导航树“参数组管理”进入参数组管理页面。步骤 6     单击“创建参数组”,创建同数据库版本的新参数组。步骤 7     单击目标参数组名称,对参数组的参数进行编辑,选择字符串为long_query_time=1并保存。步骤 8     在“实例管理”页面单击目标实例操作栏“更多> 变更参数组”,在“变更参数组”弹框选择本次创建的参数组。单击目标实例操作栏的“更多> 重启实例‘’,重新启动实例。步骤 9     连接RDS数据库。步骤 10    执行两条语句,让执行的时间超过1s。步骤 11    查看慢日志中的记录。转自华为云
  • [技术干货] 如何查看RDS存储空间使用量
    场景描述RDS的存储空间为客户购买的数据盘存储,不包括客户后台ECS虚拟机的系统盘。云监控(CES)目前可以对客户存储空间的大小、使用量、利用率等作出监控及设置告警策略,但不能查看RDS存储空间使用量。解决方案步骤 1    登录管理控制台。步骤 2    单击管理控制台左上角的 ,选择区域和项目。您可选择自己的专属计算集群(DedicatedCoumputing Cluster ,简称DCC)创建实例。步骤 3     选择“数据库> 关系型数据库”。进入关系型数据库信息页面。步骤 4     在“实例管理”页面,选择指定的实例,单击实例名称。步骤 5     进入“基本信息”页面。在“空间信息”模块查看存储空间类型和使用情况。----结束说明:存储空间使用量大于用户数据的原因:RDS存储空间中存储的数据为数据文件和bin-log日志文件。l  如果用户开启自动备份策略,备份的bin-log日志文件会存储在用户的存储空间且存储时间由expire_logs_days参数设置决定。l  用户对数据库进行压力测试或者某一时间段业务量较大,也会有大量bin-log日志占用存储空间,导致存储空间使用率上升。建议:若开启了自动备份策略,把expire_logs_days(保留天数)参数调小,在保证客户数据安全的前提下,减少存储空间使用率。转自华为云
  • [技术干货] mysql远程连接报错,如何处理?
    场景描述客户远程连接(包括telnet3306端口)MySQL时报错:Host * is not allowed to connectto this MySQL server。问题分析一般是由于帐号不允许远程登录,只能在localhost登录造成。解决方案目前针对这种情况,我们提供了两种解决方案:方案一:改表法 可能该帐号不允许远程登录,此时,需在安装localhost 的电脑登录mysql,并更改 “mysql 数据库 > user表 > host项 > localhost”为"%"。执行如下命令:mysql -u root –ppasswd use mysql; mysql>update user set host = '%' whereuser = 'root'; mysql>select host, user from user; mysql>flush privileges;方案二:授权法l  若想实现myuser使用mypassword从任何主机连接到mysql服务器,在本地登录数据库后执行如下命令:GRANT ALL PRIVILEGES ON *.* TO'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;FLUSH PRIVILEGES;l  若想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码,执行如下命令:GRANT ALL PRIVILEGES ON *.* TO'myuser'@'192.168.1.6' IDENTIFIEDBY 'mypassword' WITH GRANT OPTION;FLUSH PRIVILEGES;在安装mysql的机器上运行如下命令:mysql -h localhost -u root//登录mysql>GRANT ALL PRIVILEGES ON *.* TO'root'@'%' WITHGRANT OPTION //赋予任何主机访问数据的权限mysql>FLUSH PRIVILEGES;//修改生效mysql>QUIT //退出MySQL服务器这样就可以实现在其它任何的主机上以root身份登录。目前我方云主机,在数据库开启允许远程后,如果仍无法连接可尝试清空防火墙以及开放安全组指定端口进行处理。
  • [技术干货] 通过本地连接华为云数据库MySQL
    目的:通过本地连接华为云数据库MySQL环境准备:1.Navicat本地数据库管理软件                  2.购买RDS for MYSQL 并创建实例        进入自己买的数据库的管理控制台界面,滑到"连接信息"处开启远程连接,这一步需要验证,验证一下就行开启远程连接之后,后面会自动生成一个ip地址设置远程连接白名单,如果是使用公网的话,建议使用0.0.0.0/0,私网的话就使用自己本地ip之后确定,然后就可以在自己本地通过Navicat连接到这个云数据库了只有两点需要注意:在管理控制台中允许远程连接和设置白名单;连接数据库使用的是主机ip号是允许远程连接后自动生成的ip地址,而且每次关闭开启后生成的ip都不相同,需要注意;使用上面的以168开头的内网地址ip,我们本地远程连接会报2003错误
  • 云数据库与自建数据库有什么不同?
        多人对数据库是什么还不是很明白,那么数据库到底是什么呢?传统数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。而云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。企业伴随着业务的增长,成倍增长的数据需要更多的存储空间,此时,云数据库有助于应对许多这些数据库方面的挑战。让用户能够在云中轻松设置、操作和扩展关系数据库,并可以充分结合公有云中的计算、网络与存储服务,从而以一种安全、可扩展、可靠的方式,迅速选择、配置和运行数据管理基础设施,使用户能专注于自身应用程序和业务。RDS是关系型数据库(Relational Database Service),一种基于云计算的可即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型云数据库服  务。虽然客户可以在云服 务器上自建MySQL,而其也会带有部分云特性:数据高可靠性保障、弹性扩展、基础运维等。但与在云服 务器自建数据库相比,RDS为单位提供更多的自动化服 务,如:数据库自动备份、IP白名单、详细的实时监控、容灾、读写分离等,还避免了云服 务器带来的异常,如云服 务器CPU偶尔会被mysql进程拉到100%。华云数据RDS提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,支持将本地数据库迁移到RDS,平滑完成数据库的迁移工作,彻底解决数据库运维的烦恼。云数据库的特性有:实例创建快速、支持只读实例、故障自动切换、数据备份、Binlog备份、访问白名单、监控与消息通知。由此可知道两者的不同,拿华为云来比较说明:1.在服务可用性方面和数据可靠性来说,华为云提供的云数据库RDS是99.95%可用的;而在自建数据库服务中,需自行保障, 自行搭建主从复制,自建RAID等。2.华为云数据库RDS可防DDoS攻击,流量清洗,能及时有效地修复各种数据库安全漏洞;而在自购服务器搭建的传统数据库,则需自行部署,价格高昂,同时也需自行修复数据库安全漏洞。3.华为云数据库RDS可自动为数据库进行备份,而自购服务器搭建的传统数据库需自行实现,同时需要寻找备份存放空间以及定期验证备份是否可恢复。4.华为云数据库RDS无需运维,而传统数据库需招聘专职DBA来维护,花费大量人力成本。5.华为云数据库RDS即时开通,快速部署,弹性扩容,按需开通,而传统数据库需硬件采购、机房托管、部署机器等工作,周期较长。6.华为云数据库RDS按实际结算,100%利用率,而自购服务器搭建的传统数据库需考虑峰值,资源利用率很低。通过上述比较可以看出,云数据库RDS产品是高性能、高安全、高可靠、便宜易用的数据库服务系统,并且可以有效地减轻用户的运维压力,为用户带来安全可靠的全新体验。