一、MySQL+MyCat分库分表

1 MyCat简介

java编写的数据库中间件

Mycat运行环境需要JDK.

Mycat是中间件.运行在代码应用和MySQL数据库之间的应用.

前身 : corba. 是阿里开发的数据库中间件.实现MySQL数据库分库分表集群管理的中间件.曾经出现过重大事故. 二次开发,形成Mycat.

使用MyCat之后,编写的所有的SQL语句,必须严格遵守SQL标准规范.

insert into table_name(column_name) values(column_value);

使用MyCat中间件后的结构图如下:

2 MyCat术语简介

2.1 切分

逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分.

2.1.1 纵向切分

把一个数据库切分成多个数据库,配置方便

只能实现两张表的表连接查询.

将一张表中的数据,分散到若干个database的同结构表中。多个表的数据的集合是当前表格的数据。

clip_image006.png

2.1.2 横向切分

把一个表切分成多个表,相比纵向切分配置麻烦

无法实现表连接查询.

将一张表的字段,分散到若干张表中,将若干表连接到一起,才是当前表的完整数据。

clip_image007.png

2.2 逻辑库

Mycat中定义的database.是逻辑上存在的.但是物理上未必存在.

主要是针对纵向切分提供的概念.

访问MyCat,就是将MyCat当做MySQL使用。

Db数据库是MyCat中定义的database。通过SQL访问MyCat中的db库的时候,对应的是MySQL中的db1,db2,db3三个库。物理上的database是db1,db2,db3.逻辑上的database就是db。

clip_image008.png

2.3 逻辑表

Mycat中定义的table.是逻辑上存在,物理上未必存在.

主要是针对横向切分提供的概念

MyCat中的表格table,其字段分散到MySQL数据库的表格table1,table2,table3中。

clip_image009.png

2.4 默认端口

Mycat默认端口是8066

2.5 数据主机 - dataHost

物理MySQL存放的主机地址.可以使用主机名,IP,域名定义.

2.6 数据节点 - dataNode

物理的database是什么.数据保存的物理节点.就是database.

2.7 分片规则

当控制数据的时候,如何访问物理database和table.

就是访问dataHost和dataNode的算法.

在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法.如:哈希算法,crc16算法等.

3 Mycat搭建

3.1 安装JDK

3.2 主从备份搭建完成

3.3 安装mycat

解压缩: tar -zxf mycat-xxxx.tar.gz

3.4 Master提供可被Mycat访问的用户

在Mycat中通过Master数据库的root用户访问Master数据库.

grant all privileges on . to ‘username’@’ip’ identified by ‘password’ with grant option;

grant all privileges on . to 'mycat'@'%' identified by 'mycat' with grant option;

3.5 上传mycat

Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

3.6 解压缩

tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

3.7 Mycat配置文件详解

Mycat所有的配置文件,都在应用的conf目录中.

3.7.1 rule.xml

用于定义分片规则的配置文件.

主要是查看.很少修改.

mycat默认的分片规则: 以500万为单位,实现分片规则.

逻辑库A对应dataNode - db1和db2. 1-500万保存在db1中, 500万零1到1000万保存在db2中,1000万零1到1500万保存在db1中.依次类推.

idrang-long

crc32slot规则: 在CRUD操作时,根据具体数据的crc32算法计算,数据应该保存在哪一个dataNode中. 算法类似模运算.

idcrc32slot

3.7.2 schema.xml

用于定义逻辑库和逻辑表的配置文件.在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode等信息.

配置文件解释:

3.7.2.1 标签schema

配置逻辑库的标签

3.7.2.1.1 属性name

逻辑库名称

3.7.2.1.2 属性checkSQLschema

是否检测SQL语法中的schema信息.

如: Mycat逻辑库名称 A, dataNode名称B

SQL : select * from A.table;

checkSQLschema值是true, Mycat发送到数据库的SQL是select * from table;

checkSQLschema值是false,Mycat发送的数据库的SQL是select * from A.table;

3.7.2.1.3 sqlMaxLimit

