mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置

一、 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中间件后的结构图如下:

d7fcdcb88756add24562f5db2c22a346.png

2 MyCat术语简介

2.1 切分

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

2.1.1 纵向切分

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

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

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

6987ceabac5abb01b403de6a4744e3d6.png

2.1.2 横向切分

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

无法实现表连接查询.

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

c47fd925ef7f290270920480c7406a1b.png

2.2 逻辑库

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

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

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

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

83d5192f5cd4c01f846ecf6a5fada142.png

2.3 逻辑表

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

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

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

d51a1006ae91281b07f52a2a3fcd69fe.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中.依次类推.

23dea3d29afb1e286cea73f82bbace7c.png

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 测试配置文件

47f884395a028c36d916ae7156554129.png

3.7.3 server.xml

配置Mycat服务信息的.

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

常见修改内容:

e47b4673fe298b04d3aa7d197c28b50f.png

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配置文件,找标签

f02665db869f6e144737ca5b8ad5e050.png

修改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使用的.用户必须有指定的访问地址.不能是通用地址.

cfa0b9d5e6a393416e3565faf8e60e04.png

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; mysql> show slave status G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.120.139 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-log.000001 Read_Master_Log_Pos: 427 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 591 Relay_Master_Log_File: master-log.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 427 Relay_Log_Space: 765 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 最后一次错误的IO请求编号 Last_IO_Error: Last_SQL_Errno: 0 最后一次错误的执行SQL命令编号. Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 9ee988ac-8751-11e7-8a95-000c2953ac06 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec) 

1.3.3 测试主从

1.4 主从模式下的逻辑图

a61be8069f0285906274ffe91e37fdb9.png

2 MyCat读写分离配置

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

b9d2331925427f5e183ac42084c496e5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串String截取字符char

字符串类的charAt() 方法可返回指定位置的字符。 stringObject.charAt(index)从键盘输入获取了一个字符串,将其数据类型转换为字符型。 Scanner scan new Scanner(System.in); String str scan.next(); char ca str.charAt(0);示例: import java.u…

Java基本语法(14)--for循环结构

循环结构:在某些条件满足的情况下,反复执行特定代码的功能。 基本格式: for (①初始化部分; ②循环条件部分; ④迭代部分){ ③循环体部分; }如果①,④部分多条语句,语句之间用“,”…

Java 8中的功能接口是什么? @功能注释和示例

函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习lambda表达式和Stream API。除非您知道什么是功能接口以及lambda与它之间的关…

win10存储池_3个光威480G SSD组WIN10存储池,深度测试到底值不值得搞

上次由于我SSD不够,所以我用虚拟硬盘的方式,虚拟了3个VHDX硬盘,组了个奇偶校验的存储池,并且简单的做了测试。测试结果是,组存储池确实提高了我们的数据安全性。WIN10存储池,可以让我们玩家省去组RAID&…

截止角频率和截止频率的关系_开关电源的控制环截止频率和开关频率有什么关系?...

【新朋友】点击上方蓝字“电源之家”关注【老朋友】点击右上角按钮,分享到朋友圈电源之家官方技术③群:522815202(3000人群)(电源行业第一大技术交流QQ群)这个问题很专业,因此答案注定也专业而非科普,非电力电子专业小伙伴看不懂很…

restlet_Restlet框架– Hello World示例

restletRestlet是用于Java平台的轻量级,全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输,数据格式和服务描述标准,例如HTTP和HTTPS,SMTP,XML,JSON,At…

在运行时在Spring Cloud Config中刷新属性配置

在本系列Spring Cloud Config的教程系列中,我们将讨论在运行时刷新属性配置的过程,我们将使用Spring Boot致动器/refresh端点进行/refresh 。 此外,我们还将研究使用RefreshScope注释刷新Value属性。 在我的Spring Cloud Config的上一教程中…

pythonnumpy教程_Python学习教程:通俗易懂的Numpy入门教程

Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pandas也是基于numpy构建的,机器学习包scikit-learn也大量使用了numpy方法。本文介绍了Numpy的n维数组在数据处理和分析的所有核心应用。目录如何构建numpy数组如何观察数…

