共计 4530 个字符,预计需要花费 12 分钟才能阅读完成。
数据库备份策略
2.1.1 数据库冷备份
阐明: 通过数据库工具,定期将数据库文件进行转储 , 保证数据的安全性. (个别 2 - 3 天)
毛病:
1. 备份时因为突发的状况, 可能导致备份失败. 须要重复备份.
2. 因为冷备份是定期备份. 所以可能导致数据的失落.
外围:
数据必须备份. 备份的数据是复原的最初无效的伎俩.
2.1.2 数据库热备份
阐明: 能够通过数据库机制, 主动的实现数据的备份操作.
长处: 能够实现自动化的操作, 并且是实时备份.
备份实现原理:
1. 当数据库主机的数据发现变动时, 会将批改的数据写入二进制日志文件中.
2. 从库通过 IO 线程, 读取主库的二进制日志文件, 获取之后, 将数据保留到中继 (长期存储) 日志中.
3. 从库中开启 Sql 线程, 之后读取中继日志中的数据, 之后将数据同步到从库中.
2.2 筹备多台服务器
2.2.1 批改虚拟机名称
阐明: 复制课前材料中的虚拟机, 并且改名为 JT_LINUX_S. 之后启动即可.
2.2.2 批改 Linux 从机的 mac 地址
为了保障 2 台虚拟机失常稳固的运行, 须要批改 mac 地址.
2.2.3 装置数据库从库
具体参见 博客文档.
https://blog.csdn.net/qq_1680…
2.3 数据库主从搭建
2.3.1 开启主库二进制文件
阐明: 主库的二进制日志文件, 默认条件下是敞开的, 须要手动的开启.
命令: vim /etc/my.cnf
编辑二进制日志文件:
重启数据库, 查看二进制日志文件, 是否可用.
重启之后, 生成二进制文件
2.3.2 开启从库二进制配置文件
批改文件: vim /etc/my.cnf
增加的操作和主库统一, 之后重启数据库服务器, 成果如下:
2.3.3 数据库主从搭建
1). 查看主库的状态
2). 实现数据库主从挂载
`/* 我是 130 我是从库 */
/*1. 实现数据库主从挂载 host/port/user/password/ 二进制日志 /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;
/*2. 启动数据库主从服务 */
START SLAVE;
/*3. 查看数据库启动状态 */
SHOW SLAVE STATUS;
/*4. 如果呈现数据库问题 1. 敞开主从服务, 2. 查看报错状态 3. 从新搭建服务 */
STOP SLAVE
/* 查看报错信息 依据报错批改记录 */
/* 从新搭建主从关系 */`
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
* 12
* 13
* 14
* 15
* 16
* 17
* 18
* 19
3). 主从状态的校验
2.3.4 数据库主从测试
注意事项:
1. 批改主库的数据, 从库会跟着同步数据.
2. 如果批改从库数据, 则主从的关系将会终止.
2.4 数据库读写拆散 / 负载平衡实现
2.4.1 数据库优化策略
阐明: 通过代理数据库能够实现数据库的读写拆散 / 数据库负载平衡操作, 进一步的晋升了整体架构的能力.
2.4.2 Mycat
2.4.3 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.5 部署步骤
2.5.1 上传 myCat 服务器
上传门路: /usr/local/src
2.5.2 解压 Mycat
`tar -xvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz`
* 1
挪动安装文件:
2.5.3 server.xml 配置文件阐明
注意事项: 默认条件下的端口号 8066 端口
`<user name="root">
<property name="password">root</property>
<!-- 与 schema.xml 中的配置雷同 留神数据库的大小写 -->
<property name="schemas">jtdb</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">jtdb</property>
<property name="readOnly">true</property>
</user>`
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
2.5.3 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>`
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
* 12
* 13
* 14
* 15
* 16
* 17
* 18
* 19
* 20
* 21
* 22
* 23
* 24
* 25
* 26
* 27
* 28
* 29
* 30
* 31
* 32
* 33
* 34
* 35
* 36
* 37
* 38
* 39
* 40
* 41
* 42
* 43
* 44
* 45
* 46
* 47
* 48
2.5.4 实现配置文件上传
2.5.5 Mycat 命令
Usage: ./mycat {console | start | stop | restart | status | dump}
2.5.6 查看 mycat 日志
2.5.7 Mycat 负载平衡测试
批改从库中的数据库. 刷新列表页面. 查看是否有负载平衡的成果.
注意事项: 如果测试实现, 记得将数据批改 保障统一.