Mycat在执行SQL的时候,如果SQL语法中没有limit子句.自动增加limit子句. 避免一次性得到过多的数据,影响效率. limit子句的限制数量默认配置为100.如果SQL中有具体的limit子句,当前属性失效.

SQL : select * from table . mycat解析后: select * from table limit 100

SQL : select * from table limit 10 . mycat不做任何操作修改.

3.7.2.2 标签table

定义逻辑表的标签,如果需要定义多个逻辑表,编写多个table标签。要求逻辑表的表名和物理表(MySQL数据库中真实存在的表)的表名一致。

3.7.2.2.1 属性name

逻辑表名

3.7.2.2.2 属性dataNode

数据节点名称. 配置文件中后续需要定义的标签(即物理数据库中的database名称).多个名称使用逗号分隔.

多个database定义后,代表分库。

3.7.2.2.3 属性rule

分片规则名称.具体的规则名称参考rule.xml配置文件.

SQL语句发送到Mycat中后,Mycat如何计算,应该将当期的SQL发送到哪一个物理数据库管理系统或物理database中。

3.7.2.3 标签dataNode

定义数据节点的标签, 定义具体的物理database信息的。

3.7.2.3.1 属性name

数据节点名称, 是定义的逻辑名称,对应具体的物理数据库database

3.7.2.3.2 属性dataHost

引用dataHost标签的name值,代表使用的物理数据库所在位置和配置信息.

3.7.2.3.3 属性database

在dataHost物理机中,具体的物理数据库database名称.

3.7.2.4 dataHost标签

定义数据主机的标签, 就是物理MYSQL真实安装的位置。

3.7.2.4.1 属性name

定义逻辑上的数据主机名称

3.7.2.4.2 属性maxCon/minCon

最大连接数, max connections

最小连接数, min connections

3.7.2.4.3 属性dbType

数据库类型 : mysql数据库

3.7.2.4.4 属性dbDriver

数据库驱动类型, native,使用mycat提供的本地驱动.

3.7.2.5 dataHost子标签writeHost

写数据的数据库定义标签. 实现读写分离操作.

3.7.2.5.1 属性 host

数据库命名

3.7.2.5.2 属性url

数据库访问路径

3.7.2.5.3 属性user

数据库访问用户名

3.7.2.5.4 属性password

访问用户密码

3.7.2.6 测试配置文件

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

password="root"/>

3.7.3 server.xml

配置Mycat服务信息的.

如: Mycat中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等.

常见修改内容:

8066

9066

密码

用户可访问逻辑库名

密码

可访问逻辑库名

是否只读

3.7.4 启动Mycat命令

bin/mycat start

3.7.5 停止命令

bin/mycat stop

3.7.6 重启命令

bin/mycat restart

3.7.7 查看Mycat状态

bin/mycat status

3.7.8 访问方式

可以使用命令行访问或客户端软件访问.

3.7.8.1 命令行访问方式

mysql -u用户名 -p密码 -hmycat主机IP -P8066

链接成功后,可以当做MySQL数据库使用.

访问成功后,不能直接使用。因为Mycat只能访问MYSQL的schema(database),不能自动创建逻辑库对应的物理库。且不能自动创建逻辑表对应的物理表。

必须人工链接master数据库,手动创建database。

表格可以在mycat控制台创建。注意:在mycat控制台创建的表,必须是schema.xml配置文件中定义过的逻辑表。

启动后,经过测试,crc32slot分片规则无效,执行DML语句的时候只能识别db1和db2。

DDL语句,可以识别db3。

修改conf/rule.xml配置文件,找标签

2

修改count参数。修改为对应的物理database数量。

3.7.9 访问约束

3.7.9.1 表约束

不能创建未在schema.xml中配置的逻辑表

3.7.9.2 DML约束

尤其是新增: 必须在insert into语法后携带所有的字段名称.至少携带主键名称.

因为分片规则,绝大多数都是通过主键字段计算数据分片规则的.

3.7.10 查看Mycat日志

logs/wrapper.log

日志中记录的是所有的mycat操作. 查看的时候主要看异常信息caused by信息

二、MyCat配置读写分离

1 MySQL主从备份

1.1 主从备份概念

什么是主从备份: 就是一种主备模式的数据库应用.

