一、数据库同步

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的数据库. 检查数据是否真的同步了.