Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

  • JavaEE

  • Linux

  • MySQL

    • 数据库简介
    • 数据库基础
    • 多表查询
    • 视图
    • 备份
    • MySQL 存储过程和函数
    • 触发器
    • 事务
    • 存储引擎
    • 索引
    • 用户与权限
    • 锁
    • MyCat 中间件
      • Windows命令安装mysql
      • mysql忘记密码
      • 安装
      • 克隆
      • 主重复制
      • 读写分离
      • 分库分表
        • 水平拆分
        • 垂直拆分
  • NoSQL

  • Python

  • Python模块

  • 机器学习

  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

  • JUC

  • Golang

  • Kubernetes

  • 硅谷课堂

  • C

  • 源码

  • 神领物流

  • RocketMQ

  • 短链平台

  • 后端
  • MySQL
Iekr
2021-08-18
目录

MyCat 中间件

# MyCat 中间件

MyCat 是一款 数据集群软件,支持 MySQL 和常用的关系型数据库

# Windows 命令安装 mysql

# 卸载mysql服务
sc delete mysql
# mysql初始化
mysqld --initialize
# 安装
mysqld install
# 启动服务
net start mysql
# 输出控制台 用于查看错误信息
mysqld --console
1
2
3
4
5
6
7
8
9
10

# mysql 忘记密码

vi /etc/my.cnf
#在[mysqld]下添加编码配置
skip-grant-tables  #无需密码进入mysql


mysql -uroot -p #直接回车进入

#修改密码
use mysql;
update user set authentication_string=password('123456') where user='root';
#刷新权限
flush privileges;
exit;
#删除之前的无密码
vi /etc/my.cnf

systemctl restart mysqld #重启
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 安装

mysql

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
systemctl start  mysqld.service
grep "password" /var/log/mysqld.log
 
mysql -uroot -p

#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
#关闭密码强度检测
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
flush privileges; 
#退出
exit
#防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload  

#配置默认编码为UTF-8 修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示
vi /etc/my.cnf
#在[mysqld]下添加

character_set_server=utf8
collation-server=utf8_general_ci
init_connect='SET NAMES utf8'

systemctl restart mysqld

# 开机启动
systemctl enable mysqld
systemctl daemon-reload

#用户名为root 密码为A37
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

mycat

#上传mycat到linux上
tar -xvf Mycat-server-1.6.7.6-release-20210730131311-linux.tar.gz 

# 编辑环境变量
vi /etc/profile

#添加以下内容
export MYCAT_HOME=/root/mycat

source /etc/profile

cd /root/mycat/bin
./mycat start

firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --reload  

#用户root 密码123456 端口8066
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 克隆

克隆重新生成 mac 地址

并修改 mysql 的 uuid 随机改一下

vi /var/lib/mysql/auto.cnf
1

# 主重复制

MyCat 的读写分离 需要用到主从复制 从表会根据主表进行同步

我们在写数据时 写入主表 而读取从从表中读取

#在主服务器上
vi /etc/my.cnf

#在[mysqld]加上 log-bin 开启主从复制 server-id 主从服务器的唯一标识
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1

service mysqld restart

mysql -uroot -p

# 需要 file和position的值 配置从服务器用
show master status;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#在从服务器上
vi /etc/my.cnf

#在[mysqld]加上
server-id=2

mysql -uroot -p

use mysql;
drop table slave_master_info;
drop table slave_relat_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
sorce /usr/share/mysql/mysql_system_tables.sql;

serveice mysqld restart

mysql -uroot -p

change master to master_host='主服务器ip',master_port=3306,master_user='root',master_password='password',master_log_file='刚刚在主服务器查到的值',master_log_pos=同样也是之前查到的;

# 开启从节点
start slave;

# 查询结果 Slave_IO_Runing和Slave_SQL_Running都为yes才成功
show slave status\G;
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

# 读写分离

需要先配置主从复制 写操作只写主服务器 而读取是从从服务器中数据

# 修改server.xml
vi /root/mycat/conf/server.xml
1
2
        <user name="root" defaultAccount="true">
          				  <!-- 密码 -->
                <property name="password">123456</property>
         			   <!-- 库名 -->
                <property name="schemas">TESTDB</property>
                <property name="defaultSchema">TESTDB</property>
        </user>