主库(Master)数据与备库(Slave)数据完全一致.

实现数据的多重备份, 保证数据的安全.

可以在Master[InnoDB]和Slave[MyISAM]中使用不同的数据库引擎,实现读写的分离

1.1.1 MySQL5.5版本后本身支持主从备份

在老旧版本的MySQL数据库系统中,不支持主从备份,需要安装额外的RPM包.

如果需要安装RPM,只能在一个位置节点安装.

1.1.2 主从备份目的

1.1.2.1 实现主备模式

保证数据的安全. 尽量避免数据丢失的可能.

1.1.2.2 实现读写分离

使用不同的数据库引擎,实现读写分离.提高所有的操作效率.

InnoDB使用DML语法操作. MyISAM使用DQL语法操作.

1.1.3 主从备份效果

1.1.3.1 主库操作同步到备库

所有对Master的操作,都会同步到Slave中.

如果Master和Salve天生上环境不同,那么对Master的操作,可能会在Slave中出现错误

如: 在创建主从模式之前,Master有database : db1, db2, db3. Slave有database: db1, db2.

创建主从模式.现在的情况Master和Slave天生不同.

主从模式创建成功后,在Master中drop database db3. Slave中抛出数据库SQL异常.后续所有的命令不能同步.

一旦出现错误. 只能重新实现主从模式.

1.2 安装MySQL

略过.

1.3 主从备份配置

主要操作Master和Slave中的配置文件和DBMS的配置.

配置文件: 定义主从模式的基础信息. 如: 日志, 命令等.

DBMS配置: 提供主从访问的用户,基础信息[Master和Slave的位置,用户名,密码,日志文件名等]等.

建议:建立主从备份的多个MySQL,最好原始环境一致。Database,table,data完全一致。

1.3.1 Master[主库]配置

1.3.1.1 修改Master配置文件

/etc/my.cnf

需要修改. 在修改前建议复制一份备份文件.

修改后的my.cnf配置文件,参考资料中的my.cnf文件内容.

1.3.1.1.1 server-id

本环境中server-id是1

MySQL服务唯一标识

唯一标识是数字. 自然数

配置的时候有要求

1.3.1.1.1.1 单机使用

server-id 任意配置,只要是数字即可

1.3.1.1.1.2 主从使用

server-id Master唯一标识数字必须小于Slave唯一标识数字.

1.3.1.1.2 log_bin

本环境中log_bin值 : master_log

日志文件命名, 开启日志功能。此日志是命令日志。就是记录主库中执行的所有的SQL命令的。

1.3.1.1.2.1 开启日志

MySQL的log_bin不是执行日志,状态日志. 是操作日志.就是在DBMS中所有的SQL命令

log_bin日志不是必要的.只有配置主从备份时才必要。

1.3.1.1.2.2 日志文件配置

变量的值就是日志文件名称.是日志文件名称的主体.

MySQL数据库自动增加文件名后缀和文件类型.

1.3.1.2 重启MySQL

service mysqld restart

1.3.1.3 配置Master

1.3.1.3.1 访问MySQL

mysql -uusername -ppassword

1.3.1.3.2 创建用户

在MySQL数据库中,为不存在的用户授权,就是同步创建用户并授权.

此用户是从库访问主库使用的用户

ip地址不能写为%. 因为主从备份中,当前创建的用户,是给从库Slave访问主库Master使用的.用户必须有指定的访问地址.不能是通用地址.

grant all privileges on . to ‘username’@’ip’ identified by ‘password’ with grant option;

flush privileges;

grant all privileges on . to 'slave'@'192.168.199.133' identified by 'slave' with grant option; flush privileges;

1.3.1.3.3 查看用户

use mysql;

select host, name from user;

1.3.1.3.4 查看Master信息

show master status;

1.3.2 Slave[从库]配置

1.3.2.1 修改Slave配置文件

/etc/my.cnf

1.3.2.1.1 server_id

唯一标识, 本环境中配置为 : 2

1.3.2.1.2 log_bin

可以使用默认配置, 也可以注释.

1.3.2.2 可选: 修改uuid

