「Linux」- PDF ⇔ IMG

IMG to PDF
我们需要将多张图片合并为 PDF 文档,所以该部分将记录将 IMG 转化为 PDF 的方法;
gscan2pdf
How to Convert Multiple Images to PDF in Ubuntu Linux

apt install gscan2pdf

// => File => Open
// => 选中所有图片
// => Save => PDF

img2pdf
bash – How can I convert a series of images to a PDF from the command line on Linux? – Stack Overflow

apt install img2pdf

img2pdf img1.png img2.jpg -o out.pdf

已知问题: 1)如果图片长度较长,则生成的 PDF 文件中,该图片无法正确显示(显示为细长条);
PDF to IMG
Compile a LaTeX document into a PNG image that’s as short as possible
我们需要将 PDF 转化为图 IMA 文件。该部分将记录将 PDF 转为 PNG 图片的方法;
latex(失败)
latex to dvi to png 对 \rotatebox 支持有问题,我们只能 latex to pdf to png)
ImageMagick: convert

convert -density 300 file.pdf -quality 90 file.png

Q:attempt to perform an operation not allowed by the security policy `PDF’ A:参考 ImageMagick 文档
参考文献[……]

READ MORE

「JENKINS-PIPELINE」- 语法 | Syntax

语法 | https://www.jenkins.io/doc/book/pipeline/syntax/

pipeline {
agent {}
triggers {}
options {}
stages {}
post {}
}

agent {} | 选择构建节点
根据分支来选择构建节点
DeepSeek / jenkins 根据分支选择构建节点
实现思路大同小异:(1)根据信息,为变量赋值,(2)在 agent {} 中,引用改数值;

agent {
label “${env.BRANCH_NAME.contains(‘test’)?’test’:env.BRANCH_NAME.contains(‘master’)?’master’:’default’}”
}

options {} | 控制构建的选项
禁用并行构建 | disableConcurrentBuilds()

options {
disableConcurrentBuilds()
}

控制构建超时 | timeout()
timeout(time: 1, unit: ‘HOURS’)
TimeUnit | https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html
丢弃旧的构建 | buildDiscarder()
How do I set discard old builds for a Multi Branch Pipeline Job?

options {
buildDiscarder(logRotator(numToKeepStr: ’30’, artifactNumToKeepStr: ’30’))
}

daysToKeepStr: history is only kept up to this days. numToKeepStr: only this number of build logs are kept. artifactDaysToKeepStr: artifacts are only kept up to this days. artifactNumToKeepStr: only this number of builds have their artifacts kept.
重试当前构建 | retry()
https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/#retr[……]

READ MORE

「Rancher」- Maintenance, Administration

用户及权限管理
Rancher Docs: Authentication Rancher Docs: Role-Based Access Control (RBAC) Rancher Docs: Global Permissions Rancher Docs: Cluster and Project Roles
用户登录认证: External 及 Local 两种认证; Local 认证无法使用 Group 功能;
权限管理: 1)Global Permissions:为某特定集群外的权限,即控制用户对 Rancher 的访问及控制; 2)Cluster and Project Roles:集群及项目权限,在集群或项目内赋予用户的权限;
Global Permissions(当创建用户时)
1)Administrator:管理员权限; 2)Restricted Admin:无管理 Local Cluster 权限; 3)Standard User:创建并使用集群,同时能将自身集群权限授予其他用户; 4)User-Base:仅仅具有登录权限。针对仅需项目管理的普通用户,在创建时,我们通常赋予该权限;
Cluster Roles(当将用户加入集群时)
1)Cluster Owner:能够控制整个集群; 2)Cluster Member:能够管理集群的多数资源,并且能够创建项目; 3)Custom:自定义权限。针对仅需项目管理的普通用户,在创建时,我们通常赋予自定义的只读权限;
Project Roles(当用户访问项目时)
1)Project Owner:针对项目的所有权,我们将该权限赋予相关的负责人; 2)Project Member:针对项目管理的用户,我们将赋予该权限;权限无法管理成员及目录(Catelogs); 3)Read Only:对于部分仅具有只读权限的用户,我们将赋予该权限; 4)Custom:针对需要定制权限的用户,我们将赋予该权限;
接入 Light LDAP 服务
参考 LLDAP 文档 https://github.com/lldap/lldap/blob/main/example_configs/rancher.md
用户默认权限
在 Rancher 中,用户默认授予 Standard User 权限,在 Users & Authentication / Role Templates / Global 中,查看。
我们需求:

创建默认组,该组设置默认权限,默认能够访问特定集群,
通过 LDAP 登陆的用户将属于该组。

# 05/25/2025 Rancher 2.10.3 LLDAP 0.6.1 LL[……]

READ MORE

「MySQL」- 部署 | Kubernetes | 服务 | 单实例 | 测试

MySQL 8 | on Kubernetes | with Manifest
kubectl apply -f ./mysql-single.yaml
MySQL 8 | on Kubernetes | with Helm Chart | by Bitnami
该笔记将记录:在 Kubernetes 中,如何部署单节点的 MySQL 服务,以及常见问题处理;
通过 HELM 部署
Run a Single-Instance Stateful Application | Kubernetes Helm Charts to deploy MySQL in Kubernetes charts/bitnami/mysql at master · bitnami/charts

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update bitnami

helm search repo bitnami/mysql –versions | grep -F 8.0

helm pull bitnami/mysql
helm show values ./mysql-9.2.0.tgz > mysql-9.2.0.helm-values.yaml

vim mysql-9.2.0.helm-values.yaml
… 修改存储类:global.storageClass
… 修改运行模式:默认 standalone 模式,无需修改;
… 修改帐号密码:auth.rootPassword

helm upgrade –install –namespace infra-database –create-namespace \
mysql ./mysql-9.2.0.tgz -f mysql-9.2.0.helm-values.yaml

// —————————————————————————- // 当部署成功后,输出如下信息:


Services:

echo Primary: mysql.infra-database.svc.cluster.local:3306

Execute the following to get the administrator credentials:

echo Username: root
MYSQL_ROOT_PASSWORD=$(kubectl get secret –namespace infra-database mysql -o jsonpat[……]

READ MORE

「MYSQL」- UPDATE Syntax

数据修改
update table_name set col_name = value where col_name = 11;
字符替换
mysql – Update a column value, replacing part of a string – Stack Overflow
UPDATE tab_name SET col_name = REPLACE(col_name, ‘domain1.example/images/’, ‘domain2.example/otherfolder/’)[……]

READ MORE

「MySQL」- binlog

Binlog,日志文件,其包含描述数据库变更的事件;
实际作用 1)数据库复制 2)数据恢复
MySQL 8.0
启用
WIP
删除
https://dev.mysql.com/doc/refman/8.4/en/purge-binary-logs.html PURGE BINARY LOGS BEFORE ‘2021-01-01 00:00:00’; PURGE BINARY LOGS TO ‘mysql-bin.12345’;
修改
WIP
查看
https://dev.mysql.com/doc/refman/8.4/en/show-binary-logs.html SHOW BINARY LOGS;
https://dev.mysql.com/doc/refman/8.4/en/show-binlog-events.html SHOW BINLOG EVENTS
相关工具
mysqlbinlog — Utility for Processing Binary Log Files https://dev.mysql.com/doc/refman/8.4/en/mysqlbinlog.html
相关参数
binlog_expire_logs_seconds | in Seconds | Default=2592000 |https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds
binlog_expire_logs_auto_purge | ON/OFF | https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_auto_purge
MySQL 5.7
MySQL 5.6 Reference Manual/Binary Log Options and Variables MySQL 5.7 Reference Manual/Replication and Binary Logging Options and Variables MySQL 5.6 Reference Manual/The Binary Log
启用 binlog 功能
修改数据库配置文件:

[mysqld]
server_id = 26
log_bin = /var/log/mysql/binlog

binlog_format = MIXED[……]

READ MORE

「SCHEMATA」

Schema 就是一个数据库,所以 SCHEMATA 表提供的就是数据库的信息。

INFORMATION_SCHEMA Name
SHOW Name
Remarks
说明

CATALOG_NAME
 
def
 

SCHEMA_NAME
Database
 
 

DEFAULT_CHARACTER_SET_NAME
 
 
 

DEFAULT_COLLATION_NAME
 
 
 

SQL_PATH
 
NULL
 

以下的两条 SQL 语句是等价的: SELECT SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA [WHERE SCHEMA_NAME LIKE ‘wild’]
SHOW DATABASES [LIKE ‘wild’]
参考文献
MySQL 5.7 Reference Manual / The INFORMATION_SCHEMA SCHEMATA Table[……]

READ MORE

「kubectl」- 常用操作

创建资源(增)
通过文件创建
从标准输入读取 YAML 定义:

kubectl apply -f <<EOF
kind: xxx

EOF

// 应用目录的多个 YAML 文件
// 通过 –recursive 进行递归应用
kubectl apply -f <directory>
kubectl apply -f <directory> –recursive

删除资源(删)
删除命名空间:kubectl delete namesapce
根据标签删除特定的资源:kubectl delete svc,deploy -l app=niceone
强行删除 PODS:kubectl delete pods pod-name –grace-period=0 –force
删除指定命名空间内的 PODS:kubectl delete pods –all –namespace test
!!!不要直接删除被监控的对象,例如由部署控制的 POD 等等。应该先关闭监控进程,或者用特定的操作删除被管理的资源。例如,可以将一个部署缩小到零个副本,然后就可以有效的删除它所监控的 POD 了!!!
!!!级联删除和直接删除!!!当删除一个自定义的资源定义时,其所有的依赖对象也会被删除。参考「Garbage Collection」手册;
删除 Pod 对象
使用 kubectl delete pods xxx 删除对应的 pod,提示删除成功,但是立马又回生成一个。为何? how to delete/remove calico cni from my kubernetes cluster Command to delete all pods in all kubernetes namespaces – Stack Overflow

kubectl delete pods “pod name”

# 强制删除命名空间内的全部 Pod 实例
kubectl delete –all pods –namespace=ingress-nginx –force –grace-period 0

资源管理
参考 06.Kubernetes API Objects 笔记,获取使用 kubectl 管理 Pod Service Ingress Deployment 等等资源的方法(详见子章节)
删除资源定义:

kubectl delete -f foo.yaml

修改资源(改)
脚本化 | kubectl patch
Get YAML for deployed Ku[……]

READ MORE

「PYTHON」- 虚拟环境 | virtualenv | 学习笔记

认识
官网:https://virtualenv.pypa.io/ 文档:https://virtualenv.pypa.io/en/latest/ 仓库:https://github.com/pypa/virtualenv
virtualenv is a tool to create isolated Python environments.
组成
WIP
构造
安装 virtualenv 模块:

pip3 install virtualenv

性质
在创建虚拟环境后,相关操作将发生在该环境中(这里“相关操作”是指与 Python 环境有关的操作,比如 pip install 将会将模块安装到该虚拟环境中,而不会影响系统环境),使得单个项目的运行环境与其它项目独立起来;
应用
如下步骤,搭建虚拟环境:

# ——————————————————— # 第二步、创建虚拟环境

virtualenv –python=python3 “venv-example” # 其将创建 ./venv-example 目录,并使用 python3 版本

# ——————————————————— # 第三步、激活虚拟环境

source venv-example/bin/activate # 执行该命令后,我们将进入虚拟环境

# ——————————————————— # 第四步、执行操作

# 与 Python 环境有关的所有操作将发生在该环境中
# 比如,模块安装将安装到 venv-example 下的对应目录中,并在使用时从中加载模块;

# ——————————————————— # 退出当前虚拟环境

deactivate

修改已有虚拟环境的 Python 版本
如果希望修改已有虚拟环境的 Python 版本,由很多方法:

通过 pip freeze 导出 requirements.txt 文件,然后 mkvirtualenv 重新创建;
通过 python -m venv –upgrade YOUR_VENV_DIRECTORY 进行升级;

Could not find platform independent libraries <prefix>
path – How can I tro[……]

READ MORE

「EXPLAIN | DESCRIBE」

内容:介绍MySQL中的EXPLAIN和DESCRIBE
事实上,DESCRIBE和EXPLAIN是同义词。但是,DESCRIBE通常用于表结构信息,而EXPLAIN用户获取“查询执行计划”(即MySQL如何执行查询)。 所以,本文内容分为两部分:一部分介绍”如何获取表结构信息”;另外一部分介绍”如何获取执行计划信息”;
EXPLAIN功能有限,并不会总说出真相。但可以很好的解释查询是如何执行的。
相关引用内容:

EXPLAIN语法:
https://dev.mysql.com/doc/refman/5.7/en/explain.html
EXPLAIN输出格式:
https://dev.mysql.com/doc/refman/5.7/en/explain-output.html

DESCRIBE和EXPLAIN语法
鉴于二者的角色不同,所以将其区分开解释,但是要记住他们两个是可以互相替换的。下面是语法格式:

— DESC

{DESCRIBE | DESC}
tbl_name [col_name | wild]

— EXPLAIN

{EXPLAIN}
[explain_type]
{explainable_stmt | FOR CONNECTION connection_id}

explain_type: {
EXTENDED
| PARTITIONS
| FORMAT = format_name
}

format_name: {
TRADITIONAL
| JSON
}

explainable_stmt: {
SELECT statement
| DELETE statement
| INSERT statement
| REPLACE statement
| UPDATE statement
}

DESCRIBE:如何获取表结构信息
DESCRIBE主要用于显示TABLE的信息,看如下Demo:

mysql> DESCRIBE City;
+————+———-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+———-+——+—–+———+—————-+
| Id | int(11) | NO | PRI | NULL[……]

READ MORE

「MySQL」- 性能相关

优化数据库服务
MySQL :: MySQL 8.0 Reference Manual :: 8.12 Optimizing the MySQL Server
# 与服务有关的性能优化
# 与编程有关的性能优化
Optimization Overview Optimizing SQL Statements Optimization and Indexes Optimizing Database Structure Optimizing for InnoDB Tables Optimizing for MyISAM Tables Optimizing for MEMORY Tables Understanding the Query Execution Plan Controlling the Query Optimizer Buffering and Caching Optimizing Locking Operations Valkey Measuring Performance (Benchmarking) Examining Thread Information
Index Merge Optimization Full Table Scans Opti-GROUP BY
Opti-ORDER BY https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html[……]

READ MORE

「LDAP」- 轻量级目录访问协议 | Lightweight Directory Access Protocol

认识
研究 LDAP 之前,我们需要理解某些基础概念,例如 Directory Service(or Name service)、……
轻量级目录访问协议(LDAP,Lightweight Directory Access Protocol)是在目录访问协议 X.500 的基础上研发的,用于通过网络管理访问这些分布的目录信息服务。
组成
—— 该部分将介绍:在使用 LDAP 之前,需要了解一些基本的概念。
LDAP 目录服务是由目录数据库和一套访问协议组成的系统
数据存储结构
LDAP,其采用树状结构存储数据(类似于 DNS 服务程序),用于在 IP 网络层面实现对分布式目录的访问和管理操作。

Object
很多服务都需要对数据进行操作,比如 Database 需要对其中存储的 Record 进行增删改查操作。
在 LADP 中,同样需要管理数据,数据被称为 Object(条目,亦可用 Entity 来称呼):

其为 LDAP 中最基本的元素;
其是添加、删除、更改、搜索操作的基本对象;

在 LDAP 目录中,每个 Object 至少有一个与之关联的 ObjectClass。
所示如图,Object 有 ou=admin、ou=people、ou=device、cn=admin、ou=marketing、……
Attribute and Value
每个 Object 包含多个 Attribute=Value 属性,其通常用于描述 Object 的具体信息。
注意,该信息并未展示在图示中,其图示中的 ou、cn、people、admin、wiki 并非 Attribute、Value;
在 LDAP 中,很多常用 Attribute 已预定义,比如:

dc,DomainComponent,域组件:例如 example.com 表示为 dc=example,dc=com;
ou,OrganizationUnit,组织名称;
cn,CommonName,通用名:通常是 Object 的名字,类似于“人名”,或称“对象名”;
sn,Surname,用户的姓氏。
uid,User ID,用户唯一标识(如用户名)。
mail,电子邮件地址。
o,OrganizationName,组织名,比 ou 更高层
……(有很多,需要的时候查询文档即可)

DN | Distinguished Name
LDAP DNs and RDNs
认识:其类似于数据库的主键,是 Object 的唯一标识;
组成:

其由多个 RDN 组成[……]

READ MORE

「MySQL」- 移动数据库目录

内容简介
在 MySQL 中,数据通常在/var/lib/mysql/目录中。由于某些原因,我们需要变更这个数据库目录的位置,我们该如何移动这个数据目录呢?
本文将围绕该问题展开讨论,如何修改 MySQL 的数据目录,以及要注意的一些问题。
操作流程
!!!在操作之前,需要先做好数据的备份。
移动数据目录与普通的文件移动是类似的,流程上也没有太大的差异:

# 停止 MySQL 服务;
# 移动数据目录;
# 检查权限设定是否正确;
# 修改配置文件;
# 启动服务并检查启动日志;

比较简单,并不复杂,所以这里不再深入的介绍。
注意事项
1)要注意做好数据的备份工作,这是重中之重。 2)可以使用 Rsync 进行同步。目的是保持文件的属性、类型,即保持前后一致。
# 引发的思考
我们为什么要把 MySQL 的数据目录换到别的地方???
一种常见的做法是,在根目录创建一个/data目录,然后将扩展分区挂载到这个目录,再将 MySQL 配置文件中的datadir设置为该目录,启动服务。
那为什么不在迁移数据后,直接将分区挂载到原有的目录上?我们更倾向于这种做法。
参考文献
How can I move a MySQL database to another drive?[……]

READ MORE

「MySQL」- 开源的关系型数据库管理系统

认识
官网:https://www.mysql.com 文档:https://dev.mysql.com/doc 仓库:https://github.com/mysql
MySQL 是一种关系型数据库管理系统,由瑞典 MySQL AB 公司开发,后被 Oracle 公司收购。MySQL 是基于 C 和 C++语言编写并使用了 SQL 语言进行数据处理的软件。简而言之,MySQL 是种广泛应用的关系型数据库管理系统。
应用
MySQL 被广泛应用于各种场合,包括但不限于: 1)网站系统如 WordPress、Drupal 等都使用 MySQL 作为数据库。 2)数据仓库用于存储大量数据并进行分析。 3)电子商务用于处理订单、库存和客户信息等。 4)数据集成用于整合来自不同数据源的数据。
参考
从认识、组成、性质、应用、改进方面来介绍 MySQL 数据库 —— ChatGPT 4.0 MySQL 5.7 Reference Manual 《高性能MySQL》
《MySQL Stored Procedure Programming》:MySQL 存储过程编程 《MySQL DBA 修炼之道》 机械工业出版社 《High Performance MySQL》:高性能 MySQL 宁海元(翻译) 电子工业出版社 《深入浅出 MySQL》 唐汉明,翟振兴,关宝军,王洪权,黄潇人民邮电出版社出版 《MySQL 运维内参》 周彦伟电子工业出版社 《MySQL 技术内幕》 Paul DuBois 人民邮电出版社 《MySQL 技术精粹》 张工厂清华大学出版社 《MySQL 管理之道:性能调优、高可用与监控(第 2 版)》 贺春旸 《MySQL 排错指南》 O’REILLY
《MySQL5.7 从入门到精通》| 刘增杰清华大学出版社 | 面向新人的书;

简介:http://blog.csdn.net/brucexia/article/details/53738596
源码及相关资料的下载地址:http://pan.baidu.com/s/1bFF1c6

《MySQL 必知必会》| 新手入门必备;

注意:此书写作时,MySQL 最新的稳定版本为 5.1。所以是一本比较旧的书了;
Homepage:http://www.forta.com/books/0672327120
相关资料:http://www.forta.com/books/0672327120/#footer

书籍和社区

http://www.mysqlpub.com
http://bbs.csdn.net/forums/MySQL
http://bbs.51[……]

READ MORE

「MySQL」- 数据类型

在 MySQL 中,支持众多的数据类型,主要分为以下几类: 1)数值类型(Numeric) 2)日期、时间类型(Date and Time) 3)字符串类型(String) 4)空间数据类型(Spatial Data Types)
本文描述数据类型时用到了以下约定:

M – 表示整数类型的最大显示宽度。对于浮点(floating-point)和定点(fixed-point)类型,M 代表可以存储的总位数(精度(precision))。对于字符串类型,M 是最大长度。因此,M 允许的最大值取决于数据类型;
D – 用于浮点和定点类型,代表小数点后面的数字位数(刻度(scale))。可能的最大值为 30,但不应大于 M-2;
fsp – 适用于 TIME,DATETIME 和 TIMESTAMP 类型,表示小数秒精度;也就是秒数后的小数点后的数字位数。fsp 值(如果给定)必须在 0 到 6 之间。值为 0 表示没有小数部分。如果省略,默认精度为 0。(与标准 SQL 默认值 6 不同,与以前的 MySQL 版本兼容);
方括号([和])表示类型定义中的可选部分;

数值类型(Numeric Types)
概述
如上所述,M 表示整数类型的最大显示宽度。最大显示宽度为 255。显示宽度与类型的范围无关。对于浮点和定点类型,M 是可以存储的总数(即精读);
如果为数字列指定 ZEROFILL,MySQL 会自动将 UNSIGNED 属性添加到该列;
数值类型允许 UNSIGNED 和 SIGNED,这些数据类型是默认 SIGNED 的;
SERIAL 是 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的别名。在整型列的定义中,SERIAL DEFAULT VALUE 是 NOT NULL AUTO_INCREMENT UNIQUE 的别名;
当整数类型做减法的时候,如果其中一个类型为 UNSIGNED,那么除非启用了 NO_UNSIGNED_SUBTRACTION SQL 模式,否则结果是无符号的;
整数类型

类型
别名
存储长度
有符号长度
无符号长度
描述

BIT(M)
 
M
 
 
一个位值类型。M 表示每个值的位数

TINYINT
 
1 字节
-128 ~ 127
0 ~ 255
数值范围较小时使用,,[……]

READ MORE

「CloudFront」- 内容分发网络 | CDN | Amazon CloudFront | AWS Cloudfront

认识
官网:https://aws.amazon.com/cloudfront/ 文档:https://docs.aws.amazon.com/cloudfront/#lang/en_us # Developer Guide 面向用户 仓库:
Securely deliver content with low latency and high transfer speeds
组成
—— 该部分将记录 CloudFront 的架构及内部原理,但鉴于我们是用户,且 CloudFront 为黑盒工具,所以我们暂时不去探究 CloudFront 组成及原理。
构造
性质
https://aws.amazon.com/cloudfront/features/
应用
CloudFront 回源 S3
Get started with a basic CloudFront distribution | 该文档演示配置 CloudFront 回源 S3 的方法 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GettingStarted.SimpleDistribution.html#GettingStartedCreateDistribution

需要留意回源 S3 的 Policy 配置,按照文档操作即可。如果错误配置(未指定策略),则选择 CloudFront 实例,Origins,选中 Origins 配置,Edit,Origin access,并进行后续配置。

清理缓存 | 失效缓存
How to make CloudFront never cache index.html on S3 bucket
通过 Invalidations 功能,来清理缓存。
通过 Behaviors 功能,能够禁用特定目录或文件的缓存。[……]

READ MORE

「Switch Profile」

根据配置的规则,在满足条件时,自动应用不同的配置文件。

Switch rules中设置不同的规则,当请求匹配到规则后,执行设置的配置文件。如:Condition Type(Host wildcard)Condition Details(www.google.com.hk)Profile(Direct)表示:当前请求www.google.com.hk时,直接访问,不使用代理。
Rule list rules表示对Rule List Config中的规则执行的操作,图中的设置为mProxyProfile,表示当请求主机匹配Rule List Config中的主机是,执行mProxyProfile配置。
Defalut中的Direct表示默认情况下直接请求,不通过代理。
Rule List Config部分用于从线上读取配置文件,Rule List Format表示配置文件的格式,Rule List URL指获取配置文件的URL。这里配置文件的格式为AutoProxy,配置文件的URL为GFWList。
Rule List Text中显示的内容为点击Download Profile Now按钮后从Rule List URL中获取的内容。[……]

READ MORE

「DBMS/MYSQL」- 部署 | 升级

on Ubuntu 21.04 TLS (MySQL Latest)

# 安装数据库服务
apt-get install mysql-server

# 进行初始化设置
mysql_secure_installation

# 测试连接
mysql -u root -p

on Ubuntu 20.04 LTS (MySQL 5.7)
How To Install MySQL 5.7 on Ubuntu 20.04 | ComputingForGeeks

wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
dpkg -i mysql-apt-config_0.8.12-1_all.deb


# 在配置过程中,选择 Ubuntu Bionic 版本,选择 MySQL 5.7 版本;

apt-get install mysql-server=5.7.37-1ubuntu18.04 \
mysql-community-server=5.7.37-1ubuntu18.04 \
mysql-client=5.7.37-1ubuntu18.04 \
libmysqlclient-dev=5.7.37-1ubuntu18.04

MySQL 5.7 on CentOS 7.x
How to install MySQL 5.6 on CentOS 7 How to Install MySQL on CentOS 7 How to Install MySQL 5.7 on Linux CentOS and Ubuntu
该笔记将记录:在 CentOS 中,安装 MySQL 数据库的方法,以及常见问题的解决方案;
注意事项
1)建议参考官方文档以获取更多安装细节; 2)该安装过程不适用于 MariaDB 数据库;
第一步、添加官方仓库

// 添加官方仓库

# yum install -y https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
Loaded plugins: fastestmirror
mysql57-community-release-el7-9.noarch.rpm | 9.0 kB 00[……]

READ MORE

「PDF」- 书签 与 大纲(Bookmark and Outline)

书签 与 大纲(Bookmark and Outline)
PDF – Wikipedia Understanding the Difference between Bookmarks and the Outline in a PDF | Inside PSPDFKit
我们在 Okular 中添加书签(Bookmark),但是无法在 Foxit Reader 2.4.4、Evince 3.30.2 中显示。
我们最开始以为书签是软件自己维护的,但是随后我们发现 PDF 文件确实发生修改,因此可以排除。然后我们便查找 PDF 规范及相关博客文章对这个问题的说明。
该笔记将对该问题进行解释,并附加补充说明内容。注意,根据上下文,我们可能会使用 Bookmark 代指“书签”,使用 Outline 代指“大纲”。
问题原因
在 PDF 规范中,已经合并 Bookmark 和 Outline 并统称为 Outline,如 PDF 规范所述:

The outline consists of a tree-structured hierarchy of outline items (sometimes called bookmarks), which serve as a visual table of contents to display the document’s structure to the user.

而 Bookmark 没有明确的规范,导致 PDF 都有自己的实现,所以软件的行为不同(正如我们遇到的问题)。
Bookmark and Outline
什么是书签(Bookmark)? 类比为现实世界中的书签,做标记,然后让我们可以快速找到书中某些页面。
什么是大纲(Outline)? 而大纲是类似书中的摘要,通常位于章节的最开始,可以然我们快速了解到书(PDF)中的内容。这种“摘要”可能是小段文本描述,也可能是个内容列表(Table of Contents)
为什么大纲与目录会被合并?
首先,要明确两个问题: 1)PDF 是种文档格式,没有“目录”的概念,我们看到的目录,是人为添加的标记(书签、大纲) 2)大纲不一定是一段文本描述,可以是章节内容概述列表(正如这篇文章右上角的“ToC”块)
现在回到我们的问题中。在阅读 PDF 文档的过程中,我们会看到自己感兴趣的内容,然后添加 Bookmark 以供之后详细阅读。那么问题是,我们做的这个标记是否应该出现在 Outline 中?有人觉得这是 Bookmark 不应该出现在 Outline 中,但是有人觉得被标记内容是文档内容的组成部分,应该作为 Outline、作为一种概要出现。[……]

READ MORE

「MySQL and MariaDB」- 常见错误汇总

#1 (JSON)
Use JSON data type in MariaDB got error #13622
问题描述: ‘You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \’json not null, `expired` datetime not null) default character set utf8 collate u\’ at line 1′,
问题原因: 在MariaDB 10.1.x以下(包括)的版本中,不支持JSON类型:

I am experiencing this problem as well. Saw that $table->json(‘tags’)->nullable(); always evaluates to ‘json’ in \Illuminate\Database\Schema\Grammars\MySqlGrammar (line 485).
But the json column data type is not supported in MariaDB 10.1.x and lower. It will be available in version 10.2 (which is already in Alpha).

I wrote all my tests with a SQLite database, where the SQLite grammar evaluates to ‘text’, Because all my tests passed i changed my ‘json’ columns to ‘text’.

Another way would be to somehow make use of the dynamic columns in MariaDB. and select json data with COLUMN_JSON. Use ‘blob’ as datatype for your column in that case.

解决办法: 在我的场景中,由于是使用第三方开源系统,所以修改程序是不太可能了,只能升级数据库。
#2 (Couldn’t execute)
-「SOLVED: Mysqldump issues after upgrade to 5.7」
问题描述: D:\phpStud[……]

READ MORE

「InnoDB Storage Engine」

https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html
InnoDB Locking
MySQL 5.6 Reference Manual/14.7.1 InnoDB Locking
WIP ! INNODB LOCKING
查看 InnoDB 状态
MySQL 5.6 Reference Manual/The InnoDB Storage Engine/InnoDB Monitors MySQL 5.6 Reference Manual/…/SHOW ENGINE Syntax
WIP ! SHOW ENGINE STATUS[……]

READ MORE

「OpenSSH」

从发行版的源中安装

#!/bin/bash

# Server 端,提供 sshd 等命令。
apt-get install openssh-server

# Client 端,提供 ssh 等连接 sshd 命令。
apt-get install openssh-client

使用源码安装
参考 BLFS/OpenSSH-7.3p1: http://www.linuxfromscratch.org/blfs/view/7.10/postlfs/openssh.html
安装的可执行程序
scp,是一个文件复制程序,其作用类似于 rcp,但 scp 使用加密协议。 sftp,是一个类似 FTP 的程序,适用于 SSH1 和 SSH2 协议。 slogin,是 ssh 的符号链接。 ssh,是一个类似于 rlogin/rsh 的客户端程序,除了它使用加密协议。 sshd,是一个监听 SSH 登录请求的守护进程。 ssh-add,是一个向 ssh-agent 添加密钥的工具。 ssh-agent,是一个可以存储私钥的身份验证代理。 ssh-copy-id,是一个脚本,使用本地密钥来启用远程计算机上的登录。 ssh-keygen,用于创建密钥的工具。

修改密钥注释:ssh-keygen -c -C “my new comment” -f ~/.ssh/my_ssh_key
ssh-keyscan,是一个用于从多个主机收集公共主机密钥的实用程序。

参考文献

BLFS / OpenSSH-7.3p1: http://www.linuxfromscratch.org/blfs/view/7.10/postlfs/openssh.html[……]

READ MORE

「MySQL」- 查询 INFORMATION_SCHEMA.TABLES 巨慢

问题描述
在 MySQL 5.6 中你个,执行如下 SQL 语句,需要 6min 左右:

SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=’foo’;

同量级的表秒出查询结果,约在 (0.05 sec) 左右。
问题原因
在数据库中,有几个表使用 FEDERATED 引擎,而远程的数据库无法连接,导致
解决办法
相关链接
Select from information_schema tables very slow
Solving INFORMATION_SCHEMA slowness MySQL 5.6 Reference Manual/EXPLAIN Statement MySQL 5.6 Reference Manual/Configuring Non-Persistent Optimizer Statistics Parameters MySQL 5.6 Reference Manual/Configuring Persistent Optimizer Statistics Parameters MySQL 5.6 Reference Manual/InnoDB Startup Options and System Variables/innodb_stats_on_metadata MySQL 5.6 Reference Manual/InnoDB Startup Options and System Variables/innodb_stats_persistent[……]

READ MORE

「JENKINS-PIPELINE」- Pipeline Utility Steps | pipeline-utility-steps

认识
官网:https://plugins.jenkins.io/pipeline-utility-steps 文档:https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps 仓库:https://github.com/jenkinsci/pipeline-utility-steps-plugin
简而言之,其为 Jenkins 插件,提供系列 Pipeline 扩展步骤。比如,处理 YAML、JSON、文件
组成
WIP
构建
根据官方文档:

或,通过 Jenkins GUI 安装;
或,通过 jenkins-plugin-cli 安装;
或,直接下载并上传来安装;

性质
https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/
readJSON
readProperties

readYaml

steps {
script{ datas = readYaml (file: ‘manifest.yml’) }
echo datas.ear_file.deploy.toString()
}[……]

READ MORE

「GITLAB」- 部署安装

选择版本
历史版本:GitLab releases 安装版本:https://<your.domain.name>/help
目前(2019/07/10)官方强烈建议下载并安装 GitLab 企业版,即使不确定将来是否会购买 GitLab 企业版许可证。因为,即使不购买许可证,试用期过后会自动退回到社区版,并且可以使用社区版的所有功能,同时还会带来两个好处:

可以使用企业版的功能。即使不满意,试用期后会自动退回社区版;
如果试用期后退回到社区版,想要在升级到企业版会非常方便。但是如果直接安装社区版,想要再升级到企业版,可能需要停机,还会麻烦些;

要想用企业版就要购买许可证,否则就只能用 MIT 许可证下的功能。如果你没有购买专有许可能,试用期过后,与社区版就没有什么区别;
部署方式
镜像仓库 https://hub.docker.com/r/gitlab/gitlab-ce
with Docker
GitLab CE 8.16.5 064dab1
Community Edition or Enterprise Edition How to check the version of GitLab?
# 06/13/2022 我们是从 GitLab Community Edition 8.16.5 064dab1 开始使用的。相关的部署过程已经时效,所以我们删除就版本的部署文档;
with Helm Chart | on Kubernetes | 废弃
https://docs.gitlab.com/charts/

helm repo add gitlab https://charts.gitlab.io/
helm repo update gitlab

helm pull gitlab/gitlab
helm show values ./gitlab-9.0.0.tgz > gitlab-9.0.0.tgz.helm-values.yaml
vim gitlab-9.0.0.tgz.helm-values.yaml
… global.edition: ce
… global.hosts.domain:
… global.ingress:
… global.minio.enabled: false
… global.appConfig.lfs.enabled: false
… global.appConfig.artifacts: false
… global.appConfig.uploads: false
… global.appConfig.packages: false
..[……]

READ MORE

「Redis」- 数据库

数据库(Database)
Redis 支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念; 「Redis 多个数据库」
相关文章
What’s the Point of Multiple Redis Databases?
参考文献
Redis 多个数据库[……]

READ MORE

「MySQL」- 插件

CREATE temporary PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;

参考文献
MySQL Documentation / Chapter 28 Extending MySQL[……]

READ MORE

「Apache Grooy」- 发送 HTTP 请求

该笔记将记录:在 Groovy 中,如何发送 HTTP 请求,以及相关问题处理。
URL Processing
Build a URI or URL | Level Up Lunch

def uri = new URIBuilder( ‘http://www.leveluplunch.com:80/examples/’ )

assert “www.leveluplunch.com” == uri.host
assert “/examples/” == uri.path
assert “http” == uri.scheme
assert 80 == uri.port
assert “oath”

def uri = new URIBuilder( ‘http://www.leveluplunch.com/#fragment’ )
assert “fragment” == uri.fragment

for Groovy 2.4.21
rest – Groovy:unable to resolve class groovyx.net.http.RESTClient – Stack Overflow
HTTP Client Framework For Groovy / https://mvnrepository.com/artifact/org.codehaus.groovy.modules.http-builder/http-builder https://javadoc.io/doc/org.codehaus.groovy.modules.http-builder/http-builder/latest/index.html

@Grab(group=’org.codehaus.groovy.modules.http-builder’, module=’http-builder’, version=’0.7′ )
import groovyx.net.http.*

def uri = new URIBuilder( ‘https://www.leveluplunch.com/’ )
uri.setUserInfo(“root:c29d4c469”)
uri.setPath(“a/b/c”)

groovyx.net.http.UriBuilder https://http-builder-ng.github.io/http-builder-ng/docs/javadoc/groovyx/net/http/UriBuilder.html
通过 Groovy 形式
HTTP GET

def html = “http://google.com”.toUR[……]

READ MORE

「UBUNTU-DESKTOP」- Ubuntu Desktop

认识
WIP
构建
Ubuntu Desktop 20.04 with MBR
Setup Ubuntu Server 19.10 with MBR
安装过程不值一提,唯一的问题是:系统使用 GPT 分区表以及 UEFI 启动。但是我们的硬件不支持,所以我们需要使用 MBR 分区表;
解决办法:在系统安装时,不要让安装器自动分区,需要手动分区,然后挂载根分区(/),然后再进行安装;
on ThinkPad P15v Gen1
[Sol.] 启动系统失败,进入 grub> 命令行界面(12/10/2023)
[SOLVED] I get grub shell on startup after installing Ubuntu 22 alongside Ubuntu 20 grub2 – Getting grub menu to work on dual boot Ubuntu 22.04 Windows 11. Currently boots in a loop – Ask Ubuntu Ubuntu-20-Reset-System-Boot-Loop-on-P15-G1 – English Community – LENOVO COMMUNITY Boot-Repair – Community Help Wiki
问题描述: 安装 Ubuntu 22.04 版本成功,但是系统重启后,直接进入 grub> 命令行界面(能够手动引导进入); 部分时候,当开机后会直接显示 Reset System 并重启;
原因分析: 很多人遇到该问题,其原因有很多,无法直接套用;
解决方案: 1)通过 Boot-Repair 软件,未能解决问题; 2)我们的原因在于 GPT 分区,修改为 MBR 分区表即可解决;
[WIP.] screen is flickering in Ubuntu 22.04 LTS
今天(11/03/2023),笔记本忘记接入电源而发生关机,然后开机,(开机后处于待机状态,我们暂未使用电脑);
次日(11/04/2023),我们需要使用笔记本,唤醒后,屏幕右上角花屏(有横线);

我们尝试重启,经过一番重启,花屏问题得以解决;

但是,现在屏幕开始闪烁(flicker,闪烁区域集中在右上角区域,高速频闪),关闭 Night Light 模式,问题得以解决。我们怀疑是之前升级时,已经出现问题,但是我们没有重启,所以问题没有暴露出来;

但是,我们需要 Night Light 模式来护眼(确实有效)。参考
Bug #1970426 “[i915] screen[……]

READ MORE

「RANCHER」- 服务部署

该笔记将记录:在 Linux 中,使用 Docker 部署 Rancher 的方法,以及相关问题的解决方案。
服务升级
2.6.12: Docker to Kubernetes
我们通过 Single Node Using Docker 的方式部署 Rancher 服务,现在需要迁移到 Kubernetes Cluster 中。
2.7.2 -> 2.8.2
2.7.2 -> 2.7.6 -> 2.8.1 -> 2.8.2
# 02/26/2024 操作 2.7.2 -> 2.7.6 成功。 # 02/26/2024 操作 2.7.6 -> 2.8.1 成功。 # 02/26/2024 操作 2.8.1 -> 2.8.2 成功。
2.8.2 -> 2.8.3
# 04/30/2024 操作 2.8.2 -> 2.8.3 成功。[……]

READ MORE