一、数据库同步
1.数据库冷备份
手动的将数据库文件,定期进行转储.
毛病:
1.效率低
2.有可能失落数据
起因: 数据库冷备份 是公司复原数据最初无效的伎俩.
2.数据库热备份
备份原理:
1.当数据库批改时,会将批改的信息,写入二进制日志文件中(二进制文件默认是敞开的).
2.当二进制日志文件中有数据时,数据库从库会通过IO线程读取二进制文件信息.
3.IO线程将读到的数据写到中继日志中.
4.Sql线程将中继日志中的文件 写到从数据库中,最终实现数据库主从同步.
二、批改数据库主库配置
1.搭建策略
129当作主库,130当作从库
2.批改二进制日志文件
1).编辑二进制文件地位
2).批改二进制文件内容
3).重启数据库,查看二进制日志文件是否无效
三、批改数据库从库配置
重启数据库查看二进制日志
四、实现数据库主从同步
4.1 确定主库状态
4.2 配置主从挂载
/*我是130 从库 IP/PORT/USER/PASSWROD/二进制日志/pos*/CHANGE MASTER TO MASTER_HOST="192.168.126.129",MASTER_PORT=3306,MASTER_USER="root",MASTER_PASSWORD="root",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=245;/*开启主从服务*/START SLAVE; /*查看主从服务状态*/SHOW SLAVE STATUS;/*如果启动不胜利 执行如下步骤 查看最初几项的报错信息 之后批改配置文件. 敞开主从服务.之后从新执行挂载命令*/STOP SLAVE;
4.3 数据库主从测试
在主库中增加数据库表,查看从库是否同步.
五、数据库高可用(HA)
1.实现数据库读写拆散/负载平衡
2.Mycat代理
2.1 Mycat 介绍
Mycat数据库分库分表中间件沉闷的、性能好的开源数据库中间件!
2.2 Mycat要害个性
- 反对SQL92规范
- 反对MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法
- 恪守Mysql原生协定,跨语言,跨平台,跨数据库的通用中间件代理。
- 基于心跳的主动故障切换,反对读写拆散,反对MySQL主从,以及galera cluster集群。
- 反对Galera for MySQL集群,Percona Cluster或者MariaDB cluster
- 基于Nio实现,无效治理线程,解决高并发问题。
- 反对数据的多片主动路由与聚合,反对sum,count,max等罕用的聚合函数,反对跨库分页。
- 反对单库外部任意join,反对跨库2表join,甚至基于caltlet的多表join。
- 反对通过全局表,ER关系的分片策略,实现了高效的多表join查问。
- 反对多租户计划。
- 反对分布式事务(弱xa)。
- 反对XA分布式事务(1.6.5)。
- 反对全局序列号,解决分布式下的主键生成问题。
- 分片规定丰盛,插件化开发,易于扩大。
- 弱小的web,命令行监控。
- 反对前端作为MySQL通用代理,后端JDBC形式反对Oracle、DB2、SQL Server 、 mongodb 、巨杉。
- 反对明码加密
- 反对服务降级
- 反对IP白名单
- 反对SQL黑名单、sql注入攻打拦挡
- 反对prepare预编译指令(1.6)
- 反对非堆内存(Direct Memory)聚合计算(1.6)
- 反对PostgreSQL的native协定(1.6)
- 反对mysql和oracle存储过程,out参数、多后果集返回(1.6)
- 反对zookeeper协调主从切换、zk序列、配置zk化(1.6)
- 反对库内分表(1.6)
- 集群基于ZooKeeper治理,在线降级,扩容,智能优化,大数据处理(2.0开发版)。
2.3 MyCat配置
2.3.1 上传安装包
2.3.2 解压Mycat
1).解压Mycat
[root@localhost src]# tar -xvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz
2).挪动Mycat文件
2.3.3 编辑Server.xml
阐明: 用户与代理数据库之间的链接,通过Server.xml进行配置.
1).默认端口
2).编辑server.xml
2.3.4 编辑schemas.xml
阐明:该文件示意代理与数据库的配置 HOST:PORT:用户名:明码:数据库名称
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <!--name属性是自定义的 dataNode示意数据库的节点信息 jtdb示意逻辑库--> <schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/> <!--定义节点名称/节点主机/数据名称--> <dataNode name="jtdb" dataHost="localhost1" database="jtdb" /> <!--参数介绍 UTF-8 中文报错 应用单行正文 --> <!--balance 0示意所有的读操作都会发往writeHost主机 --> <!--1示意所有的读操作发往readHost和闲置的主节点中--> <!--writeType=0 所有的写操作都发往第一个writeHost主机--> <!--writeType=1 所有的写操作随机发往writeHost中--> <!--dbType 示意数据库类型 mysql/oracle--> <!--dbDriver="native" 固定参数 不变--> <!--switchType=-1 示意不主动切换, 主机宕机后不会主动切换从节点--> <!--switchType=1 示意会主动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会主动切换到第二个主节点--> <!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 示意第一个节点.该文件不要随便批改否则会呈现大问题--> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select 1</heartbeat> <!--配置第一台主机次要进行写库操作,在默认的条件下Mycat次要操作第一台主机在第一台主机中曾经实现了读写拆散.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担局部压力. --> <writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root"> <!--读数据库1--> <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" /> <!--读数据库2--> <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" /> </writeHost> <!--定义第二台主机 因为数据库外部曾经实现了双机热备.--> <!--Mycat实现高可用.当第一个主机137宕机后.mycat会主动收回心跳检测.检测3次.--> <!--如果主机137没有给Mycat响应则判断主机死亡.则回启东第二台主机持续为用户提供服务.--> <!--如果137主机复原之后则处于期待状态.如果141宕机则137再次继续为用户提供服务.--> <!--前提:实现双机热备.--> <!--<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root"> <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" /> <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" /> </writeHost>--> </dataHost></mycat:schema>`
2.3.5 上传安装文件
将课前材料中的文件上传到指定的地位: /usr/local/src/mycat/conf
2.3.6 Mycat命令
2.3.7 报错查看
2.3.8 负载平衡测试
将从数据库信息,手动的进行批改. 成果:主库和从库的数据临时不统一(存在危险)
2).如果测试胜利,则将数据进行批改保留.查看读写拆散是否胜利.
3 实现数据库双机热备
3.1 原理阐明
阐明: 实现数据库高可用的前提条件是实现主从的备份.
之前的操作:
主库 :192.168.126.129
从库 : 192.168.126.130
当初的配置:
主库 :192.168.126.130
从库 : 192.168.126.129
3.2 实现双主模式配置
1).查看主库状态
2).实现主从配置
show MASTER status# 我是129 之前是主库,明天当从库CHANGE MASTER to MASTER_HOST="192.168.126.130",MASTER_PORT=3306,MASTER_user="root",MASTER_PASSWORD="root",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=700;#启动主从服务start slave #查看状态show slave status;
4 实现数据库高可用
4.1 批改schema.xml配置文件
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <!--name属性是自定义的 dataNode示意数据库的节点信息 jtdb示意逻辑库--> <schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/> <!--定义节点名称/节点主机/数据名称--> <dataNode name="jtdb" dataHost="localhost1" database="jtdb" /> <!--参数介绍 UTF-8 中文报错 应用单行正文 --> <!--balance 0示意所有的读操作都会发往writeHost主机 --> <!--1示意所有的读操作发往readHost和闲置的主节点中--> <!--writeType=0 所有的写操作都发往第一个writeHost主机--> <!--writeType=1 所有的写操作随机发往writeHost中--> <!--dbType 示意数据库类型 mysql/oracle--> <!--dbDriver="native" 固定参数 不变--> <!--switchType=-1 示意不主动切换, 主机宕机后不会主动切换从节点--> <!--switchType=1 示意会主动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会主动切换到第二个主节点--> <!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 示意第一个节点.该文件不要随便批改否则会呈现大问题--> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select 1</heartbeat> <!--配置第一台主机次要进行写库操作,在默认的条件下Mycat次要操作第一台主机在第一台主机中曾经实现了读写拆散.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担局部压力. --> <writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root"> <!--读数据库1--> <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" /> <!--读数据库2--> <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" /> </writeHost> <!--定义第二台主机 因为数据库外部曾经实现了双机热备.--> <!--Mycat实现高可用.当第一个主机137宕机后.mycat会主动收回心跳检测.检测3次.--> <!--如果主机137没有给Mycat响应则判断主机死亡.则回启东第二台主机持续为用户提供服务.--> <!--如果137主机复原之后则处于期待状态.如果141宕机则137再次继续为用户提供服务.--> <!--前提:实现双机热备.--> <writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root"> <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" /> <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" /> </writeHost> </dataHost></mycat:schema>
4.2 上传文件
1).进行mycat服务
2).删除配置文件
3).上传文件
将配置文件上传到指定的目录中
4).启动Mycat
1.4.3 数据库高可用的测试
1.首先应该将129的数据库宕机(敞开)
2.启动程序,通过数据库代理查看是否拜访正确(查). 入库是否失常(写)
3.重启129的数据库. 检查数据是否真的同步了.