Mycat中间件如何实现Mysql数据分片

41次阅读
没有评论

共计 6381 个字符,预计需要花费 16 分钟才能阅读完成。

这篇文章主要介绍了 Mycat 中间件如何实现 Mysql 数据分片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

架构图:

机器规划:

IP 地址主机名角色备注 10.4.132.50k8s01mycat,master
10.4.132.42k8s02master
10.4.132.66k8s03master

Mycat 下载地址:http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
Mysql 下载地址:
http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz

1. 下载安装 Mysql(三台 Mysql 都需要安装)
[root@k8s01 soft]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
[root@k8s01 soft]# tar xvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@k8s01 soft]# cd /usr/local/
[root@k8s01 local]# mv mysql-5.7.27-linux-glibc2.12-x86_64/ mysql-5.7.27
[root@k8s01 local]# chown -R root:root mysql-5.7.27/
[root@k8s01 local]# cd mysql-5.7.27/
[root@k8s01 mysql-5.7.27]# mkdir data
[root@k8s01 mysql-5.7.27]# useradd -r -M -s /bin/nologin mysql
[root@k8s01 mysql-5.7.27]# chown -R mysql:mysql data/
[root@k8s01 mysql-5.7.27]# ./bin/mysqld –initialize –user=mysql –basedir=/usr/local/mysql-5.7.27 –datadir=/usr/local/mysql-5.7.27/data
2019-11-02T04:24:41.908404Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
2019-11-02T04:24:46.687678Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-11-02T04:24:47.428823Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-11-02T04:24:47.487404Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b42cef88-fd28-11e9-a5cc-000c29ee86d5.
2019-11-02T04:24:47.488204Z 0 [Warning] Gtid table is not ready to be used. Table mysql.gtid_executed cannot be opened.
2019-11-02T04:24:47.612739Z 1 [Note] A temporary password is generated for root@localhost: 3m;5yQ_7T#jc – 登陆密码
[root@k8s01 mysql-5.7.27]# cp -a support-files/mysql.server /etc/init.d/mysqld
[root@k8s01 mysql-5.7.27]# chkconfig –add mysqld
[root@k8s01 mysql-5.7.27]# chkconfig mysqld on
[root@k8s01 mysql-5.7.27]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql-5.7.27
datadir=/usr/local/mysql-5.7.27/data
[root@k8s01 mysql-5.7.27]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql-5.7.27

datadir=/usr/local/mysql-5.7.27/data

socket=/tmp/mysql.sock

symbolic-links=0

server_id=10

binlog_format=ROW

max_binlog_size=2G

sync_binlog=1

binlog_cache_size=64M

log_bin=bin-log

log_bin_index=bin-index

[mysqld_safe]
log-error=/usr/local/mysql-5.7.27/data/mariadb.log
pid-file=/usr/local/mysql-5.7.27/data/mariadb.pid

