Relative Content

K4NZDROID

category

「MySQL」- 添加从库(基于位置的复制)

问题描述
我们现在:(1)已有正在运行的单台数据库实例,(2)需要添加从库,形成主从复制,(3)并且我们不希望出现数据库停机;
环境概述

属性
参数

操作系统:
Debian GNU/Linux 10 (buster)

软件版本:
Master – MySQL 5.7;Slave – MySQL 5.7;

操作步骤
第一步、在主库中,启用 binlog 功能
第二步、导出主库数据,并导入从库
第三步、在从库中,调整配置以启用复制
注意事项
最小配置:在本笔记中涉及的配置文件是 MySQL 最小化配置,旨在表述意图,请根据需要自行调整;
细节精简:见对于非关键步骤(比如配置文件位置、编辑方式等等),我们只进行简述,旨在缩短篇幅并清晰结构;
重点内容:添加从库必须保证数据一致性,这是需要重点关注的部分;
技能要求:在笔记中,涉及 XtraBackup 使用,需要读者具备这些技能;
参考文献
How To Set Up Master Slave Replication in MySQL[……]

READ MORE

「tccli」- tencentcloud-cli | TENCENT-CLOUD

认识
官网: 文档:https://cloud.tencent.com/document/product/440/6176 仓库:https://github.com/TencentCloud/tencentcloud-cli
构建
安装

# for Ubuntu 24.04 LTS
pip install tccli

性质
在常见应用场景中,我们多根据 Tencent Cloud API 工具的指引来使用该命令。
命令行操作:

tccli configure set secretId AKIDwLw1234MMfPRle2g9nR2OTI787aBCDP
tccli configure set secretKey OxXj7khcV1234dQSSYNABcdCc1LiArFd
tccli configure set region ap-guangzhou output json language zh-CN
tccli configure list

多账户支持
tccli configure –profile test-account
应用[……]

READ MORE

「TMV」- 配置 | Configuratin

持久化配置
PERSIST and PERSIST_ONLY
MySQL :: MySQL 8.4 Reference Manual :: 15.7.6.1 SET Syntax for Variable Assignment
persist a global system variable to the mysqld-auto.cnf option file in the data directory

SET PERSIST max_connections = 1000;
SET @@PERSIST.max_connections = 1000;

SET PERSIST_ONLY back_log = 100;
SET @@PERSIST_ONLY.back_log = 100;

PERSIST_ONLY writes the variable setting to mysqld-auto.cnf. However, unlike PERSIST, PERSIST_ONLY does not modify the global variable runtime value.
PERSIST_ONLY suitable for configuring read-only system variables that can be set only at server startup.[……]

READ MORE

「FreeRADIUS」- radiusd.conf | 核心配置文件 | 学习笔记

组成
—— 该部分将介绍配置文件的文件格式,以及相关语法。
The format of the configuration files is line-based text. Each configuration setting must be on a separate line.
配置语言 | Unlang Policy Language | https://www.freeradius.org/documentation/freeradius-server/3.2.8/unlang/index.html
The file format is built around three basic elements:

variable assignment,
variable and module references,
and sections.

Comment
Comments are allowed and are easily identified with the use of the # (hash) character: any text following a # character is considered to be a comment and is thus ignored by the parser.
Whitespace
Spaces, tabs, and blank lines do not have any meaning and are also ignored by the parser.
Line Break
Unintentional line breaks can be canceled by placing a back-slash (\) as the last character on the broken line.
Variable Assignment

FreeRADIUS usually has predefined variable names with predefined meanings.
Variables are assigned values. The values can be integers, strings, file names, etc.
As with most systems, single and double-quoted strings can be used. Spaces and other characters can also be used in strings.
The double quotes mean t[……]

READ MORE

「MySQL」- 检查复制的一致性

使用 pt-table-checksum + pt-table-sync 检查并修复主从同步一致性问题。
第一步、使用 pt-table-checksum 检查
需要使用 –recursion-method 选项指定从库的连接方式,细节请参考官方文档。
检查所有数据库及表:

#!/bin/sh

pt-table-checksum –recursion-method “xxx” –ask-pass ‘h=127.0.0.1,P=3306,u=root’

检查特定数据库及表:

#!/bin/sh

pt-table-checksum –recursion-method “xxx” –ask-pass –databases ‘dbname’ –tables=’t1,t2′ ‘h=127.0.0.1,P=3306,u=root’

第二步、使用 pt-table-sync 处理
同步特定数据库及表:

#!/bin/sh

pt-table-sync –execute –sync-to-master –ask-pass –databases ‘dbname’ –tables ‘t1’ ‘h=10.10.50.237,P=3306,u=root’

注意事项:建议使用 –dry-run 与 –print 选项查看将要执行的修改。
相关链接
Percona Toolkit/pt-table-checksum Percona Toolkit/pt-table-sync[……]

READ MORE

「ENGLISH」- 单词 | Vocabulary