css hack技巧_5种减少Hack的编码技巧

css hack技巧在本文中,我们将探讨五种方法,这些方法可以使用有效的编码来帮助垃圾回收器花费更少的CPU时间分配和释放内存,并减少GC开销。 较长的GC通常会导致我们的代码在回收内存时停止(也称为“停止世界”)。 一些…

mysql数据库全备_MySQL innobackupex全备是指什么

MySQL innobackupex全备是指什么发布时间:2020-06-03 10:10:31来源:51CTO阅读:133作者:三月下文主要给大家带来MySQL innobackupex全备是指什么,希望这些内容能够带给大家实际用处,这也是我编辑MySQL innob…

数组初始化使用(写)new与不使用(不写)new

首先,数组初始化时,写不写new没有区别的。int arr[] new int[]{ 3, 9, 8};或者int[] arr {3,9,8};编译器遇到 int a[] {3, 8, 9}; 会编译成和 int a[] new int[] {3, 8, 9}; 完全一样的中间代码。 ①不同于String类。String由于实现了常量池&#xf…

Java数组(2)--一维数组

一、一维数组的(声明赋值)初始化 声明:type var[]; 或 type[] var;(示例:int[] age;) 初始化: ①动态初始化:声明且为数组元素分配空间,与赋值的操作分开进行 int[] ar…

Java数组(3)--二维(多维)数组

二维数组相当于一维数组的元素是一维数组 一、二维数组声明赋值初始化 动态初始化① int[][] arr new int[3][2];定义了名称为arr的二维数组 二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为…

workflow java_workflow java实现的activity工作流实例 Develop 238万源代码下载- www.pudn.com...

文件名称: workflow下载收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 134 KB上传时间: 2014-09-18下载次数: 3提 供 者: 张华详细说明:java实现的activity工作流实例 -java activity文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉)…

使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法

这篇文章是3篇系列文章的最后一部分,该系列文章探讨了如何为基于Spring Boot 2的应用程序启用OAuth2提供程序SSO。 3个帖子是: 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法 与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring …

实现任意行数的杨辉三角

public class JavaTest {public static void main(String[] args) {//放置杨辉三角的数组&#xff0c;可通过更改new int[n][]中n的值以获取不同行数的杨辉三角int[][] yangItem new int[10][];//获取杨辉三角数组中每个元素的值for (int i 0;i < yangItem.length;i){//当…

java excel sheet页_Java导出Excel Sheet页

1、问题背景导出Excel表格时&#xff0c;首先要生成Sheet页&#xff0c;下面将介绍如何生成Sheet页2、实现源码/**** Project:* Title:ExcelExport.java* Package:report.utils* Description:* Author:YouHaiDong* Date:2015年11月2日 下午6:29:22* Version:*/package report.u…

鸿蒙与安卓系统简单对比,绝非追求三分天下。

鸿蒙是面向5G物联网、面向全场景的分布式操作系统&#xff0c;其不是安卓系统的分支或修改而来的&#xff0c;与安卓、iOS是不一样的操作系统。鸿蒙将打通手机、电脑、平板、电视、电器设备、工业自动化控制、无人驾驶、车机设备 、智能穿戴统一成一个操作系统&#xff0c;并且…

(0.1)鸿蒙HarmonyOS开发工具DevEco Studio设置

1、打开设置操作框 2.1主题设置&#xff08;可以工具自己的喜好设置主题&#xff09; 2.2设置字体 2.3设置注释 2.4设置提示语句忽略大小写&#xff08;输入小写时&#xff0c;提示语句也会出现大写的关键字等&#xff09; 2.5设置自动导包&#xff08;不用导包&#xff0c;工具…

向Java最佳专家的全球专家学习Java

Java with the Best Virtual Conference是您学习微服务&#xff0c;Java 9&#xff0c;Kubernetes以及其他Java的指南&#xff01; 将于4月17日至18日收听&#xff0c;收听来自Pivotal&#xff0c;RedHat&#xff0c;Microsoft&#xff0c;Oracle和Netflix等公司的行业领导者进…