RedisTemplate批量获取Key
private static final Integer SCAN_COUNT = 10000;/** * 使用scan遍历key * 为什么不使用keys 因为Keys会引发Redis锁,并且增加Redis的CPU占用,特别是数据庞大的情况下。这个命令千万别在生产环境乱用。 * 支持redis单节点和集群调用 * * @param matchKey * @return */public Set<String> scanMatch(String matchKey) { Set<String> keys = new HashSet(); RedisConnectionFactory connectionFactory = redisTemplate.getConnectionFactory(); RedisConnection redisConnection = connectionFactory.getConnection(); Cursor<byte[]> scan = null; //集群 if(re ...
ShardingSphere介绍
概述
简介 ShardingSphere-JDBC ShardingSphere-Proxy ShardingSphere-Sidecar(TODO)
混合架构
解决方案
线路规划
ShardingSphere GitHub地址:https://github.com/apache/shardingsphere ShardingSphere 官网:https://shardingsphere.apache.org/index_zh.html “> “> “> “> **星评增长时间线** “> **贡献者增长时间线** “> Apache ShardingSphere 产品定位为 Database Plus,旨在构建多模数据库上层的标准和生态。 它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。ShardingSphere 站在数据库的上层视角,关注他们之间的协作多于数据库自身。 连接、增量和可插拔是 Apache ShardingSphere 的核心概念。
连接:通过对数据库协议、SQL 方言以及数据库存储的灵活适配,快 ...
记一次Msyql崩溃导致无法启动
环境操作系统:CentOS 7 Mysql版本:Mysql 8.0.x Docker版本:Docker version 20.10.10
问题mysql服务是通过Docker方式部署,一次重启导致mysql容器无法正常启动,查看发现mysql容器一直在不断启动…断开…启动…断开,之所以会这样是因为起初创建mysql容器是设置了:–restart always 就是只要Docker服务活着,该容器就会启动,如果断开了就会自动重启,由于崩溃,Mysql无法启动,然后docker再尝试重启,就这样陷入了循环… 摘取一段mysql容器报错日志
2022-05-23T03:29:02.744075Z 1 [ERROR] [MY-011972] [InnoDB] Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://dev.mysql.com/doc/refman/8.0/en/forcing-inn ...
Mysql通过ibd文件恢复数据
环境操作系统:CentOS 7 Mysql版本:8.0.x
问题如果Mysql服务无法启动,则可以通过Mysql表对应的.ibd文件恢复数据,如果你的Mysql服务可以正常启动,就不要使用这种方式了
办法
创建一张表,表结构与原表结构一致
删除新建的表空间
ALTER TABLE <table_name> DISCARD TABLESPACE;
将待恢复的.ibd文件copy到目标数据库文件夹下,并修改文件权限:
cp <table_name>.ibd /var/lib/mysql/<database_name>cd /var/lib/mysql/<database_name>chown mysql:mysql <table_name>.ibd
注意:如果mysql服务是通过Docker方式部署,需要将.ibd文件拷贝到,映射到Mysql的Docker容器路径下,修改权限需要进入到Mysql所在的Docker容器!重点,不是直接在安装Docker那台机器上修改权限,一定要进入到myslq所在的docker容器 doc ...
GeoServer启动报错:java.lang.NoClassDefFoundError: Could not initialize class javax.media.jai.JAI
环境
操作系统:CentOS 7
JDK版本:1.8
Tomcat版本:8.x
GeoServer版本:Stable 2.21.0
问题CentOS 7系统通过geoserver官方提供的war包形式部署,tomcat启动正常,确定tomcat没问题,将下载的geoserver.war包放置tomcat的webapps路径下,tomcat启动状态会自动部署,通过启动log查看报错:
java.lang.NoClassDefFoundError: Could not initialize class javax.media.jai.JAI
tomcat在linux上启动时查看控制台命令
tomcat/bin/start.sh && tail -f tomcat/logs/catalina.out
解决1.下载JAI Java Advanced Imaging (JAI) 是Oracle开发的用于高级图像处理的库。 GeoServer无需它即可运行, 因为它随附了纯Java版本的JAI。 安装JAI可以大大提高处理图像时的性能, 即栅格格式数据。 如果您不打算使用空间 ...
CentOS对已有卷组扩容
环境操作系统:Centos 7
需求对已有的一块挂载磁盘卷组进行扩容
流程
添加一块新磁盘 查看磁盘
fdisk -l
比如新加的磁盘名称为:/dev/vdd 2. 将新添加的磁盘创建物理卷
pvcreate /dev/vdd
将新创建的物理卷加入已存在需要扩容的卷组 查看卷组信息
vgdisplay
加入第二步中新创建的卷组
vgextend centos /dev/vdd
将新添加的大小全部给到卷组
lvextend -l +100%FREE /dev/mapper/centos-lvname
重新加载卷组大小
resize2fs /dev/mapper/centos-lvname
查看
df -Th
注意项
如果你的磁盘是使用的和本文章这样是将多个磁盘使用LVM通过创建物理卷然后创建卷组,通过挂载卷组磁盘的方式,扩容时不要在已经初始化为物理卷的磁盘上直接扩容
比如,/dev/vda 这块磁盘已经被创建成物理卷并且添加至卷组,不要在这块磁盘上直接扩容这块磁盘的大小,目前已知华为云是可以直接在已有的磁盘上直接 ...
记一次Mysql数据迁移至Mycat
环境
数据库:Mysql8
操作系统:Windows10、CentOS7
中间件:Mycat1.6.7
场景数据库使用的mysql,起初是单库单表,时间久了单表的数据量越来越大,一个表中的数据量达到3个多亿,mysql单表数据量达到800万左右就达到瓶颈了,不得不分表了,使用mycat中间件
迁移前准备
部署好新的数据库节点,服务器磁盘容量保证要从充足
分析需要迁移的单表数据量,计算现有数据量及估算每日新增大概数据量,按照单表800万左右存储,计算单表需要拆分成多少个分片
在新的数据库节点创建好相应的分片表及mycat配置,建议涉及到的索引这个时候也创建好
导出原始数据导出数据的方式有很多种,也可以参考这篇文章:Mysql千万级数据量批量快速迁移 - mysqldump 方式 - load data 方式 - 利用Navicat For Mysql可视化工具方式 - 第三方开源工具yugong - … 注:以上几种最快的方式是第二种load data - 实际测试如果将导出的数据通mycat1.6.7版本导入到新的数据节点,load data方式不支持,根据mycat1.x官方文档 ...
Mycat1.6.7.6全局序列号的使用
环境
操作系统:CentOS 7
Mysql版本:Mysql8
Mycat版本:Mycat1.6.7.6
全局序列号(sequence)数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据 唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence),因此一般全局序列号用于分表情况
全局序列号介绍在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,MyCat提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式。
1.本地文件方式原理: 此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更下 classpath中的sequence_conf.properties文件中sequence当前的值。 配置方式: 在 sequence_conf.properties 文件中做如下配置:
GLOBAL_SEQ.HISIDS= GLOBAL_SEQ.MINID=1001GLOBAL_SEQ.MAXID=1000000000GLOBAL_SEQ.C ...
基于HA机制的Mycat高可用
环境
操作系统:CentOS 7
Mycat版本:Mycat1.6.7.6
HAproxy版本:1.5.18
Keepalived版本:1.4.2
准备
Mycat安装:CentOS安装Keepalived
HAproxy安装:CentOS安装HAproxy
Keepalived:Mycat1.6.7.6安装与启动
高可用方案在实际项目中,Mycat服务也需要考虑高可用性,如果Mycat所在服务器出现宕机,或Mycat服务故障,需要有备机提供服务,需要考虑Mycat集群,可以使用 HAProxy + Keepalived 配合两台+Mycat搭起Mycat集群实现高可用性。HAProxy实现了MyCat多节点的集群高可用和负载均衡,而HAProxy自身的高可用则可以通过Keepalived来实现
HAproxy配置global log 127.0.0.1 local0 #log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 ...
CentOS安装Keepalived
环境
操作系统:CentOS 7
Keepalived版本:1.4.2
准备下载Keepalived安装包 - 方式一,将下载好的安装包上传至服务器,点击下载:keepalived-1.4.2.tar.gz - 方式二,通过wget命令直接在服务器下载
wget https://itze.cn/uploads/keepalived-1.4.2.tar.gz
安装解压到/usr/local/src(位置自己可以改变)
tar -zxvf keepalived-1.4.2.tar.gz -C /usr/local/src
安装依赖插件
yum install -y gcc openssl-devel popt-devel
进入解压后的目录,进行配置,进行编译
cd /usr/local/src/keepalived-1.4.2
./configure --prefix=/usr/local/keepalived
进行编译,完成后进行安装
make && make install
运行前配置
cp /usr/local/src/ke ...