数据库,顾名思义,是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
而我们常说的数据库实际上是指管理数据库的软件系统,即数据库管理系统(DBMS),而这也是我们常说的关系型数据库。
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
目前主流的数据库管理系统有:Oracle、MySQL、SQL Server、MariaDB、PostgreSQL、DB2和Sybase等。
本文主要介绍MySQL。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
自甲骨文公司收购MySQL之后,MySQL在商业数据库与开源数据库领域的市场占有份额都跃居第一,这样的格局引起了部分业内人士的担忧,因为商业数据库的老大有可能将MySQL闭源,为了避免Oracle将MySQL闭源,而无开源的类MySQL数据库可用,MySQL社区采用了分支的方式——MariaDB数据库就这样诞生了,MariaDB是一个向后兼容的数据库产品,可能会在以后替代MySQL。
不过,这里还是建议大家选择更稳定且使用更广泛的MySQL数据库,可以先测试MariaDB数据库,等使用的人员多一些,社区更活跃后再正式考虑使用也不迟。
MySQL的特性
使⽤C和C++编写,并使⽤了多种编译器进⾏测试,保证源代码的可移植性
⽀持多种操作系统,如Linux、Windows、AIX、FreeBSD、HP-UXMacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等
为多种编程语⾔提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
⽀持多线程,充分利⽤CPU资源
优化的SQL查询算法,有效地提⾼查询速度
提供多语⾔⽀持,常⻅的编码如GB2312、BIG5、UTF8
提供TCP/IP、ODBC和JDBC等多种数据库连接途
提供⽤于管理、检查、优化数据库操作的管理⼯具
⼤型的数据库。可以处理拥有上千万条记录的⼤型数据库
⽀持多种存储引擎
MySQL 软件采⽤了双授权政策,它分为社区版和商业版,由于其体积⼩、速度快、总体拥有成本低,尤其是开放源码这⼀特点,⼀般中⼩型⽹站的开发都选择MySQL作为⽹站数据库
MySQL使⽤标准的SQL数据语⾔形式
Mysql是可以定制的,采⽤了GPL协议,你可以修改源码来开发⾃⼰的Mysql系统
在线DDL更改功能
复制全局事务标识
复制⽆崩溃从机
复制多线程
还有最重要的一点是:开源 免费 不要钱 使⽤范围⼴,跨平台⽀持性好,提供了多种语⾔的调⽤API
MySQL常用引擎及其优缺点:
MySQL的常用存储引擎有:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)等,最常用的是MyISAM与InnoDB两个引擎 。
InnoDB 引擎(MySQL5.5以后默认使用)
MyISAM引擎
MEMORY 存储引擎
MySQL存储引擎MyISAM与InnoDB如何选择
MySQL是一款开源的关系数据库产品,行业内大多对于MySQL的认知都是只能做小项目应用场景,适合中小企业。那么MySQL到底能否支持大型场景应用呢?
我们接下来介绍MySQL的大型场景应用,集群。
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能保证整个系统的高可用。对于数据库服务而言,高可用可能更复杂,对用户的服务可用,不仅仅是能访问,还需要有正确性保证,因此数据库的高可用方案是一直以来的讨论热点,今天就各种的高可用方案,谈一下个人的一些看法,如有错误,还请指正!!
在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:
关于对高可用的分级在这里我们不做详细的讨论,这里只讨论常用高可用方案的优缺点以及高可用方案的选型。
主从或主主半同步复制
此种架构,一般初创企业比较常用,也便于后面步步的扩展。
通常会和proxy、keepalived等第三方软件同时使用,即可以用来监控数据库的健康,又可以执行一系列管理命令。如果主库发生故障,切换到备库后仍然可以继续使用数据库。
优点:
缺点:
半同步复制机制是可靠的。如果半同步复制一直是生效的,那么便可以认为数据是一致的。但是由于网络波动等一些客观原因,导致半同步复制发生超时而切换为异步复制,那么这时便不能保证数据的一致性。所以尽可能的保证半同步复制,便可提高数据的一致性。
该方案同样使用双节点架构,但是在原有半同复制的基础上做了功能上的优化,使半同步复制的机制变得更加可靠。
半同步复制由于发生超时后,复制断开,当再次建立起复制时,同时建立两条通道,其中一条半同步复制通道从当前位置开始复制,保证从机知道当前主机执行的进度。另外一条异步复制通道开始追补从机落后的数据。当异步复制通道追赶到半同步复制的起始位置时,恢复半同步复制。
MySQL+MHA架构
MHA目前在Mysql高可用方案中应该也是比较成熟和常见的方案,它由日本人开发出来,在mysql故障切换过程中,MHA能做到快速自动切换操作,而且还能最大限度保持数据的一致性。
MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master,整个故障转移过程对应用程序完全透明。
MHA Node运行在每台MySQL服务器上,主要作用是切换时处理二进制日志,确保切换尽量少丢数据。
优点:
缺点:
MySQL+DRDB架构
DRBD是一种基于软件、基于网络的块复制存储解决方案,主要用于对服务器之间的磁盘、分区、逻辑卷等进行数据镜像,当用户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样的本地主机(主节点)与远程主机(备节点)的数据就可以保证实时同步。
当本地主机出现问题,远程主机上还保留着一份相同的数据,可以继续使用,保证了数据的安全。
DRBD是linux内核模块实现的快级别的同步复制技术,可以与SAN达到相同的共享存储效果。
优点:
缺点:
MySQL Cluster架构
MySQL Cluster 分布式集群是Mysql官方推出的集群高可用方案,通过使用NDB存储引擎实时备份冗余数据,实现数据库的高可用性和数据一致性。
优点:
缺点:
MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括 MySQL服务器,NDB Cluster的数据节点,管理服务器,以及(可能)专门的数据访问程序。
由于MySQL Cluster架构复杂,部署费时(通常需要DBA几个小时的时间才能完成搭建),而依靠 MySQL Cluster Manager 只需一个命令即可完成,但 MySQL Cluster Manager 是收费的。并且业内资深人士认为NDB 不适合大多数业务场景,而且有安全问题。因此,使用的人数较少。
MySQL+MMM架构
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器),是关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能基于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
优点:
缺点:
但在实际应用中,会采用多种方案的整合方案。
Oracle数据库是甲骨文公司推出的一款关系数据库管理系统,是当前数据库领域最有名、应用最广泛的数据库管理系统之一,Oracle产品覆盖了大、中、小型机等几十种机型。
Oracle数据库具有以下特点:
1、Oracle数据库可运行于大部分硬件平台与操作系统上。
2、Oracle能与多种通讯网络相连,支持多种网络协议。
3、Oracle的操作较为复杂,对数据库管理人员要求较高。
4、Oracle具有良好的兼容性、可移植性、可连接性和高生产率。
5、Oracle的安全性非常高,安全可靠。
MySQL也是一款关系型数据库管理系统,由MySQL AB 公司开发,目前属于 Oracle 旗下产品,MySQL 是最流行的关系型数据库管理系统之一。MySQL也是一款开源的SQL数据库管理系统,是众多小型网站作为网站数据库的选择。
MySQL数据库具有以下特点:
1、MySQL是开源的,可供用户免费使用。
2、MySQL支持多线程,充分利用CPU资源。
3、MySQL对 PHP有很好的支持,PHP是比较流行的 Web 开发语言,搭配 PHP 和 Apache 可组成良好的开发环境。
4、MySQL提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
Oracle VS MySQL
1 数据安全
对于Oracle和MySQL数据库用户来说,MySQL使用一系统的授权表来管理和跟踪用户权限。当对用户进行验证、授权、访问控制时,MySQL使用这些授权表。
1.1 数据库验证
与Oracle及其他多数数据库通过用户名和密码进行验证的机制不同,MySQL使用附加的location参数对用户时行验证。这个location参数经查是主机名称、IP地址或者为一个通配字符串。通过这个附加的参数,MySQL可以限制用户访问域中的某些主机。更进一步可以做到通过不同的主机登陆时有不同的密码和用户权限。也就是说用户名相同,但登陆主机的名称不同时,可能是不同的用户。
1.2 权限
MySQL的权限系统是通过继承形成的分层结构。权限授于高层时,其他低层隐式继承被授于的权限,当然低层也可改写这些权限。
按授权范围不同,MySQL有以下种授权方式:
1、全局;
2、基于每个主机;
3、基于表;
4、基于表列。
每一级在数据库中都有一个授权表。当进行权限检查时,MySQL从高到低检查每一张表,低范围授权优先于高范围授权。
与Oracle不同,MySQL没有角色的概念。也就是说,如果对一组用户授于同样的权限,需要对每一个用户分别授权。
2 模式迁移
模式包含表、视图、索引、用户、约束、存储过程、触发器和其他数据库相关的概念。多数关系型数据库都有相似的概念。
本节包含以下内容:
1、模式对象的相似性;
2、模式对象的名称;
3、表设计时的关注点;
4、多数据库整合;
5、MySQL模式整合的关注点。
2.1 模式对象的相似性
就模式对象,Oracle和MySQL存储诸多的相似,但也有一些不同。
2.2 模式对象的名称
Oracle是大小写不敏感的,并且模式对象是以在写时行存储。在Oracle的世界中,列、索引、存储过程、触发器以及列别名都是大小写不敏感,并且在所有的平台都是如此。MySQL是大小写敏感的,如数据库相对的存储路径、表对应的文件都是如此。
当把关键字用引号引起来时,Oracle和MySQL都允许把这些关键字用于模式对象。但MySQL对于一些关键字,不加引号也行。
2.3 表设计的关注点
本节主要讨论当把MySQL转为Oracle时需要注意的地方。主要包含以下两点:
1、字符数据的类型;
2、列默认值。
2.3.1 字符数据类型
MySQL和Oracle在字符型数据保存和读取上存在一些不同。MySQL的字符类型,如CHAR和VARCHAR的长度小于65535字节。Oracle支持4种字体类型:CHAR、NCHAR、NVARCHAR2和VARCHAR2。CHAR和NCHAR的最大长度为2000字节,NVARCHAR2和VARCHAR2最大长度为4000字节。
MySQL的CHAR在按一定长度存储时,是用空格填充的右对齐方式,在读取时去掉空格。
2.3.2 列默认值
MySQL会处理列默认值,不允许他为空,这点和Oracle不同。在Oracle中如果向表插入数据,需要对有所有不允许为NULL列的值。
2.4 多数据库迁移
如果多个MySQL数据库位于同一个数据库服务上,支持迁移。
2.5 数据存储概念
MySQL的数据库对应于服务器上数据目录内的了目录,这一数据存储方式与多数据数据库不同,也包括Oracle。数据库中的表对应一个或者多个数据库目录下的文件,并取表存储时的存储引擎。
一个Oracle数据库包含一个或者多个表空间。表空间对应数据在磁盘上的物理存储。表空间是从一个或者多个数据文件开始构建的。数据文件是文件系统中的文件或者原始存储的一块空间。