认识
WIP
组成
字母:
音标:
音节:
构造
WIP
性质
词性
准确理解和掌握单词的词性对于正确使用英语、构建准确的句子结构非常重要。例如,“I’am happy.” 中,“happy”是形容词,用来描述“我”的状态;而在“He runs quickly.” 中,“quickly”是副词,修饰动词“runs”。
名词(Noun):表示人、事物、地点、抽象概念等。例如:book(书)、city(城市)、love(爱)。 代词(Pronoun):用来代替名词。比如:he(他)、she(她)、it(它)。 动词(Verb):表示动作或状态。比如:run(跑)、sleep(睡觉)、be(是)。 形容词(Adjective):用来描述或修饰名词。例如:beautiful(美丽的)、big(大的)、happy(快乐的)。 副词(Adverb):用于修饰动词、形容词、其他副词或整个句子。像:quickly(迅速地)、very(非常)、fortunately(幸运地)。 数词(Numeral):表示数量或顺序。例如:one(一)、first(第一)。 介词(Preposition):用于表示名词、代词等与其他词的关系。像:in(在……里面)、on(在……上面)、at(在……)。 连词(Conjunction):用来连接词、短语、句子等。例如:and(和)、but(但是)、or(或者)。 感叹词(Interjection):表达情感或感叹。比如:oh(哦)、ah(啊) 。
含义
每个英语单词都具有属于各自的含义。
Capitalization in Titles
Title Capitalization Rules | Grammarly
According to most style guides, nouns, pronouns, verbs, adjectives, and adverbs are the only words capitalized in titles of books, articles, and songs.
Prepositions, articles, and conjunctions aren’t capitalized (unless they’re the first or last word).
应用
https://www.vocabulary.com/
‘Intra-‘ and ‘Inter-‘
Inter- vs. Intra-: What is the Difference? | Merriam-Webster
Although they look simil[……]

READ MORE

「MySQL」- 复制数据库

注意,该处“复制”并非主动同步,而是指“在不依赖 Binlog 的情况下,从现有数据库实例中创建具有相同数据集的数据库实例”。
mysqldump + mysql
Cloning a MySQL database on the same MySql instance halt – Continue SQL query even on errors in MySQL workbench – Stack Overflow mysql – Any option for mysqldump to ignore databases for backup?
官方推荐做法,而实质还是数据的导出与导入:

# 将 src-db 复制到 dst-db 中
mysqldump -u “<user name>” –password=”<pwd>” “<src-db>” | mysql -u “<user name>” -p “<dst-db>”

# 如果 dst-db 不存在
mysqldump -u “<user name>” –password=”<pwd>” –databases “<src-db>” | mysql -u “<user name>” -p

# 仅复制表结构
# https://stackoverflow.com/questions/6175473/export-schema-without-data

mysqldump -u “<user name>” –password=”<pwd>” –no-data “<src-db>” | mysql -u “<user name>” -p “<dst-db>”

# 忽略某些数据库

candidates=$(echo “show databases” | mysql | grep -Ev “^(Database|mysql|performance_schema|information_schema)$”)
for candidate in $candidates[*]; do
mysqldump $candidate
done

mysql -f # –force Continue even if we get an sql error.
# 直接导入数据 database – How to import an SQL file using the command line in MySQL? – Stack Overflow mysql -u username -[……]

READ MORE

「Grape」- Apache Groovy 依赖管理工具

认识
官网:https://groovy-lang.org/ 文档:https://groovy-lang.org/grape.html 仓库:None
Grape,是 Groovy 的内置依赖管理工具,可以让我们快速添加 Maven 依赖,简化脚本的编写。该笔记将记录:在 Groovy 中,如何使用 Grape 管理依赖,以及常见问题处理。
组成
—— 该部分将介绍 Grape 工具的组成,例如,架构、组成、工作原理。但鉴于我们以使用为主,暂时不探究 Grap 的组成及架构。
构建
—— 该部分将介绍如何构建 Grape 依赖工具,以便于我们在后续的 Groovy 编程中使用 Grape 来加载依赖。
根据文档 … Grape is a JAR dependency manager embedded into Groovy … 描述,我们不需要单独安装 Grape 工具,我们可以直接使用其来管理依赖。
性质
使用其他仓库

@GrabResolver(name=’custom’, root=’http://customserver/repo’, m2Compatible=’true’)
@Grab(‘com.mrhaki:groovy-samples:1.0′)
import com.mrhaki.groovy.Sample

def s = new Sample()
s.justToShowGrabResolver() // Just a sample

如下示例,在 Groovy 中,使用阿里云镜像仓库:

@Grapes([
@GrabResolver(name=’aliyun’, root=’https://maven.aliyun.com/repository/central’, m2Compatible=’true’),
@Grab(group=’org.xerial’,module=’sqlite-jdbc’,version=’3.7.2′),
@GrabConfig(systemClassLoader=true)
])

调试下载过程 | 调试信息
在安装扩展的过程中,我们希望显示扩展的下载信息,以了解下载进度,判断下载是否阻塞。此时,可以增加调试级别:

groovy -Divy.message.logger.level=4 -Dgroovy.grape.report.downloads=true example.groovy

// 或者,使用环境变量

export JAVA_OPTS=”$JAVA_OPTS -Divy.message.logger.level=4 -Dgroo[……]

READ MORE

「XXL-JOB」- 分布式任务调度平台 | A distributed task scheduling framework.

认识
社区:https://www.xuxueli.com/xxl-job/ 文档:https://www.xuxueli.com/xxl-job/ 仓库:https://github.com/xuxueli/xxl-job
A distributed task scheduling framework.(分布式任务调度平台 XXL-JOB),XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速)学习简单)轻量级)易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
组成
针对“调度”和“任务”两部分,可以相互解耦,以提高系统整体稳定性和扩展性:

