
#过年不停更#Docker搭建Mycat, Mysql主从 原创 精华
Mysql主从同步
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
使用主从同步的好处:
通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能
注意:mysql是异步复制的,而MySQL Cluster是同步复制的。有很多种主从同步的方法,但核心的方法有两种,Statement Based Replication(SBR)基于SQL语句的复制,另一种是Row Based Replication(RBR)基于行的复制,也可以使用Mixed Based Replication(MBR)。在mysql5.6中,默认使用的是SBR。而mysql 5.6.5和往后的版本是基于global transaction identifiers(GTIDs)来进行事务复制。当使用GTIDs时可以大大简化复制过程,因为GTIDs完全基于事务,只要在主服务器上提交了事务,那么从服务器就一定会执行该事务。
通过设置服务器的系统变量binlog_format来指定要使用的格式:
SBR:当使用二进制日志时,主服务器会把SQL语句写入到日志中,然后从服务器会执行该日志,这就是SBR,在mysql5.1.4之前的版本都只能使用这种格式。使用SBR会有如下
优点:
日志文件更小
记录了所有的语句,可以用来日后审计
弊端:
使用如下函数的语句不能被正确地复制:load_file(); uuid(), uuid_short(); user(); found_rows(); sysdate(); get_lock(); is_free_lock(); is_used_lock(); master_pos_wait(); rand(); release_lock(); sleep(); version();
在日志中出现如下警告信息的不能正确地复制:[Warning] Statement is not safe to log in statement format.
或者在客户端中出现show warnings
Insert … select语句会执行大量的行级锁表
Update语句会执行大量的行级锁表来扫描整个表
RBR:主服务器把表的行变化作为事件写入到二进制日志中,主服务器把代表了行变化的事件复制到从服务中,使用RBR的
优点:
所有的数据变化都是被复制,这是最安全的复制方式
更少的行级锁表
弊端:
日志会很大
不能通过查看日志来审计执行过的sql语句,不过可以通过使用mysqlbinlog
–base64-output=decode-rows --verbose来查看数据的 变动
MBR:既使用SBR也使用RBR,默认使用SBR
主从同步机制
Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。
每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。
主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)
Mycat是什么
•2013年阿里的Cobar在某大型项目中使用过程中发现存在一些比较严重的问题,于是第一代改良版——Mycat诞生。
•Mycat开源以后,一些Cobar的用户参与了Mycat的开发,最终Mycat发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。
•2014年Mycat首次在上海的《中华架构师》大会上对外宣讲,引发围观,更多的人参与进来,随后越来越多的项目采用了Mycat
•2015年7月为止,Mycat项目总共有16个Committer,其中核心参与者的年薪总额超过200万
•2015年5月,由核心参与者们一起编写的第一本官方权威指南《Mycat权威指南》电子版发布,累计超过500本,成为开源项目中的首创。
•截至2015年7月,超过100个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。
•截至2014年7月,Mycat官方QQ群已经超过2700人,大多数为资深IT工程师、架构师、DBA、以及一些CXO和高端猎头,成为国内具有影响力的高端IT专业群
•Mycat社区首次提出BigSQL的概念,并逐步将大数据和实时计算等先进技术引入到Mycat里,从而吸引和聚集了一大批业内大数据和云计算方面的资深工程师,Mycat社区成为名副其实的国内大数据领域实力派成员。
•Mycat社区里不断有优秀工程师被创业公司挖走,为了能更好的支持创业公司并寻求更多的优秀工程师参与采用,Mycat社区目前已经开始开展在线高端IT培训,培养高端Java架构师、工程师。
使用MyCat的优势
数据量级
单一的MySql数据存储量和操作量级有限,
MyCat可以管理若干MySql数据库,可以实现数据库的存储和操作。
开源性质
Mycat 是 java 编写的中间件,开源,免费
有非常多的人和组织对 Mycat 实行开发、维护、管理、更新
Mycat 是阿里原应用 corba 转型而来的
Java使用MyCat后的架构图
Mycat数据切分
简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
切分模式:
垂直切分,(单库性能瓶颈, 治标不治本)
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面
优点:
–拆分后业务清晰,拆分规则明确。
–系统之间整合或扩展容易。
–数据维护简单。
缺点:
–部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
–受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高
–事务处理复杂。
水平切分
按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式
优点:
不存在单库大数据,高并发的性能瓶颈。
对应用透明,应用端改造较少。
按照合理拆分规则拆分,
join操作基本避免跨库。提高了系统的稳定性跟负载能力。
缺点:
拆分规则难以抽象。
分片事务一致性难以解决。
数据多次扩展难度跟维护量极大。
跨库join性能较差
数据切分:
简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
话不多说实战
配置文件已经全部写好 基本找下面流程走一遍就能直接用
注意:mycat 和 mysql使用的字符集编码全部是 <code>utf8mb4</code>
先获取项目:见文末
mysql 主从服务器的配置已经写在config对应的目录中
mysql-m1 : 主服务器 IP:172.18.0.2
mysql-s1 : 从服务器slave1 IP:172.18.0.3
mysql-s2 : 从服务器slave2 IP:172.18.0.4
mycat : Mycat服务器 IP:172.18.0.5
修改hosts文件 添加解析
docker-compose.yml配置文件
Build 镜像
运行 docker mysql主从数据库 (mysql数据库在yml文件里面)
mysql主从配置
配置m1主服务器
已经进入m1主服务器mysql 命令行
创建用于主从复制的用户repl
给repl用户授予slave的权限
刷新
查看binlog状态 记录File 和 Position 状态稍后从库配置的时候会用
配置从库s1 s2
进入s1 shell
注意:show slave status\G;后Slave_IO_Running,Slave_SQL_Running两个值要是 Yes
进入s2 后同s1操作
mysql主从配置完成 现在测试一下
登陆主数据库 创建masterdb数据库 (这个数据库名在稍后的mycat里面会用到)
进入从库看看数据库是否创建
可以看到从库也已经创建成功了 到这里msyql的主从已经配置完成了
接下来是mycat的配置其实在 ~/config/mycat 里面已经配置好了直接就可以用了
看下schama.xml配置文件
server.xml 配置文件
看一下rule.xml
mycat
整体测试
测试数据
注意:!!!
如果调整rule.xml分片规则请删除ruledata目录