[root@k8s01 mysql-5.7.27]# /etc/init.d/mysqld restart
ERROR! MySQL server PID file could not be found!
Starting MySQL.Logging to /usr/local/mysql-5.7.27/data/mariadb.log .
… SUCCESS!
[root@k8s01 mysql-5.7.27]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql-5.7.27/bin
[root@k8s01 mysql-5.7.27]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.27
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respectiveowners.
Type help; or \h for help. Type \c to clear the current input statement.
mysql set password=password(System135
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql exit
Bye
[root@k8s01 mysql-5.7.27]# mysql -u root -pSystem135
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type help; or \h for help. Type \c to clear the current input statement.
mysql grant all privileges on *.* to repl@ % identified by 123456
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql  

2. 下载安装 Mycat
[root@k8s01 soft]# rpm -ivh jdk-8u221-linux-x64.rpm

warning: jdk-8u221-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY

Preparing…  ################################# [100%]

Updating / installing…

  1:jdk1.8-2000:1.8.0_221-fcs  ################################# [100%]

Unpacking JAR files…

 tools.jar…

 plugin.jar…

 javaws.jar…

 deploy.jar…

 rt.jar…

 jsse.jar…

 charsets.jar…

 localedata.jar…

[root@k8s01 soft]# tar xvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz  -C /usr/local/
[root@k8s01 soft]# cd /usr/local/mycat/conf/
[root@k8s01 conf]# 

3. 数据按范围分片
[root@k8s01 conf]# vim schema.xml

[root@k8s01 conf]# vim rule.xml       – 其它不要动,只修改以下内容

[root@k8s01 conf]# vim autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.  –K 表示 1 千,M 表示 1 万
0-5=0  – 从 0 到 5 放到第一个节点
5-10=1  – 从 6 到 10 放到第二个节点
10-15=2  – 从 11 到 15 放到第三个节点  

[root@k8s01 conf]# vim server.xml  –Mycat 登陆用户名和密码

[root@k8s01 conf]# ../bin/mycat restart
Stopping Mycat-server…
Stopped Mycat-server.
Starting Mycat-server…
[root@k8s01 conf]# netstat -antulp | grep 8066
tcp6  0  0 :::8066  :::*  LISTEN  46762/java 

[root@k8s01 conf]# netstat -antulp | grep 9066
tcp6  0  0 :::9066  :::*  LISTEN  46762/java                      
[root@k8s01 conf]#

4. 验证数据分片后存放
[root@k8s01 conf]# /usr/local/mysql-5.7.27/bin/mysql -u root -pSystem135 -P8066 -h 127.0.0.1  – 登陆 Mycat 数据数据

查询写入后的数据:

k8s01 节点验证数据:

k8s02 节点验证数据:

k8s03 节点验证数据:

5. 数据按日期(月份)分片
[root@k8s01 conf]# vim schema.xml

[root@k8s01 conf]# vim rule.xmlMycat 中间件如何实现 Mysql 数据分片

[root@k8s01 conf]# ../bin/mycat restart
Stopping Mycat-server…
Stopped Mycat-server.
Starting Mycat-server…
[root@k8s01 conf]# !net
netstat -antulp | grep 9066
tcp6  0  0 :::9066  :::*  LISTEN  69040/java 

[root@k8s01 conf]# netstat -antulp | grep 8066
tcp6  0  0 :::8066  :::*  LISTEN  69040/java 

[root@k8s01 conf]#
6. 验证数据分片后存放

Mycat 中间件如何实现 Mysql 数据分片

验证数据:

k8s01 节点:

Mycat 中间件如何实现 Mysql 数据分片

k8s02 节点:

Mycat 中间件如何实现 Mysql 数据分片

k8s03 节点:

Mycat 中间件如何实现 Mysql 数据分片

错误处理:
mysql insert into t_wuhan(create_time,name,age) values(2015-04-01 , huanggang ,16);
ERROR 1064 (HY000): Can t find a valid data node for specified node index :T_WUHAN – CREATE_TIME – 2015-04-01 – Index : 3
解决方法:
  写入 4 月份数据时会提示找不到节点,是因为有几个节点就会写入几月份数据,比如我只有 3 个 node 节点,只能写入 1 - 3 月份数据。
7. 数据按枚举分片
[root@k8s01 conf]# vim schema.xmlMycat 中间件如何实现 Mysql 数据分片[root@k8s01 conf]# vim rule.xml Mycat 中间件如何实现 Mysql 数据分片

[root@k8s01 conf]# cat partition-hash-int.txt  – 可以写多个枚举
学生 =0
老师 =1
DEFAULT_NODE=2
[root@k8s01 conf]#

8. 验证数据分片后存放

Mycat 中间件如何实现 Mysql 数据分片

验证数据:
k8s01 节点:

Mycat 中间件如何实现 Mysql 数据分片

k8s02 节点:

Mycat 中间件如何实现 Mysql 数据分片

k8s03 节点:

Mycat 中间件如何实现 Mysql 数据分片

错误处理:
mysql insert into t_wuhan(id,name,age) values(1, tong , 学生
ERROR 1064 (HY000): columnValue: 学生 Please check if the format satisfied.
mysql insert into t_wuhan(id,name,age) values(1, tong , 学生
ERROR 1064 (HY000): columnValue: 学生 Please check if the format satisfied.
mysql

解决方法:

Mycat 中间件如何实现 Mysql 数据分片

type:type 值默认为 0,表示数值是整型。值为 1,表示是字符串。
defaultNode:值对应 partition-hash-int.txt 文件中的 DEFAULT_NODE 的值。

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“Mycat 中间件如何实现 Mysql 数据分片”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计6381字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)