主从模式要求多个MySQL物理名称不能相同. 即按装MySQL过程中Linux自动生成的物理标志. 唯一物理标志命名为uuid. 保存位置是MySQL数据库的数据存放位置. 默认为/var/lib/mysql目录中. 文件名是auto.cnf.

修改auto.cnf文件中的uuid数据. 随意修改,不建议改变数据长度.建议改变数据内容.

/var/lib/mysql/auto.cnf

1.3.2.3 重启MySQL服务

service mysqld restart

1.3.2.4 配置Slave

1.3.2.4.1 访问mysql

mysql -uusername -ppassword

1.3.2.4.2 停止Slave功能

stop slave

1.3.2.4.3 配置主库信息

需要修改的数据是依据Master信息修改的. ip是Master所在物理机IP. 用户名和密码是Master提供的Slave访问用户名和密码. 日志文件是在Master中查看的主库信息提供的.在Master中使用命令show master status查看日志文件名称.

change master to master_host=’ip’, master_user=’username’, master_password=’password’, master_log_file=’log_file_name’;

change master to master_host='192.168.199.212', master_user='slave', master_password='slave', master_log_file='master_log.000001';

1.3.2.4.4 启动Slave功能

start slave;

1.3.2.4.5 查看Slave配置

show slave status \G;

2 MyCat读写分离配置

修改conf/schema.xml配置文件,下述内容中,红色部分为重点内容。​

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

password="root">

三、MyCat配置数据库集群

所有的集群配置,都必须配置多主多从模式。即多个master节点相互之间配置主从。如:master1和slave1为第一组主从,master2和slave2为第二组主从,master1和master2互为对方的主/从。

注意:crc32slot分片规则,在使用的时候,要求必须先设置好分片规则,再启动mycat。如果先启动了mycat,再设置分片规则,会导致分片规则失效。需要删除conf目录中的ruledata子目录。ruledata目录中会记录crc32slot的分片节点,日志文件命名规则为crc32slot_表名

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

password="root">

password="root">

缺陷:可能有IO延迟问题。

四、数据库集群负载策略

第一种配置方案:

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

password="root">

password="root">

第二种配置方案:

writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">

show slave status

password="root">

writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">

show slave status

password="root">

1 balance属性

balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上

balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡

balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。

balance=”3”, 所有读请求随机的分发到 writeHost 对应的 readhost 执行,writerHost 不负担读压力

2 writeType 属性

writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:conf/dnindex.properties(datanode index)

writeType=”1”,所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐

3 switchType属性

也涉及到读写分离问题,可以解决IO延迟问题。

switchType='-1' 表示不自动切换

switchType='1' 默认值,表示自动切换

switchType='2' 基于MySQL主从同步的状态决定是否切换读写主机,心跳语句为 show slave status。 当心跳监测获取的数据发现了IO的延迟,则读操作自动定位到writeHost中。如果心跳监测获取的数据没有IO延迟,则读操作自动定位到readHost中。建议为不同的表格定位不同的dataHost节点。

注意: 在mycat中,rule.xml配置文件中定义的分片规则只能给一个表格使用。如果有多个表格使用同一个分片规则,需要再rule.xml配置文件中,为每个表格定义一个分片规则。如:

id

crc32slot

id

crc32slot

