乐趣区

关于linux:京淘day10数据库优化

一、数据库同步

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

退出移动版