MySQL数据库分库分表如何实现更高效的策略?

摘要:MySQL数据库目前得到了广泛的应用。在使用过程中会通过搭建MySQL主从复制的架构来提高性能,同时采用分库分表的模式来解决读写分离的问题。MySQL数据库的中间件就是为了更好地使MySQL支持这些应用的场景。主流的MySQL数据库中间件有
MySQL数据库目前得到了广泛的应用。在使用过程中会通过搭建MySQL主从复制的架构来提高性能,同时采用分库分表的模式来解决读写分离的问题。MySQL数据库的中间件就是为了更好地使MySQL支持这些应用的场景。主流的MySQL数据库中间件有ProxySQL、Mycat、Atlas和Cobar等等。引入了数据库中间件以后,客户端就不直接操作操作MySQL数据库集群,而是通过数据库中间件进行操作。 一、 Mycat简介与核心对象 Mycat是一个开源的分布式数据库系统,对于数据库用户而言可以把它看作是一个数据库代理。它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流的关系型数据库,同时也支持MongoDB等NoSQL数据库。Mycat的核心功能是实现数据库的分表分库。MyCat支持标准的SQL语句进行数据的操作,在降低了开发难度的同时提升了开发速度。Mycat可以通过使用MySQL原生协议与MySQL数据库服务器进行通信,并且Mycat基于Java语言开发,因此也可以用DBC协议与大多数主流数据库服务器通信。 点击这里查看视频讲解:【赵渝强老师】MySQL数据库的分库分表 下面列举了Mycat中的核心对象以及它们的含义: 逻辑库:由于Mycat相当于是数据库的代理,因此Mycat作为数据库中间件其本身就可以被看做是一个或多个数据库集群构成的逻辑库。开发人员只需要面对该逻辑库进行开发即可。 逻辑表:逻辑库由逻辑表组成。对于分布式数据库来说,客户端操作的就是逻辑表。逻辑表的数据来源是分布在后端一个或多个物理数据库。 分片表:分片表是指将原有的大数据量表切分成多张表,其中的每一张表就是一个分片,其中均包含一部分数据。所有分片数据的合集构成了完整的表数据。 非分片表:针对数据量小的表不需要进行分片,这些表就可以看成是非分片表。其实,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。 ER表:ER与关系型数据库中的实体关系模型是类似的,它可以将具有父子关系的表及其数据存放在同一个数据分片上,即子表依赖于父表。ER表通过表分组(Table Group)保证不会跨库操作。 全局表:全局表类似数据库的数据字典。它里面的数据一般不会频繁变动,并且数据规模不大,通常数据量在十万以内。 分片节点:将大数据量表进行切分后,每个表的分片所在的数据库服务器节点就是分片节点。因此,可以把一个数据库实例的服务器就理解成是一个分片节点。 节点主机:每个分片节点(dataNode)不一定都会独占一台机器。在同一个物理主机上可以存在多个分片数据库实例。这样一个或多个分片节点(dataNode)所在的机器就是节点主机。 分片规则:分片规则是指将大数据的表切分到多个数据分片的策略。分片表需要根据分片规则进行数据的切分。 全局序列号:大数据量的表被切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用。为了保证数据具有唯一性的标识,从而引入全局序列号的机制。 下图展示了基于MyCat的MySQL分库分表的结构。 二、 安装部署Mycat 在了解到了Mycat的基本概念与核心对象后,下面通过具体的步骤在proxy的主机上部署Mycat环境。目前Mycat最新的版本是2.0,这里使用一个Mycat的稳定版本(1.6.7.5)来演示。 由于Mycat基于Java语言开发,因此在安装部署Mycat之前需要安装JDK。 (1)使用版本jdk-8u181-linux-x64.tar.gz安装Java运行环境。 mkdir -p /root/training tar -zxvf jdk-8u181-linux-x64.tar.gz -C /root/training (2)编辑文件“/root/.bash_profile”设置Java的环境变量。 JAVA_HOME=/root/training/jdk1.8.0_181 export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH (3)生效环境变量。 source /root/.bash_profile (4)验证Java环境。
阅读全文