mysql数据库高可用_MySQL数据库高可用相关推荐

  1. mysql试题百度云_MySQL数据库无完整备份删库,除了跑路还能怎么办?

    1.背景 前段时间,由于运维同事的一次误操作,清空了内网核心数据库,导致了公司内部管理系统长时间不可用,大量知识库内容由于没有备份险些丢失. 结合这两天微盟的删库跑路事件,我们可以看到,数据库的备份与 ...

  2. mysql数据库咋还原_mysql数据库备份和还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  3. mysql 本地热备_MySQL 数据库热备的操作

    注意:服务器数据库热备 效果:缓解单台数据库连接量过大造成的响应超时问题,缓解高并发情况的响应问题: 可做操作:读写分离操作,将 主服务器数据库 设置[写]操作: 从服务器数据库 设置[读]操作: 此 ...

  4. mysql数据库端口链接_mysql数据库端口链接

    高校计划ESC7天训练营-PolarDB搭建门户网站 Day04打卡 创建PolarDB数据库账号 使用无痕模式登录子账号 左侧侧边栏-产品与服务-云数据库PolarDB,进入PolarDB管理器 点 ...

  5. mysql数据库安全模式开启_mysql 数据库安全模式

    手把手教你在CentOS 6.8中安装mysql @(Linux)[centos,mysql,安装] 卸载掉原有mysql 查看该操作系统上是否已经安装了mysql数据库:rpm -qa | grep ...

  6. mysql特殊字符波浪号_mysql数据库特殊字符

    关于 mysql数据库特殊字符的搜索结果 回答 详细解答可以参考官方帮助文档 说明 部分RDS for MySQL实例的账号管理机制已升级.使用本文前,请先检查您的实例是否已升级,检查方式如下: 登录 ...

  7. 初识mysql数据字段属性_MySQL数据库~~~~初识、基础数据类型

    一 数据库初识 1.1 什么是数据库 数据库(DataBase,简称DB),简而言之可视为电子化的文件柜----存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库 ...

  8. mysql数据库物理备份_MySQL数据库之xtrabackup物理备份(一)

    (1)备份开始时会开启一个后台检测进程,实时检测mysql redo(已提交的事务)的变化,一旦发现redo中有新日志写入,立刻将日志记入后台日志文件xtrabackup_log中, (2)复制Inn ...

  9. mysql数据库垂直切分_mysql数据库的水平拆分与垂直拆分

    近端时间在面试,发现很多面试官或者面试都把数据的水平拆分合垂直拆分给搞混了,今天特意写了一篇博客来说说水平拆分和垂直拆分希望对程序猿们有所帮助. 数据库水平与垂直拆分: 垂直(纵向)拆分:是指按功能模 ...

  10. jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程

    欢迎关注公众号:xfxuezhang MySQL数据库与JDBC编程 JDBC (Java Database Connectivity) DDL(Data Definition Language,数据 ...

最新文章

  1. 谷歌如何通过机器学习实现逼真AR实时自拍效果
  2. Swipe JS – 移动WEB页面内容触摸滑动类库
  3. LINGO 12安装教程
  4. 技术系列课回顾 | 浅谈 Serverless 开发和应用
  5. 关于SpringCloud、SpringBoot 希望这是说得最详细的
  6. C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁...
  7. 微信h5网页关闭分享以及关闭当前页面
  8. 生信分析和统计作图资源推荐
  9. java nio 文件传输
  10. Migrate blog from blogcn here
  11. adb.exe已停止工作
  12. JAVASCRIPT视频教程推荐==李炎恢JavaScript教程 第一季
  13. 云计算机教室优缺点,云教室和传统机房的区别,终于有人把它说清了
  14. Win10系统中查看是否开启虚拟化
  15. changeable和changeful_change的形容词是什么?
  16. react 函数组件使用了 hook 后闪屏问题的分析与解决
  17. 列表求和python_python列表求和
  18. 输入学生姓名和学号c语言程序,C语言 从键盘输入10个学生信息(学号,姓名,年龄,性别)...
  19. Java:extends 和 implements 的区别
  20. 个人python开发数据分析面试题分享

热门文章

  1. 微课|《Python编程基础与案例集锦(中学版)》第3章(1)
  2. 小议Python列表和元组中的元素地址连续性
  3. 家卫士扫地机器人好吗_2020年扫地机器人推荐选购指南(扫地机器人实用吗?国内扫地机器人哪个牌子好?)...
  4. 714. 买卖股票的zui佳时机含手续费(JavaScript)
  5. linux 错误信息 输出到管道,linux grep通过管道输出到head出现write error: Broken pipe错误...
  6. r读取文件夹下的所有csv文件_[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。...
  7. ipv4改完保存不成功_win7系统没法保存修改后IP地址的解决方法
  8. vuex commit 模块_Vuex详细介绍
  9. 关于C语言数据类型的PPT,C语言基本的数据类型.ppt
  10. Xmodem、Ymodem、Zmodem