https://upload.jianshu.io/users/upload_avatars/9415503/6ac415b5-009a-4973-a794-ccade4c876b2.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240

Apache Apisix初体验

Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能的 API 网关,目前已经是 Apache 的顶级项目。提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等。可以使用 APISIX 来处理传统的南北流量以及服务之间的东西向流量。

Docker故障案例分析

案例一 docker启动故障

症状

在执行如下启动命令后docker restart mysql 出现了一下异常报错

1
2
3
docker start mysql
Error response from daemon: OCI runtime create failed: container with id exists: fd91b9c3f3ca2970c9293042b539759c9fb10f4988548d4cc07aaae85278f719: unknown
Error: failed to start containers: mysql

解决方案

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 进入如下目录
cd /run/docker/runtime-runc/moby

# 执行ls命令可以查看到类似显示
ls
27bc8c9564888782e3aaae0382ba236f83d5b01675aea0a8bfe00083b7177816  bb41ae5131f2a5652fdd03409a6c90f4f4f845d9efc8229f69bd13d027b735f2
32327b2aad556318fe59b79ad9aa9f7f2fbec8146e22b26413b2bc690de0817d  c1203eb340a9b616e03d678a11e70ef4c8f67e7c40a68b7ca65cf168995a3fbe
343c89cb950f951b52c452e833414a75176ba2078dd25a3863ba10a2ff7eaeda  c318f684ba6082b8afa4196ebc6581687078765107e661eb49a77f9bae39d9f1
fd91b9c3f3ca2970c9293042b539759c9fb10f4988548d4cc07aaae85278f719

# 通过rm -rf命令删除文件夹
# 例如删除症状中的错误id(fd91b9c3f3ca2970c9293042b539759c9fb10f4988548d4cc07aaae85278f719)对应的文件夹
rm -rf fd91b9c3f3ca2970c9293042b539759c9fb10f4988548d4cc07aaae85278f719/

# 删除后重新执行命令,即可启动容器
docker restart mysql

什么是朋友?你是否能懂得~

https://tc.ctq6.cn/tc/t.jpg

关于「朋友」的定义很广泛,每個人心中认定的友情标准也不一样,人的一生中,总会有那麼几个你將他视为的朋友,但在你最需要依靠的時候,他们往往都不在身边,甚至遭到背叛。所谓「真心的朋友」到底是什么?也许看完以下的解释你就会明白。

KubernetesIngress自动化https

随着 HTTPS 不断普及,大多数网站开始由 HTTP 升级到 HTTPS。使用 HTTPS 需要向权威机构申请证书,并且需要付出一定的成本,如果需求数量多,则开支也相对增加。cert-manager 是 Kubernetes 上的全能证书管理工具,支持利用 cert-manager 基于 ACME 协议与 Let’s Encrypt 签发免费证书并为证书自动续期,实现永久免费使用证书。

阿里云ElasticSearch数据同步至自建ElasticSearch

OSS 快照迁移

购买OSS实例并创建bucket

在阿里云ElasticSearch上创建仓库my_backup

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
PUT _snapshot/my_backup/
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "xxxxxx",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}
参数 说明
endpoint OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心。
access_key_id 用于标识用户。获取方式,请参见获取AccessKey。
secret_access_key 用于验证用户的密钥。获取方式,请参见获取AccessKey。
bucket OSS Bucket的名称,需要一个已经存在的Bucket。获取方式,请参见创建存储空间。
compress 打开快照文件的压缩功能。
true: 打开压缩功能,仅应用于元数据文件(索引映射和设置)。
false(默认值): 不打开压缩功能,数据文件未压缩。
chunk_size 当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。
base_path 仓库的起始位置,默认为根目录

快照指定索引

默认行为是备份所有打开的索引。不过如果你在用 Kibana,你不是真的想要把所有诊断相关的 .kibana 索引也备份起来。可能你就压根没那么大空间备份所有数据。

Mysql常用sql整理

加密查询

md5加密

1
select MD5('123456') as a

掩藏身份证号

1
select CONCAT(LEFT(`id_number`,9),'*********',RIGHT(`id_number`,1))

查询身份证号

1
select * from test where left('id_number',6)=123456 and right('id_number',3)=456

生成随机数

1
select round(rand()*(999999-111111)+111111)

生成id流水号

1
2
set id = CONCAT(LEFT(id_number,6),'181206',LPAD(id, 7,'0'))  #从左到右截取
set id = CONCAT(LEFT(id_number,6),'181206',RPAD(id, 7,'0'))  #从右到左截取

添加性别

1
IF (MOD(SUBSTRING(id_number,17,1),2),'男','女') as "user_sex"

正则匹配

1
select * from table where clounme REGEXP '[A-Z]'

识别大小写

1
select * from test where id_number like 'x%'

查看字段

1
select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.columns  where table_name='export' and table_schema='data_import'

查询字段是否存在

1
select * from information_schema.columns where table_name = 'export' and column_name = '创业市'

计算

求和

1
SELECT SUM(salary) as "Total Salary" FROM employees WHERE salary > 25000;