将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的 JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的 JobHandler 中业务逻辑。

在实际的部署应用中,其大致过程为:(1)首先,部署调度中心服务,(2)然后,在代码中引入执行器类库,编码实现具体的任务功能。(3)启动执行器,执行器将自己注册到调度中心,调度中心将根据执行器的配置来定时调度任务。
调度模块(调度中心,xxl-job-admin)
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE 开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器 Failover。
执行模块(执行器,xxl-job-core)
负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
接收“调度中心”的执行请求、终止请求和日志请求等。
执行器 Sample 示例
其是官方提供的执行器实例,用于提供参考。
构造
WIP
性质
参考 分布式任务调度平台 XXL-JOB/1.3 特性 页面,以了解更多特性。

简单:支持通过 Web 页面对任务进行 CRUD 操作,操作简单,一分钟上手;
动态:支持动态修改任务状态)启动 / 停止任务,以及终止运行中任务,即时生效;
调度中心 HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心 HA;
执行器 HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行 HA;
注册中心: 执行器会周期性自动注册任务,调度中心将会自动发现注册的任务[……]

READ MORE

「Kubernetes Objects」- ConfigMap | 学习笔记

认识
如果在镜像中包含环境配置信息,那么该镜像的可移植性是非常差的。例如,如果在镜像中包含了测试环境数据库的配置信息,那该镜像只能用于测试环境,不能部署到生产环境。
通过 ConfigMap 对象,将配置从镜像中解耦,以实现镜像的可移植性。
该笔记将记录:我们学习 ConfigMap 使用的笔记(参照官方文档),并提供系列示例,演示如何创建 ConfigMap 以及如何在 Pod 中使用 ConfigMap 中的数据。
创建 ConfigMap 对象
有两种方法创建 ConfigMap 对象:

使用命令行:kubectl create configmap
使用生成器:使用 kustomization.yaml 中的 ConfigMap 生成器;(从 1.14 开始)

方法一、使用命令行
使用 kubectl create configmap 命令从目录、文件、字面量创建 ConfigMap 对象:

kubectl create configmap <map-name> <data-source>

其中,参数 <map-name> 是 ConfigMap 的名字,参数 <data-source> 是用于从中提取数据目录、文件、字面量。
参数<data-source>对应了 ConfigMap 中的键值对:

key – 在命令行提供的「文件名」或者「key」;
value – 在命令行提供的「文件内容」或者「字面值」;

可以使用kubectl describe或者kubectl get来获取 ConfigMap 中的信息。
从目录中创建 ConfigMap 对象

#!/bin/sh

# Create the local directory
mkdir -p configure-pod-container/configmap/

# Download the sample files into `configure-pod-container/configmap/` directory
wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-container/configmap/game.properties
wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.propert[……]

READ MORE

「Redis」- 集群搭建

环境依赖

yum install -y ruby rubygems

# redis requires Ruby version >= 2.3.0.
gem install redis

附加说明
在REDIS集群中,在写入数据时,集群会根据槽进行对客户端重定向。因此使用HAPROXY意义不大,会有很多客户端绕过HAPROXY直连REDIS集群的情况。而且目前的客户端类库中可以保存集群状态,也就是说客户端在“初时化”之后,不会连接HAPROXy服务,会直连REDIS集群节点。
参考文献
redis-trib.rb命令详解 How to Install and Configure a Redis Cluster on Ubuntu 16.04[……]

READ MORE

「JENKINS-PIPELINE」- Steps

Pipeline Steps Reference | https://www.jenkins.io/doc/pipeline/steps/
Pipeline: Basic Steps
官网:https://plugins.jenkins.io/workflow-basic-steps/ 文档:https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/ 仓库:
retry | 重复执行,直至成功
Pipeline: Basic Steps/retry

retry(5){
httpRequest(url: ‘https://www.google.com’)
}

Pipeline: Input Step
官网:https://plugins.jenkins.io/pipeline-input-step/ 文档:https://www.jenkins.io/doc/pipeline/steps/pipeline-input-step 仓库:
Pipeline: Build Step
官网:https://plugins.jenkins.io/pipeline-build-step/ 文档:https://www.jenkins.io/doc/pipeline/steps/pipeline-build-step/ 仓库:
Timestamper
官网:https://plugins.jenkins.io/timestamper/ 文档:https://www.jenkins.io/doc/pipeline/steps/timestamper/ 仓库:https://github.com/jenkinsci/timestamper-plugin[……]

READ MORE

「OpenSSH」- 配置与管理

该笔记将记录:在 Linux 中,SSH 配置与管理,以及常见问题的处理方案。
Restrict SFTP user to multiple folders
Client
如果用户名包含特殊字符
How to connect to SSH with ‘@’ character in username
比如包含 @ 符号:

ssh k4nz@example.com@example.com

禁用 motd 提示
ssh – How do I disable the Message of the Day (MOTD) on Ubuntu 14.04? – Ask Ubuntu

touch $HOME/.hushlogin

Disable StrictHostKeyChecking
~/.ssh/config(How to disable strict host key checking in ssh? – Ask Ubuntu)

Host *
StrictHostKeyChecking no

SSH Over USB
WIP
PSSH – Parallel SSH
Homepage: https://code.google.com/archive/p/parallel-ssh[……]

READ MORE

「Jenkins」- 部署 | 管理

Installing and Upgrading // 安装升级 | 服务简单部署;服务简单使用;运行服务并验证能够访问; High-availability Cluster // 高可用性 | 部署(生产级别) Backup, Recover, Migrate // 备份恢复 | Observability of Service // 服务观测 | 服务观测 Performance Tuning, Trace // 性能调优 | 性能优化:基准测试;压力测试; Permission and Security // 安全权限 |
版本选择
Changelog | https://www.jenkins.io/changelog/ LTS Changelog | https://www.jenkins.io/changelog-stable/
服务部署
官网提供多种安装方式,以在不同的环境中部署 Jenkins 服务 | https://www.jenkins.io/doc/book/installing
on Kubernetes | with Helm v3
https://www.jenkins.io/doc/book/installing/kubernetes/#install-jenkins-with-helm-v3
官方文档 | https://www.jenkins.io/doc/book/installing/docker 镜像仓库 | https://hub.docker.com/r/jenkins/jenkins 代码仓库 | https://github.com/jenkinsci/docker

helm repo add jenkinsci https://charts.jenkins.io
helm repo update

helm search repo jenkinsci
helm pull jenkinsci/jenkins

helm show values ./jenkins-5.8.47.tgz -f jenkins-5.8.47.tgz.helm-values.yaml
vim jenkins-5.8.47.tgz.helm-values.yaml
… nameOverride: “jenkins-ci”
… fullnameOverride: “jenkins-ci”
… persistence.storageClass:
… persistence.size:
… controller.image:
… controller.username:
… controller.password:
… controller.[……]

READ MORE

「MyCat」- 常见问题汇总

Startup failed: Timed out waiting for a signal from the JVM.
CSDN/Mycat使用遇到的错误
问题描述
在启动 MyCat 时,产生如下错误信息:

Startup failed: Timed out waiting for a signal from the JVM.
JVM did not exit on request, terminated

解决办法
修改 /path/to/mycat/conf/wrapper.conf 文件,追加如下行:

wrapper.startup.timeout=300
wrapper.ping.timeout=120

Call procedure()
Call procedure():MyCat未支持存储过程定义, 因而不允许调用存储过程,但可通过注解来调用各个分片上的存储过程
php 业务报错 1364 filed doesnt have a default value
因为mysql 5.6 以后的默认安全设置的问题: 需要修改mysql的 sql_mod sql_mode = sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
报错 The user specified as a definer test@% does not exist
需要在后端库中也建立一个test账号,并且赋予权限
java 业务报错 Connection is read-only
分析文章 https://www.wangzhenhua.rocks/zh-hans/mycat-spring-data-jpa-read-transaction
结论是: 常规的基于Spring管理事务的工程中,不适合使用MyCAT中间件。我们需要做一些额外的调整才能将MyCAT 使用起来,至于如何调整在下一篇文章中讲解。 spring
临时解决方法 连接属性加: useLocalSessionState=true 相关解释:https://blog.csdn.net/aa292016616/article/details/82736054
参考文献
部分内容来自于我朋友写的笔记,他好像没有博客,但是他把他的笔记共享给我了[……]

READ MORE

「TMV」- 英语 | English

认识
英语(English)是一种西日耳曼语言,起源于中世纪早期的英格兰,现在已经发展为全球最广泛的第一语言和第二语言。据统计,全球有超过 20 亿的人口在使用英语,无论是在学术、科技、商业、娱乐等领域,英语都扮演着重要的角色。
英语是全球使用最广泛的语言之一,属于印欧语系中日耳曼语族下的西日耳曼语支。它起源于古代日耳曼人的语言,随着历史的发展,受到了拉丁语、法语等多种语言的影响。如今,英语成为了国际交流、商务、科技、文化等领域的重要工具。
英语是一种广泛使用的语言,它是世界上使用最多的语言之一,也是联合国和其他国际组织的官方语言之一。目前已经成为全球通用的语言之一。总之,英语作为一门重要的语言,在不断发展和变化中,为人们的交流和合作提供了便利。
组成
在英语中,其基本组成包括以下几个部分:

音素(DJ Phonetic Symbols):英语音素是英语语音的最小单位。英语音素分为元音音素和辅音音素两大类。
音标(Phonetic Transcription):英语音标是记录英语语音的符号系统,用于准确表示英语单词的发音。例如,“sheet” [ʃiːt] 和“shit” [ʃɪt],通过音标可以清晰地分辨出元音的不同,从而准确读出这两个单词。
音节(Syllables in English Words):英语中的音节是语音结构的基本单位。一个音节通常包含一个元音音素,也可以由一个元音音素和一个或多个辅音音素共同组成。例如,单词“apple”有两个音节,“ap”和“ple”,其中“a”是元音音素;单词“computer”可以划分为“com – pu – ter”三个音节;“beautiful”可划分为“beau – ti – ful”三个音节。
语调(Intonation in Spoken English):其为语言表达中的重要组成部分,它通过声音的起伏变化来传达不同的意义和情感。英语语调的正确使用能够使语言更富有表现力和感染力。例如:用降调说 “Come here.”,语气比较坚决、肯定。用升调说 “Come here?”,则带有请求或询问的意味。
字母(Alphabet):英语字母共有 26 个,分别是 A-Z。
词汇(Vocabulary):单词是英语的基本构成单位,每个单词都有其特定的含义。
短语(Phrases):短语是由单词构成的,它包括各种名词、动词、形容词、副词、介词、连词、代词等。
句子(Sentence):句子是由单词按照一定的语法规则构成的,它是表达和交流的最小单位。它包含了词性、句型、时态、语态、主谓一致等多个方面。
语境:语境包括口语和书面语,正式和非正式语境,每种语境都有其特定的词汇和句型。
构造
学习[……]

READ MORE

「DBMS」- TDSQL-C MySQL | Tencent Cloud

认识
官网: 文档:https://cloud.tencent.com/document/product/1003/30488 仓库:
组成
WIP
构建
安装与升级
购买 TDSQL-C MySQL 服务
备份与恢复
备份与回档概述 | https://cloud.tencent.com/document/product/1003/74767
针对逻辑备份归档,与常规数据库类似,但有些额外步骤(解压、提取、……)

详细操作,建议参考文档 | 通过 Linux 恢复数据 | https://cloud.tencent.com/document/product/1003/74905

性质
Binlog
binlog 产生后会同时上传到 cos 中,cos 中保留时间受控制台日志备份时间的控制。 本地 binlog 默认保留 1 天,超过 1 天会被清理掉。 tdsql-c 的本地 binlog 不受参数 binlog_expire_logs_seconds 的控制,这个参数不起作用,已经反馈产品评估,后续会考虑屏蔽掉这个参数。
目前(07/15/2024)仅支持 canal、flink 组件订阅 binlog,可以支持本地 binlog 不存在的情况下,自动去 cos 上拉取。
下载和解压备份 | https://cloud.tencent.com/document/product/1003/74903[……]

READ MORE

「mysql-shell」

认识
官网:https://dev.mysql.com/doc/mysql-shell/8.0/en/ 文档:https://dev.mysql.com/doc/mysql-shell/8.0/en/ 仓库:https://github.com/mysql/mysql-shell
MySQL Shell 是支持 MySQL Server 开发和管理的交互式界面,是 MySQL Server 的组件。支持 Javascript、Python、SQL 语言,可以使用 MySQL Shell 来执行数据查询和更新以及各种管理操作。
构建
下载 | https://dev.mysql.com/downloads/shell/ 可以到官网下载 MySQL Shell。我们安装的版本使 1.0.9。
详细的安装过程都在源码目录下的 INSTALL 文件中,这里不再赘述,以下内容取自 INSTALL 文件,更多细节请阅读 INSTALL 文件: Build Instructions for MySQL Shell
需要安装的依赖软件包如下 – cmake – boost 1.59+,C++ 库 – libmysqlclient 5.7+ – protobuf 2.6.1 – zip (gnuwin32 in windows) – python 2.6+ – MySQL Connector Python 2.1.3+ (for Python 2)
可选的依赖软件包 – gtest 1.7,用于单元测试 – v8 3.28.71.19,Javascript 引擎,安装 v8 时要注意版本。
使用源码开始编译

#!/bin/sh

# 1. 进入源码目录
mkdir bld
cd bld
cmake .. -DWITH_PROTOBUF=<path_to_protobuf> -DHAVE_PYTHON=1
make

以这种方式编译出来的 MySQL Shell 只支持 SQL 模式。
如果你希望支持 Javascript JavaScript is enabled by satisfying the dependency with V8. To build V8 follow the build V8 standard build instructions. To support JavaScript on the MySQL Shell add the next flags to the CMake call:
-DV8_INCLUDE_DIR=<path_to_v8>/include -DV8_LIB_DIR=<path_to_folder_[……]

READ MORE

「MySQL」- String Types(学习笔记)

类型概述
在某些情况下,MySQL 可能会将字符串列更改为与 CREATE TABLE 或 ALTER TABLE 语句中给出的类型不同的类型。参见:Section 13.1.18.7, “Silent Column Specification Changes”
MySQL 以字符为单位解释字符列定义中的长度规范。这适用于 CHAR,VARCHAR 和 TEXT 类型。
许多字符串类型的列定义时,可以指定列的字符集或排序规则。这些属性适用于 CHAR, VARCHAR, TEXT, ENUM, SET:

CHARACTER SET 属性指定字符集,COLLATE 属性指定字符集的排序规则。CHARACTER SET 和 COLLATE 属性中的一个或两个缺失时分配字符集和归类的规则在文档中Section 10.1.3.5, “Column Character Set and Collation”有所描述。CHARSET 与 CHARACTER SET 是同意的。
为字符串数据类型指定 CHARACTER SET binary 属性会导致列被创建为相应的二进制字符串数据类型:CHAR 变为 BINARY,VARCHAR 变为 VARBINARY,TEXT 变为 BLOB。对于 ENUM 和 SET 数据类型,不会发生这种情况;它们被创建为已声明。假设您使用此定义指定表:
BINARY 属性是指定表默认字符集和该字符集的二进制(_bin)排序规则的缩写。在这种情况下,比较和排序是基于数字字符编码值。
ASCII 属性是 CHARACTER SET latin1 的缩写。
UNICODE 属性是 CHARACTER SET ucs2 的缩写。

字符列比较和排序基于分配给列的排序规则。对于 CHAR,VARCHAR,TEXT,ENUM 和 SET 数据类型,您可以使用二进制(_bin)排序规则或 BINARY 属性来声明列,可以使比较和排序时使用底层字符编码值而不是词法排序。
文本字符串类型
[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name] 范围:0-255 字节 定长字符串,存储时始终用空格填充在字符串右侧,使字符串达到 M 指定的字符个数。如果省略 M,则默认为 1。 除非启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式,否则检索 CHAR 值时,尾随的空格会被删除。 CHAR 是 CHARACTER 的缩写。NATIONAL CHAR(或其简写:NCHAR)是用于定义 CHAR 列应使用某些预定义字符集的标准 SQL 方法。MySQL 使用 ut[……]

READ MORE

「MySQL」- 与超时有关的变量

内容简介
本文将介绍在MySQL中常见的“超时变量”,以及他们所代表的含义、所控制的行为。
注意事项
本文所说的“超时变量”是指变量名中带有“timeout”的变量。本文所列举的“超时变量”是由SHOW VARIABLES LIKE ‘%timeout%’;语句输出的变量。
与超时有关的变量
# interactive_timeout
在关闭”交互连接”之前,等待活动的时间,这允许客户端在interactive_timeout秒内不活动。
“交互式客户端”指的是在mysql_real_connect()中使用CLIENT_INTERACTIVE打开的连接,允许在关闭连接前的interactive_timeout秒内不活动。“交互式客户端”的wait_timeout会被设置为interactive_timeout的值。
# wait_timeout
在关闭“非交互连接”之前,等待活动的时间。
在线程启动时,在会话wait_timeout变量的值会被设置为全局wait_timeout变量的值,或者被设置为全局interactive_timeout的值,具体取决与客户端的连接。
# connect_timeout
在建立连接是使用该变量。告诉MySQL服务器在响应“Bad handshake”之前,等待来自客户端的连接数据包的时间。
delayed_insert_timeout
innodb_flush_log_at_timeout
innodb_lock_wait_timeout
innodb_rollback_on_timeout
lock_wait_timeout
net_read_timeout
net_write_timeout
rpl_stop_slave_timeout
slave_net_timeout
附加说明
# interactive_timeout、wait_timeout
当运行查询时,这两个时间都被重置为0值。在交互模式下,则interactive_timeout才生效;非交互模式下,则wait_timeout生效。
但是,我依旧没有GET到这个点:这个两个参数在实际的场景中到底控制的是什么?这两种连接的区别是什么?意义在哪里?
参考文献
MySQL Server Administration/The MySQL Server/Server System Variables What is the difference between wait_timeout and interactive_timeout? MySQL net_write_timeout vs wait_timeout an[……]

READ MORE

「Groovy」- 常用字符串操作 | String

虽然这不是本意,但是我们完全将 Groovy 作为脚本语言使用。我们可以像 Java 那样(严谨?)定义变量的类型,又可以像 PHP 那样不用定义变量类型,还能自由使用 Maven 仓库中的包。Groovy 满足我们对脚本语言的全部期望。当然,这些都是个人感受,肯定不符合软件工程的实践要求,但是我们用的很开心。
该笔记将整理:在 Groovy 中,常用的字符串操作,以及常见问题处理。
极其常用的字符串操作

// 大小写转换
“lowercase”.toUpperCase()
“UPPERCASE”.toLowerCase()

startsWith endsWith
判断为空
How can I determine if a String is non-null and not only whitespace in Groovy? – Stack Overflow

if(“”) { // false

}

if (myString?.trim()) {

}

包含 | contains(), indexOf(), …
DeepSeek / groovy 判断字符串是否包含特定字符

def str = “Hello, Groovy!”
def containsComma = str.contains(‘,’) // 判断是否包含逗号
println containsComma // 输出 true

def str = “Hello, Groovy!”
def hasExclamation = str.indexOf(‘!’) != -1 // 如果找到返回索引,否则返回-1
println hasExclamation // 输出 true

def str = “Hello, Groovy!”
def hasLetterG = str =~ /G/ // 使用模式匹配操作符 =~
println hasLetterG.find() // 输出 true

def str = “Hello, Groovy!”
def charToFind = ‘o’
def containsChar = charToFind in str
println containsChar // 输出 true

def str = “Hello, Groovy!”
def charToFind = ‘v’
println “字符串${str}${str.contains(charToFind) ? ‘包含’ : ‘不包含’}字符 ${charToFind}”
// 输出: 字符串Hello, Groovy!包含字符

// 如果需要检查字符串中是否[……]

READ MORE

「MySQL」- Access denied with different hostname

问题
使用命令mysql -u test -h mysql.domain.com -p连接数据库,产生错误提示:

ERROR 1045 (28000): Access denied for user ‘test’@’externalit.domain.com’ (using password: YES)。

在错误提示中的主机名,并不是连接时所使用的主机名。
分析
这是 Server 认为与 IP Address 相关的名称。它可以用于 DNS 设置(它正在尝试反向 DNS 解析),或 /etc/host 文件中的某些内容(将 IP 映射到该主机)。
待办事项
WIP 使用主机名访问 MySQL,在多环境中控制 DNS 解析
参考文献
mysql client connection hostname question[……]

READ MORE

「MySQL」- 慢查询日志

问题描述
该笔记将记录:介绍 MySQL 中的慢日志查询及分析方法。关于 MySQL 中的日志种类,查看站内《Server Logs》;
解决方案
MySQL Version 5.7
“慢查询日志”可用于查找需要很长时间执行的查询,因此可以用做优化的候选;
但是,分析一份很长的慢查询日志是很困难的。可以用 mysqldumpslow 来处理慢查询日志;
根据《高性能 MySQL》作者在章节 3.3.1 所说:

在 MySQL 当前的版本中,慢日志查询日志是开销最低、精度最高的测量查询时间工具。如果还在担心开启慢查询日志会带来额外的开销,大可放心。我们们在 I/O 密集型场景做过基准测试,慢日志查询带来的开销可以忽略不计(实际上在 CPU 密集型场景的影响还稍微大一些);

当前的版本是 5.7,我们假设作者所有的在 5.7 中也适用;
The Slow Query Log
关于慢查询日志介绍,查看《Slow Query Log: MySQL 慢查询日志》; https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
The DDL Log https://dev.mysql.com/doc/refman/5.7/en/ddl-log.html
Server Log Maintenance https://dev.mysql.com/doc/refman/5.7/en/log-file-maintenance.html
Selecting General Query and Slow Query Log Output Destinations https://dev.mysql.com/doc/refman/5.7/en/log-destinations.html
慢查询日志相关选项
“慢查询日志”由 SQL 语句组成,每行日志都有时间戳。这些 SQL 语句执行时间超过 long_query_time(单位:秒)指定的时间,并且至少需要检查 min_expected_row_limit 指定的行数;
以下是关于慢日志查询的相关选项:
min_expected_row_limit

命令行: –min-examined-row-limit=#
如果检查的行数少于该参数指定的行数,不会记录到慢查询日志中;
取值范围:0~4294967295(32 位),0~18446744073709551615(64 位)。默认 0;

https://dev.mysql.com/doc/refman/5.7/en/server[……]

READ MORE

「PDF」- Portable Document Format

认识
PDF,Portable Document Format,是一种可移植文档格式,是种电子文档格式,其由 Adobe Systems 公司开发。
以“.pdf”作为文件扩展名的文件,其通常为 PDF 格式的文档。
组成
WIP
构建
PDF 格式的文档可以包含文字、图片、图形、表格、多媒体等内容,并且可以通过 Adobe Acrobat 等软件进行编辑和创建。
创建 PDF 文件 修改 PDF 文件 查看 PDF 文件
性质
经过编码后可以在不同操作系统和不同硬件环境下保持原始格式的可读性,具有高度的可靠性和兼容性。
应用
WIP
改进
WIP
参考
WIP[……]

READ MORE

「OCR」- 光学字符识别 | Optical Character Recognition | 图片文字提取

认识
早期提出 ORC 技术的动机
Early optical character recognition may be traced to technologies involving telegraphy and creating reading devices for the blind. In 1914, Emanuel Goldberg developed a machine that read characters and converted them into standard telegraph code. Concurrently, Edmund Fournier d’Albe developed the Optophone, a handheld scanner that when moved across a printed page, produced tones that corresponded to specific letters or characters.
In the late 1920s and into the 1930s, Emanuel Goldberg developed what he called a “Statistical Machine” for searching microfilm archives using an optical code recognition system. In 1931, he was granted US Patent number 1,838,389 for the invention. The patent was acquired by IBM.
Wikipedia/Optical character recognition/History
组成
WIP OCR 技术原理
构建
gImageReader | https://github.com/manisandro/gImageReader
olmOCR | https://olmocr.allenai.org/

The current model was fine-tuned on English documents; other languages are not likely to work.

应用
现代应用 ORC 技术的需求
办公自动化与文档管理:

合同处理:能自动识别合同中的文字信息并转换为可编辑电子文本,提高合同处理效率,降低人工录入错误风险。还可结合自然语言处理技术,对合同关键数据进行智能分析和提取,形成结构化数据,便于企业快速获取关键信息,以及进行筛选、查询、管理等操作,为决策提供有[……]

READ MORE

「Redis」- 常见问题处理

[Sol] READONLY You can’t write against a read only replica.
READONLY You can’t write against a read only replica. · Issue #1643 · go-redis/redis · GitHub
问题描述:执行 SET 命令,提示 READONLY You can’t write against a read only replica. 信息;
原因分析:在我们场景,Redis 单实例,无主从。从 INFO 中,我们看到当前节点的 ROLE 为 Slave 角色。我们猜测是有人调整主从关系而引发的错误。
解决方案:redis-cli -h 127.0.0.1 -p 6379 slaveof no one
[Sol] Fatal: Can’t initialize Background Jobs
Redis: Fatal: Can’t initialize Background Jobs – Feedback & Bug Reports – CircleCI Discuss docker redis:6.0 run error: Fatal: Can’t initialize Background Jobs. · Issue #12364 · redis/redis

# docker run –ulimit nofile=1024000:1024000 redis:7.0
1:C 13 Dec 2023 02:20:26.744 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 13 Dec 2023 02:20:26.745 # Redis version=7.0.14, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 13 Dec 2023 02:20:26.745 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 13 Dec 2023 02:20:26.745 * monotonic clock: POSIX clock_gettime
1:M 13 Dec 2023 02:20:26.746 * Running mode=standalone, port=6379.
1:M 13 Dec 2023 02:20:26.746[……]

READ MORE

「MySQL」- 在主库中,启用 binlog 功能

第一步、启用 binlog 功能
修改数据库配置文件(用于持久化配置):

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

binlog_format = MIXED
expire_logs_days = 30
max_binlog_size = 500M
sync_binlog = 1

通过语句设置全局变量(防止服务停止):

SET GLOBAL server_id = 26
SET GLOBAL log_bin = /var/log/mysql/binlog
— 略过其他变量

通过以上两步可以实现不停机修改配置,并做到配置持久化。
第二步、添加用于复制的用户

GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’ IDENTIFIED BY ‘your password’;

(可选步骤)在创建用户后,验证用户是否可以正常登录。
参考文献
MySQL 5.7 Reference Manual/FLUSH Statement[……]

READ MORE

「MySQL」- 存储引擎

存储引擎是MySQL的组件,用于处理对不同表类型SQL操作。
MySQL使用可插拔的存储引擎架构,可以在MySQL运行时加入或卸载存储引擎。InnoDB是默认的存储引擎,并且是Oracle推荐使用的,除非有特殊的用例。
查看支持的存储引擎
使用SHOW ENGINES查看数据库支持的存储引擎,如下输出,Support项表示是否支持,YES支持,NO不支持,DEFAULT默认:

mysql> show engines \G;
*************************** 1. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 2. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MyISAM
Support: YES
Comment: My[……]

READ MORE

「OpenLADP」- 管理工具(Web UI、Desktop)

GitHub:Search · ldap ui
LDAP Admin – Windows LDAP Manager
What is LDAP Admin? LDAP Admin for Linux(获取 Linux 版本)
图形化的桌面 LDAP 管理工具。

注意,用户名需要填写完整的 DN 路径。
phpLDAPadmin
Main Page – phpLDAPadmin GitHub – leenooks/phpLDAPadmin: phpLDAPadmin – Web based LDAP administration tool Installing and configuring phpLDAPadmin [ClearOS Documentation]
It can be very easy to mess up your LDAP database by editing it. You have been warned.
LDAP Account Manager
LDAP Account Manager Install and Configure LDAP Account Manager on Ubuntu 20.04|18.04|16.04
GOsa
gosa-project/gosa-core: GOsa core
Simple LDAP editor
dnknth/ldap-ui: Minimalistic web frontend for OpenLDAP
参考文献
Web interface for LDAP management[……]

READ MORE

「Jenkins」- 流水线 | Pipeline | JENKINS-PIPELINE

描述
文档:https://www.jenkins.io/doc/book/pipeline/
在工业中,流水线是生产方式,用于制造商品。在软件工程中,流水线是生产方式,实现软件从版本仓库到用户产品这个过程,用于制造软件。流水线由处理元素链组成,依序排列,每个处理元素的输出是下个处理元素的输入。
在 Jenkins 中,Jenkins Pipeline 是指支持实现和集成持续交付流水线(Continuous Delivery Pipeline)到 Jenkins 中的插件集。持续交付流水线,也是生产方式,实现软件从版本仓库到用户这个过程的自动化的表达。如此说来 Jenkins 本来就支持流水线,它是通过图形化界面配置的方式来实现流水线(拉取代码,构建,打包,测试,发布)。
在 Jenkins 1.x 中,只能通过界面配置实现流水线。在 Jenkins 2.x 中,可以通过代码实现流水线,通过代码描述工作任务(这正是我们要学习的)。
通过代码实现控制 Jenkins 执行自动化任务,解决以下问题:

更好的版本管理:既然流水线由代码实现,则可以将流水线提交到版本仓库进行管理。传统的图形化配置难以进行版本控制。
更好的代码审查:在仓库中的代码对所有人可见,有利于代码审查。传统的图形化配置难以进行审查。
更好的流程重用:多种项目可以采用相同的流水线,实现流水线的重用。在传统图形化中,任务只能单独配置、互相复制(或者使用接口配置)。

功能特性

内置文档 | 在 Jenkins 服务中,内置了一些文档,启动 Jenkins 后,即可访问查看。这包括代码生成器,全局变量的说明等等。
在官方文档中,没有列举内置环境变量,需要访问进行 ${YOUR_JENKINS_URL}/pipeline-syntax/globals 查看;

原理
针对 Pipeline 功能,其由插件提供,我们根据 Jenkins 版本来选择最新版本的 Pipeline 插件即可。
该列出的插件为基础插件,“基础插件”是指必须安装的插件,或说及其有用的插件。针对这些插件,可能已默认安装,不需要单独安装;

插件功能:
– 这是 Pipeline 的基础插件,要使用 Pipeline 功能,需要安装该插件,可让你可以协调简单或复杂的自动化。

插件地址:
https://plugins.jenkins.io/workflow-aggregator

步骤手册:
https://jenkins.i[……]

READ MORE