1
2
3
4
5
6
7
8
# 修改schema.xml
vi /root/mycat/conf/schema.xml
1
2
<!-- 建议百度找配置文件这个不太准确 -->
<mycat:schema xmlns:mycat="http://io.mycat/">
     <!-- name为主服务器 server文件的虚拟库名与name必须一致   -->
	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
		<table name="customer" primaryKey="id" dataNode="dn1,dn2" rule="sharding-by-intfile" autoIncrement="true" fetchStoreNodeByJdbc="true">
			<childTable name="customer_addr" primaryKey="id" joinKey="customer_id" parentKey="id"> </childTable>
		</table>
	</schema>
    <!-- name必须与datenode一致  database为真实的库名  -->
	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- 主服务器 host自定义  url为写的数据的地址+端口  user passwd -->
		<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root"
				   password="root">
            <!-- 从服务器 负责读 -->
            <readHost host="hostS1" url="从服务器+端口" user="" password="">
		</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
# 重启 mycat
./mycat restart
1
2

使用时连接 mycat 的地址使用即可

# 分库分表

将庞大数据量拆分为不同的数据库和数据表进行存储

# 水平拆分

根据表的数据逻辑关系,将同一表中的数据按某种条件,拆分到多台服务器上,也叫横向拆分

  • 修改主服务器中 server.xml vi /root/mycat/conf/server.xml

    • <!-- 添加property 配置主键方式 0为本地文件方式 -->
      <property name="sequnceHandlerType">0</property>
      
      1
      2
  • 修改主服务器的 sequence_conf.properties vi /root/mycat/conf/sequence_conf.properties

    • GLOBAL.HISIDS=     #可以自定义关键字
      GLOBAL.MINID=10001   #最小值
      GLOBAL.MAXID=20000   #最大值
      
      1
      2
      3
  • 修改 schema.xml vi /root/mycat/conf/schema.xml

    • <mycat:schema xmlns:mycat="http://io.mycat/">
      	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
      		<table name="customer" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long">
      		</table>
      	</schema>
          <!-- name必须与datenode一致  database为真实的库名  -->
      	<dataNode name="dn1" dataHost="localhost1" database="db1" />
      	<dataNode name="dn2" dataHost="localhost1" database="db2" />
      	<dataNode name="dn3" dataHost="localhost1" database="db3" />
          
      	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
      			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
      		<heartbeat>select user()</heartbeat>
      		<!-- 主服务器 host自定义  url为写的数据的地址+端口  user passwd -->
      		<writeHost host="hostM1" url="localhost:3306" user="root"
      				   password="root">
                  <!-- 从服务器 负责读 -->
                  <readHost host="hostS1" url="从服务器+端口" user="" password="">
      		</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
  • 修改 rule.xml vi /root/mycat/conf/rule.xml

    • <function name='mod-log' class='io.mycat.route.function.PartitionBymod'>
          <property name='count'>3</property>
      </function>
      
      1
      2
      3

插入数据列名必须完整 如果是自增键 则需要用 NEXT VALUE FOR MYCATSEQ_GLOBAL 不能用 null

以上配置用的是根据主键取模方式拆分

# 垂直拆分

根据业务的维度,将不同的表切分到不同数据库上,也叫纵向拆分

  • 修改 schema.xml vi /root/mycat/conf/schema.xml

    • <mycat:schema xmlns:mycat="http://io.mycat/">
      	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
      	
      		</table>
              <table name="dog" primaryKey="id" autoIncrement='true' dataNode='dn4'>
      		</table>
              <table name="cat" primaryKey="id" autoIncrement='true' dataNode='dn5'>
      		</table>
      	</schema>
          <!-- name必须与datenode一致  database为真实的库名  -->
      	<dataNode name="dn4" dataHost="localhost1" database="db1" />
      	<dataNode name="dn5" dataHost="localhost1" database="db2" />
          
      	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
      			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
      		<heartbeat>select user()</heartbeat>
      		<!-- 主服务器 host自定义  url为写的数据的地址+端口  user passwd -->
      		<writeHost host="hostM1" url="localhost:3306" user="root"
      				   password="root">
                  <!-- 从服务器 负责读 -->
                  <readHost host="hostS1" url="从服务器+端口" user="" password="">
      		</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

      根据 表名 区分库 如 dog 存放在 db1 中 cat 存放在 db2 中

编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
锁
Nosql

← 锁 Nosql→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式