大于等于

1
2
SELECT * FROM employees WHERE employee_id BETWEEN 50 AND 60;
SELECT * FROM employees WHERE employee_id >= 60 AND employee_id<= 50;

去重

去重查询

1
2
select username from auth_user GROUP BY username HAVING COUNT(*) >4
select * from user where username in(select username from auth_user GROUP BY username HAVING COUNT(*) >1

去重删除

1
select id from user  where id_number in(select id_number from user group BY id_number HAVING COUNT(id_number) >1) and id not in (select min(id) from use_exit group by id_number having count(id_number)>1)

字段去重查询

1
select distinct census_county from user

字符串截取

1
2
3
4
5
select left('abcd',3)
select right('abcd',3)
select substring('abcd',2,2)
select substring('abcd',-2,2)
select substring('abcd',-2)

字符串转换日期格式

1
select FROM_UNXITIME(date_bitrh,'%Y%m%d') from a

连接

内连接查询

1
select * from table1 inner join table2 on table1.user=table2.user

左连接查询

1
select * from table1 left join table2 on table1.user=table2.user

右连接查询

1
select * from table1 right join table2 on table1.user=table2.user

update 更新

1
2
update user a inner join user_regiter b on 
a.id_number=b.id_number set b.id=a.id,a.user_sex=b.user_sex,a.user_name=b.user_name

子查询更新

1
2
update user a,(select IF (MOD(SUBSTRING(id_number,17,1),2),'男','女')  as user_sex from user_1) b set a.user_sex=b.user_sex where a.id_number is not null
update user a,(select date_birth,id_number_enc from user_register_1) b set a.date_birth=b.date_birth where a.id_number=b.id_number

增加字段

增加字段

1
alter table user add is tinyint(1) comment '是否人员';

修改字段名

1
2
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
ALTER TABLE testalter_tbl MODIFY c CHAR(10);

修改表名

1
ALTER TABLE testalter_tbl RENAME TO alter_tbl;

创建索引

1
CREATE INDEX indexName ON mytable(username(length));

添加普通索引

1
ALTER table tableName ADD INDEX indexName(columnName)

删除索引

1
DROP INDEX [indexName] ON mytable;

删除字段

1
ALTER table tableName drop cloumes

查看索引

1
show index from table;

创建唯一索引

1
CREATE UNIQUE INDEX indexName ON mytable(username(length))

添加索引

1
2
3
4
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list)
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)
ALTER TABLE tbl_name ADD INDEX index_name (column_list)  # 普通索引,索引值可以出现多次
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)

删除主键

1
ALTER TABLE testalter_tbl DROP PRIMARY KEY

增加字段类型长度

1
alter table 表名 modify column 字段名 char(19)

查询数据库

查询数据库

1
show status like 'Table%';select * from information_schema.PROCESSLIST ORDER BY  time desc;show status like '%connect%'

查询语句

1
EXPLAIN select operationl0_.id as id1_23_0_, operationl0_.action as action2_23_0_, operationl0_.create_time as create_t3_23_0_, operationl0_.module as module4_23_0_, operationl0_.new_value as new_valu5_23_0_, operationl0_.old_value as old_valu6_23_0_, operationl0_.relevance_id as relevanc7_23_0_, operationl0_.remark as remark8_23_0_, operationl0_.url as url9_23_0_, operationl0_.user_id as user_id10_23_0_, operationl0_.user_name as user_na11_23_0_ from operation_log operationl0_ where operationl0_.id=1141181855320596481

查询所有的数据库

1
SELECT schema_name FROM information_schema.schemata

权限添加

存储过程权限添加

1
2
3
4
5
grant select on mysql.proc to developer@'xxxx'
grant create routine on testdb.* to developer@192.168.0.%; -- now, can show procedure status
grant alter routine on testdb.* to developer@192.168.0.%; -- now, you can drop a procedure
grant execute on testdb.* to developer@192.168.0.%;
show grants for am@'%'

mysql 修改密码(5.7)

1
2
update user set authentication_string=PASSWORD("jltSz1tboExi92t&Qct%6J14") where user="root";
flush privileges;

mysql 修改密码 (8.0)

1
2
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yfgj@2020#admin';
flush privileges;

创建临时表恢复数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 创建表
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 创建临时表
create table new_table like old_table
insert into new_table select * from old_table
rename oldname to newname
rename table old_name to newname
### 锁表
# 加读锁
SET AUTOCOMMIT=0;
lock tables user_auth_image read
COMMIT;
UNLOCK TABLES;

Spring_Cli命令行使用

Spring Boot CLI

Spring Boot CLI是一个命令行工具,如果想使用Spring进行快速开发可以使用它。它允许你运行Groovy脚本,这意味着你可以使用熟悉的类Java语法,并且没有那么多的模板代码。你可以通过Spring Boot CLI启动新项目,或为它编写命令。

Kubernetes_HPA使用详解

kubectl scale命令可以来实现 Pod 的扩缩容功能,但是这个毕竟是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理: