「MySQL」- 通过延迟复制实现备份
WIP ! 通过延迟复制实现MySQL的备份
参考文献
17.3.10 Delayed Replication How to lag a slave behind to avoid a disaster[……]
「REDIS」- Redis GUI by Redis | 客户端 | Redis Insight
认识
官网:https://redis.io/insight/ 文档:https://redis.io/docs/latest/operate/redisinsight/install/ 仓库:https://github.com/RedisInsight/RedisInsight
Redis Insight is a visual tool that provides capabilities to design, develop, and optimize your Redis application. Query, analyse and interact with your Redis data. 简而言之,Redis Insight 是个 Redis 的 图形化客户端,用于连接和管理 Redis 服务。
组成
Built with love using Electron, Monaco Editor and NodeJS.
构建
安装
https://flathub.org/apps/com.redis.RedisInsight flatpak install flathub com.redis.RedisInsight flatpak run com.redis.RedisInsight
on Kubernetes | https://redis.io/docs/latest/operate/redisinsight/install/install-on-k8s/[……]
「MySQL」- 导出主库数据,并导入从库
第一步、从主库导出数据
使用 Xtrabackup 创建全量备份:
#!/bin/sh
xtrabackup –backup –user=root –password –target-dir=/data/backups/
对全量备份数据进行预备操作:
#!/bin/sh
xtrabackup –prepare –target-dir=/data/backups/
第二步、将数据导入从库
数据导入:将数据复制到目标主机,将数据导入 MySQL 数据目录(详细过程略过)。
调整权限:修改数据目录权限,以允许 MySQL 访问。
启动服务:启动数据库服务,并检查 MySQL 能够成功启动。
其他方法:使用 mysqldump 导出
锁定所有的表,防止数据更新:
mysql> FLUSH TABLES WITH READ LOCK;
查看在主库中 binlog 位置(这是从库复制开始的位置,需要记住这些数字):
mysql> SHOW MASTER STATUS;
+—————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+——————-+
| binlog.000001 | 497120 | | | |
+—————+———-+————–+——————+——————-+
1 row in set (0.00 sec)
使用 mysqldump 命令导出数据,并导入从库中(详细过程略过)。
解锁之前锁定的表,以允许数据写入:
mysql> UNLOCK TABLES;
参考文献
How To Set Up Master Slave Replication in MySQL[……]
「Confluence」- 企业级知识管理和协作平台
认识
官网:https://www.atlassian.com/software/confluence 文档:https://support.atlassian.com/confluence-cloud/resources/ 仓库:None
Confluence 是一款由 Atlassian 公司开发的企业级知识管理和协作平台。它旨在帮助团队更好地组织、分享、协作知识,提高工作效率和团队协作能力。在多种环境中,可以使用 Confluence 服务,包括企业内部、软件开发团队、项目管理团队、……。简而言之,Confluence 是款企业内部使用的 Wiki 工具,用于分享知识。
组成
Java + MySQL/ PG / Oracle / SQL Server
构建
服务部署
镜像:https://hub.docker.com/r/haxqer/confluence/tags 仓库:https://github.com/haxqer/confluence
第一步、部署数据库服务
Confluence 使用数据库存储数据,所以需要部署数据库服务。在我们的环境中,我们使用现有的 MySQL 数据库服务。
根据 https://github.com/haxqer/confluence/blob/master/docker-compose.yml 配置,confluence:9.2.1 使用 mysql:8.0 版本。
第二步、通过容器运行服务
version: ‘3.4’
services:
confluence:
image: haxqer/confluence:9.2.1
container_name: confluence-srv
environment:
– TZ=Asia/Shanghai
ports:
– “8090:8090”
volumes:
– ./data:/var/confluence
restart: always
networks:
– network-bridge
networks:
network-bridge:
driver: bridge
第三步、浏览器访问服务
按照页面提示,进行相关初始化操作;
针对许可,通过如下方式创建:
docker exec confluence-srv java -jar /var/agent/atlassian-agent.jar \
-d \
-p conf \
-m Hello@world.co[……]
「TKE」- 腾讯云 Kubernetes 服务 | 容器服务 | Tencent Kubernetes Engine
认识
官网:https://cloud.tencent.com/product/tke 文档:https://cloud.tencent.com/document/product/457 仓库:
腾讯云容器服务(Tencent Kubernetes Engine,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务会对不同规格的托管集群收取相应的集群管理费用。在使用中创建的其他的云产品资源(CVM、CBS、CLB 等),将按照各自云产品的计费方式进行收费。简而言之,TKE 是腾讯云推出的 Kubernetes 服务。
组成
API Server
腾讯云的 TKE 将 API Server 暴露到公网的时候,其采用的方式是创建负载均衡,转发到后端 API Server 组件。但是,负载均衡是动态 IP 地址,所以提给给用户的是一个域名,并需要用户自己解析 DNS CANME 到负载均衡域名。请注意,该域名需要备案。
网络 | Networking
网络管理 > 容器网络概述 | https://cloud.tencent.com/document/product/457/50353
注意,VPC-CNI 模式 Pod 数量限制 | https://cloud.tencent.com/document/product/457/64917
构建
购买集群配额限制
K8s 资源配额说明 | https://cloud.tencent.com/document/product/457/9087
集群规格 | Pod 数量限制 | ConfigMap 数量限制 | CRD / 其他 K8s 资源数量限制 L20 1500 512 2500
性质
Storge
扩容 | 文档中心>容器服务>TKE 标准集群指南>组件管理>CBS-CSI 说明>在线扩容云硬盘
<StorageClass>.allowVolumeExpansion: true
kubectl edit pvc cbs[……]
「Gogs and Gitea」- 轻量 Git 服务
Gogs
Introduction – Gogs
轻量 Git 服务、GitLab 替代品、GitLab Alternative
认识
仓库:https://github.com/gogs/gogs
组成
配置文件路径
在 CentOS 7.x 中,如果使用软件管理器安装,则默认配置文件位于 /etc/gogs/ 目录中。
构建
镜像仓库:gogs/gogs – Docker Image | Docker Hub 容器部署:gogs/docker at main · gogs/gogs
性质
配置 Git LFS 支持
gogs/lfs.md at main · gogs/gogs
对于 Gogs 环境要求: 1)Git LFS is supported in Gogs starting with version 0.12. 2)Git LFS client version 1.0.1 and up.
在 app.ini 中,添加 [lfs] 配置:
…
[lfs]
; The storage backend for uploading new objects.
STORAGE = local
; The root path to store LFS objects on local file system.
OBJECTS_PATH = /data/git/lfs-objects
…[……]
「ROCKETMQ」- 部署 | Docker Compose
Broker Configuration
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 192.168.110.55:9876
# Docker环境需要设置成宿主机IP
#brokerIP1 = {docker宿主机IP}
brokerIP1 = 192.168.110.55
Docker Compose YAML
version: “3”
services:
rocketmq-nameserver:
restart: always
container_name: rmqnamesrv
ports:
– 9876:9876
volumes:
– ./data/server/logs:/home/rocketmq/logs
– ./data/server/stores:/home/rocketmq/store
environment:
– MAX_HEAP_SIZE=256M
– HEAP_NEWSIZE=128M
– MAX_POSSIBLE_HEAP=200000000
image: docker.io/apache/rocketmq:4.7.1
command: sh mqnamesrv
rocketmq-broker:
restart: always
container_name: rmqbroker
ports:
– 10911:10911
– 10909:10909
– 9877:9877
# privileged: true
# cd /data/service/rocketmq/rocketmq-broker && chmod -R a+rw logs store # store 也是 Broker 启动后才生成的
volumes:
– ./data/broker/logs:/home/rocketmq/log[……]
「RADIUS」- 远程认证拨号用户服务 | Remote Authentication Dial In User Service
认识
RADIUS,Remote Authentication Dial-In User Service,远程认证拨号用户服务)是一种网络协议,用于集中化管理 AAA,通常用于企业网络、ISP、Wi-Fi 和 VPN 接入等场景
RADIUS 是一种分布式的、C/S 架构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。
组成
At the time RADIUS was created, network access systems were distributed across a wide area and were run by multiple independent organizations. Central administrators wanted to prevent problems with security and scalability, and thus did not want to distribute user names and passwords; instead, they wanted the remote access servers to contact a central server to authorize access to the requested system or service. In response to contact from the remote access server, the central server would return a “success” or “failure” message, and the remote machines would be in charge of enforcing this response for each end user.
基本架构
其采用 Client/Server 模型,主要包含如下角色:
User | Device | Terminal | …
构造:Laptop; ADSL Modem; VOIP Phone;
性质:Requests access to the network.
Network Access Server | NAS | RADIUS Client | …
构造:通常是网络设备(例如,Switch、AP、VPN Gateway、……),Switch; Wireless AP; DSLAM; VPN Terminator,Common RADIUS server products include C[……]
「MySQL」- 技巧和提示
查看建表时间
How do I get the creation date of a MySQL table?
SELECT create_time FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = ‘your_schema’
AND table_name = ‘your_table’
修改自增起始值
How to set initial value and auto increment in MySQL?
ALTER TABLE “table_name” AUTO_INCREMENT = 1000;
添加主键
mysql – Insert auto increment primary key to existing table – Stack Overflow
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
复合主键
mysql 联合主键和复合主键的区别
primary key(name, age)
处理 Expression #1 of SELECT list is not in GROUP BY clause 问题
mysql 命令 gruop by 报错 this is incompatible with sql_mode=only_full_group_by_记忆碎片-CSDN 博客
临时处理:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));
SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));
彻底解决:修改 my.ini 配置:
[mysqld]
…
SET sql_mode =’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
…[……]
「Kubernetes」- CRD | CustomResourceDefinition
描述
假设你有一个自定义的工作负荷,但没有任何已有的资源(比如,部署、job 或 Statefulset)适合描述这个工作负荷。如何利用代表该工作负荷的新资源扩展 Kubernetes API,且可以像往常一样使用 kubectl?
Extending the API Using Custom Resource Definitions (CRDs)
可以使用自定义资源定义(Custom Resource Definition,CRD),使用自定义的资源扩展 Kubernetes 应用。
假设需要定义一个 Function 类型的自定义资源。它代表了短期运行的、像 Job 一样的资源,类似于 AWS Lambda 提供的功能,也就是所谓的“功能即服务”(Function–Service,as,它还有个极具误导性的名字“无服务器体系”) 关于在 Kubernetes 上运行适合生产环境的 FaaS 解决方案,请参阅 14.7 节;
首先,在一个名为 functions–crd.yaml 的清单文件中定义该 CRD:
然后,通知 API 服务器这个新的 CRD(注册需要几分钟的时间):
现在自定义的资源 Function 已经定义好了并且服务器也知道了它的存在,接下来可以使用一个名为 myfaas.yaml 的清单文件实例化这个资源,如下所示:
照例还需创建 Function myfaas 的资源:
现在只需通过访问 API 服务器就可以找到 CRD。例如,使用 kubectl1 proxy 可以从本地访问 API 服务器,还可以查询键空间(比如下例中查询了 example.com/v1):
这里可以看到资源列表以及允许的操作;
如果想要删除自定义的资源实例 myfaas,那么只需运行删除命令:
正如你所见,创建一个 CRD 很直观。从终端用户的角度看来,CRD 代表一个稳定的 API,几乎与 pod 或 job 等内置的资源没有什么区别。所有常见的命令,比如 kubectl get 和 kubectl delete,也可以照常工作;
然而,创建一个 CRD 其实只是完全扩展该 Kubernetes API 所必需的工作的一小半。CRD 仅仅实现了通过 API 服务在 etcd 中存储数据或获取数据。还需要编写自定义的控制器,用于解释自定义数据表达用户的意图和建立控制循环对比当前的状态和声明的状态,以及调和二者;
在 v1.7 之前,CRD 被称作第三方资源(third-party resources,tprs)如果你手头有一个 TPR,强烈建议现在就移植它;
CRD 主要的局限性在于(因此在某些场合,你可能希望使用用户的 API 服务器):[……]
「GITLAB」- A web-based Git-repository manager
认识
GitLab 提供了一个统一、高效的工作流程,使得开发者可以在同一个平台上完成从代码编写到部署的全部过程。
组成
GitLab Architecture Overview
Gitaly provides high-level remote procedure call (RPC) access to Git repositories. It is used by GitLab to read and write Git data. Gitaly manages only Git repository access for GitLab. Other types of GitLab data aren’t accessed using Gitaly.
构建
目前(2019/07/10)分为社区版和企业版。社区版使用 MIT 许可,企业版使用专有许可;
参考
介绍 GitLab —— ChatGPT 4.0[……]
「CONFLUENCE」- 接入 LDAP 服务
用户账户管理
删除用户
Delete or Disable Users | version 9.2 https://confluence.atlassian.com/doc/delete-or-disable-users-138318.html
如果用户同时出现在不同的 Directories 中:
需要删除 LDAP 中用户,
需要进行 Unsynced from directory 清理,然后才会出现 Delete 按钮;
如果中途修改过 Directories 类型,可能需要还原,然后再进行清理;
管理员密码重置
Restore Passwords To Recover Admin User Rights | version 8.8 https://confluence.atlassian.com/conf88/restore-passwords-to-recover-admin-user-rights-1354500321.html
# 12/19/2024 我们测试并未生效,或是我们的方法不正确;
接入 LDAP 管理
Connecting to an LDAP Directory | Confluence Data Center 8.9 | Atlassian Documentation
We provide built-in connectors for the most popular LDAP directory servers:
Microsoft Active Directory
Apache Directory Server (ApacheDS)
Apple Open Directory
Fedora Directory Server
Novell eDirectory
OpenDS
OpenLDAP
OpenLDAP Using Posix Schema
Posix Schema for LDAP
Sun Directory Server Enterprise Edition (DSEE)
A generic LDAP directory server
User Directories
Administrator / User management / User Directories / Order
或,针对某些极端场景,修改数据库:cwd_app_dir_mapping;cwd_directory;
接入 Light LDAP 服务
# 05/20/2025 Confluence 9.2.1[……]
「MySQL」- 在从库中,调整配置以启用复制
第一步、配置复制功能
修改配置文件:
[mysqld]
server_id = 93
relay_log = /var/log/mysql/relaylog
log_bin = /var/log/mysql/binlog
重启数据库服务(略过)。
第二步、查找 binlog 位置
在 Xtrabackup 备份目录中,xtrabackup_binlog_info 文件保存 binlog 位置:
# cat /path/to/backup/xtrabackup_binlog_info
binlog.000051 2499643
第三步、启动从库复制
STOP SLAVE;
CHANGE MASTER TO master_host='<ip address>’, master_port=3306,
master_user=’replication’, master_password='<your password>’,
master_log_file=’binlog.000051′, master_log_pos=2499643;
START SLAVE;
注意事项: 1)参数 master_log_pos、master_port 不要使用引号,否则会产生语法错误;[……]
「SOCKS」- Socket Secure
认识
Socket Secure(SOCKS)是一个 Internet 协议,通过代理服务器在客户端和服务器之间交换网络数据包。SOCKS5 额外提供身份验证,因此只有授权用户才能访问服务器。实际上,SOCKS 服务器代理可以连接到任意 IP 地址的 TCP 连接,并提供 UDP 数据包转发的方式。
SOCKS 在 OSI 模型的第 5 层(会话层,表示层和传输层之间的中间层)执行。SOCKS 服务器接受 TCP 端口 1080 上的传入客户端连接。
组成
原理简述
要讲 SOCKS 的原理就不得不提一提传统的网络交互模式和 GFW。
以前我们是这么访问网络的。。。
这个时候我可能还没有出生,我们访问各种网站都是简单而直接的,用户的请求通过路由(Router)发送到服务提供方,服务返回数据。
后来出现一个东西,它叫 GFW。。。
GFW 可以理解为 Router 的升级。它有很多的功能,比如数据包内容检查。每当用户需要获取信息,都经过了 GFW 的审查,GFW 将它不喜欢的内容统统过滤掉。于是客户的数据包内容触发 GFW 的过滤规则的时候,就会收到 Connection Reset 这样的响应内容,而无法接收到正常的内容。
再后来出现了一个东西。。。
后来出现了一个协议,它叫做 SOCKS 协议。由于发送给 GFW 的数据加密了,所以 GFW 也发现不了数据包的内容,也就没有办法触发 GFW 的过滤规则。 后来 GFW 发现 SSH 的发送的数据包的内容虽然是加密的,但是 SSH 发送的数据包有某些特征,然后 GFW 就对其进行了干扰,导致 SSH 很不稳定。
再后来,Shadowsocks 出现了,SOCKS 升级了
于是 clowwindy 同学分享并开源了他的解决方案。简单理解的话,shadowsocks 是将原来 ssh 创建的 Socks5 协议拆开成 server 端和 client 端,所以 Shadowsocks 基本上与 ssh tunnel 的原理大致类似。ss-local 和 ss-server 两端通过多种可选的加密方法进行通讯,经过 GFW 的数据包是加密的,因此 GFW 也无法对通讯数据进行解密,而且最重要的是数据包没有明显的特征码,对于 GFW 来说是常规的 TCP 包,没有办法审查内容。
后来,作者喝茶了,因为技术上很难封杀 Shadowsocks。
协议交互
The TCP address that a client wants to proxy google.com:443 Let’s assign roles. Here, a client may be a Chrome browser, a curl comman[……]
「REDIS」- TOOLS | 工具 | GUI | 安装
认识
WIP
构建
Debian GNU/Linux 10 and snap
Enable snaps on Debian and install RedisDesktopManager
# 安装
snap install redis-desktop-manager
# 运行
/snap/bin/redis-desktop-manager.rdm
使用源码编译
# 由于发行版的原因,不能直接执行构建脚本,
# 下面的内容是从 src/cofigure 中提炼出来的
# —————————————————————————– # 安装依赖
apt-get install qt5-default qtdeclarative5-dev libqt5charts5-dev \
qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qt-labs-settings \
qml-module-qtquick-dialogs qml-module-qtquick-layouts qml-module-qt-labs-folderlistmodel \
qml-module-qtqml-models2 qml-module-qtcharts libssl1.0-dev libqt5svg5-dev -y
apt-get install automake libtool cmake -y
# —————————————————————————– # 下载源码
git clone –recursive https://github.com/uglide/RedisDesktopManager.git -b 2019 rdm
cd ./rdm/
# —————————————————————————– # 编译前的准备工作
# 处理「third_party/lss/linux_syscall_support.h: No such file or directory」错误
pushd
mkdir -pv 3rdparty/gbreakpad/src/third_party/lss/
cd 3rdparty/gbreakpad/src/third_party/lss/
git clone https:[……]
「iOS」- iPhone and iOS | OPERATING-SYSTEM
苹果手机管理工具
爱斯助手(i4Tools)
认识
iOS 是由苹果公司(Apple Inc.)开发的移动操作系统,专为 iPhone、iPad 和 iPod Touch 等设备设计。自 2007 年首次发布以来,iOS 已成为全球最流行的移动操作系统之一,以其流畅的用户体验、强大的安全性和丰富的生态系统著称。简而言之,iOS 是应用于 iPhone、iPad 等硬件的操作系统。
组成
开发与技术栈 – 编程语言:Swift(苹果主推)、Objective-C(旧代码兼容)。 – 开发工具:Xcode(官方 IDE),支持模拟器和真机调试。 – 框架:UIKit(界面)、SwiftUI(声明式 UI)、ARKit(增强现实)、Core ML(机器学习)等。 – 应用分发:通过 App Store 或企业证书 / TestFlight(测试版)。
构建
iOS 的主要版本历史 – 初代 iOS(2007,原名 iPhone OS):随第一代 iPhone 发布,支持多点触控和网页应用。 – iOS 4(2010):引入多任务处理、FaceTime 和文件夹功能。 – iOS 7(2013):全新扁平化设计,控制中心、AirDrop。 – iOS 12~14(2018~2020):性能优化、屏幕使用时间、小组件(Widgets)、App 资源库。 – iOS 15~17(2021~2023):专注模式、实况文本(Live Text)、灵动岛(Dynamic Island,iPhone 14 Pro)、交互式小组件等。
性质
– 封闭生态系统:苹果严格控制硬件和软件的整合,确保系统稳定性和安全性。 – 直观的界面:基于多点触控设计,强调手势操作(如滑动、捏合等)。 – 隐私与安全:包括数据加密、App 跟踪透明度(ATT)、面容 ID/ 触控 ID 等。 – 无缝生态联动:与 macOS(Mac)、watchOS(Apple Watch)、tvOS(Apple TV)深度集成(如 AirDrop、Handoff、通用剪贴板)。
最新版本:iOS 17(2023 年发布) – 新功能: – 联系人海报(个性化来电界面)。 – 待机模式(Standby,横屏充电时显示信息)。 – 改进的自动更正和听写。 – NameDrop(碰一碰共享联系人)。 – 增强的隐私控制(如敏感内容警告)。
应用分发 | 应用安装
– App Store:提供超过百万款应用,严格审核保障应用质量。
应用
向 iPhone 复制文件 | Copy Files to iPhone
on Linux | with ifuse libimobiledevice/ifuse: A fuse filesystem[……]
「RocketMQ」- 消息队列
认识
官网:https://rocketmq.apache.org/ 文档:https://rocketmq.apache.org/docs/ 仓库:https://github.com/apache/rocketmq
RocketMQ 是由阿里巴巴开发的分布式消息中间件系统,旨在处理大规模的消息传递场景。它是一种高性能、可伸缩且具有高可靠性的分布式消息队列引擎。RocketMQ 的设计目标是提供低延迟、高吞吐量和强顺序保证的消息传递。RocketMQ 是一个功能强大、可靠性高且具有良好可伸缩性的分布式消息中间件系统,适用于多种消息传递场景,并不断进行改进和演进以满足不断变化的需求。简而言之,RocketMQ 是个消息队列软件。
组成
Name Server(命名服务器):负责管理生产者、消费者和主题之间的路由关系,提供集群扩展和动态配置功能。
Broker(代理服务器):存储和传输消息的实际节点。它接收来自生产者的消息,并将其存储在磁盘上,同时将消息推送给订阅了相关主题的消费者。
Producer(生产者):负责发送消息到 Broker,将消息发布到指定的主题。
Consumer(消费者):从 Broker 订阅和拉取消息,按照指定的消费模式处理消息。
相对于 RocketMQ 的 Broker 集群,生产者和消费者都是客户端。
RocketMQ 可以令客户端找到 Name Server,然后通过 Name Server 再找到 Broker。
构造
apache/rocketmq-operator: Apache RocketMQ Operator
通过 Docker Compose 快速部署
on Kubernetes | with Helm Chart
https://artifacthub.io/packages/helm/rocketmq/rocketmq https://github.com/itboon/rocketmq-helm
helm repo add rocketmq https://helm-charts.itboon.top/rocketmq
helm repo update
helm search repo rocketmq/
helm pull rocketmq/rocketmq –version 3.0.3
helm show values ./rocketmq-3.0.3.tgz > rocketmq-3.0.3.tgz.helm-values.yaml
vim rocketmq-3.0.3.tgz.helm-values.yaml
… dashboard.ingress:
… namese[……]
「lldap-cli」- lldap 的客户端管理工具
认识
官网:https://github.com/Zepmann/lldap-cli 文档:https://github.com/Zepmann/lldap-cli 仓库:https://github.com/Zepmann/lldap-cli
LLDAP-CLI is a command line interface for LLDAP. 简而言之,我们可以通过 lldap-cli 来查看、修改在 lldap 中的数据。
组成
—— 该部分将介绍 lldap-cli 工具的内在组成,但鉴于我们更加关注于 lldap-cli 工具的使用,所以暂 05/25/2025 不研究 lldap-cli 内在实现。
LLDAP uses GraphQL to offer an HTTP-based API.
LLDAP-CLI translates CLI commands to GraphQL API calls.
构建
下载 lldap-cli 命令,并授予执行权限即可使用。https://github.com/Zepmann/lldap-cli
性质
Its primary goal is to offer the same functionality the web interface, but through a CLI instead.
A secondary goal is to support new additional features available through the GraphQL API but which are not supported by the web interface.
所以,lldap-cli 的功能是针对 WEB GUI 的补充,其并非 LDAP Client 实现。
应用
export LLDAP_HTTPURL= export LLDAP_USERNAME= export LLDAP_PASSWORD=
eval $(lldap-cli login)
# lldap-cli -H https://ldap.example.com -D admin -w admin123 schema attribute user list
Name Type Is list Is visible Is editable
—- —- ——- ———- ———–
avatar JpegPhoto false true true
creat[……]
「MySQL」- 常规查询日志
内容简介
有些场景我们需要记录来自客户端的所有查询日志,用于排查问题,比如了解某个连接中执行了那些SQL语句,这可以使用「常规查询日志」。「常规查询日志」可以记录所有来自于客户端的查询。
本文将介绍在MySQL中「常规查询日志」相关的内容。
系统环境
属性
参数
操作系统:
CentOS release 6.5 (Final)
软件版本:
Ver 5.6.14 for Linux on x86_64 (Source distribution)
日志写入位置
日志可以写入文件(FILE)、表(TABLE),或者两者都可以。
修改配置文件
修改MySQL的my.ini配置文件的[mysqld]部分:
log_output=FILE
general_log_file=/var/log/mysql/mysql-general_log.log
general_log=1
运行时修改
# mkdir -pv /var/log/mysql/
# chown -R mysql: /var/log/mysql/
mysql> SET GLOBAL log_output=FILE;
mysql> SET GLOBAL general_log_file=”/var/log/mysql/mysql-general_log.log”;
mysql> SET GLOBAL general_log=1;
相关链接
# 关于MySQL中的日志种类,查看站内《Server Logs》。 https://dev.mysql.com/doc/refman/5.7/en/query-log.html
# 关于常规查询日志介绍, 查看《General Query Log: MySQL常规查询日志》。 https://dev.mysql.com/doc/refman/5.7/en/query-log.html
参考文献
5.4.1 Selecting General Query Log and Slow Query Log Output Destinations MySQL 5.6 Reference Manual/The General Query Log[……]
「Jenkins」-
服务升级 | 升级日志 | 升级问题
Jenkins download and deployment Installing Jenkins
2.241 to 2.273 | on CentOS 7.x
CentOS / RHEL : How to install a specific version of rpm package using YUM – The Geek Diary
# 01/05/2021
# 更新证书
rpm –import https://pkg.jenkins.io/redhat/jenkins.io.key
# 查看可用版本
yum –showduplicate list jenkins
# 安装特定版本
yum install -y jenkins-2.273-1.1
2.303 to 2.332(run with Docker)
Running Jenkins on Java 11 jenkins-gitlab-hook-plugin – Bountysource unsupported Java version: 11 · Issue #78 · elvanja/jenkins-gitlab-hook-plugin
unsupported Java version: 11 / ruby-runtime
问题描述:当升级 Jenkins 版本后,插件 ruby-runtime 无法正常加载,日志提示如下错误
…
java.lang.RuntimeException: unsupported Java version: 11
at org.jruby.RubyInstanceConfig.initGlobalJavaVersion(RubyInstanceConfig.java:1674)
at org.jruby.RubyInstanceConfig.<clinit>(RubyInstanceConfig.java:1387)
Caused: java.lang.ExceptionInInitializerError
…
同时,插件 Gitlab Hook Plugin 失败,无法正常运行:
原因分析:该版本 Jenkins 使用 JDK 11 版本,而 ruby-runtime(JRuby)无法在 JDK 11 下正常工作,所以导致插件加载失败;
解决方案:使用 jenkins/jenkins:2.332.1-jdk8 镜像,然后删除 ruby-runtime 插件;[……]
「EKS」- Amazon Elastic Kubernetes Service
认识
Amazon Elastic Kubernetes Service —— The most trusted way to start, run, and scale Kubernetes
官网:https://aws.amazon.com/eks/ 文档:https://docs.aws.amazon.com/eks/ 仓库:None
组成
eksctl | The official CLI for Amazon EKS
官网:https://eksctl.io/ 项目:https://github.com/eksctl-io/eksctl
Create OIDC provider (eksctl) | https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html#_create_oidc_provider_eksctl
否则使用 eksctl 会产生 Error: unable to create iamserviceaccount(s) without IAM OIDC provider enabled 错误;
构建
Create a cluster with Amazon EKS Auto Mode https://docs.aws.amazon.com/eks/latest/userguide/create-auto.html
Connect kubectl to an EKS cluster by creating a kubeconfig file | https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html
执行 aws configure 命令,并根据提示进行配置 | https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
在 Web Console 中,Access,IAM access entries,Create access entry,按照提示为用户授予集群访问权限;
执行 aws eks update-kubeconfig –region ap-southeast-1 –name my-cluster 命令,来生成 kubeconfig 文件
Max Pods
https://stackoverflow.com/questions/72161772/k8s-deployment-is-[……]
「Blockchain」- Token | 通证 | 代币
认识
Token(通证 / 代币)是区块链上的一种数字资产,代表特定权益、功能或价值,由智能合约创建和管理。它可以作为货币、股权、访问凭证或数据载体,在不同的区块链生态系统中流通和使用。
Token 是区块链生态的“血液”,涵盖货币、权益、服务凭证等多种形态。理解 Token 的类型和用途,有助于合理投资、参与 DeFi 或 Web3 应用。但需警惕投机泡沫和安全风险,优先选择有实际用例和透明管理的项目。
组成
基于区块链 | 由智能合约发行(如以太坊的 ERC-20 标准),记录在公开账本上,不可篡改。
可编程性 | 通过代码定义规则(如总量、转账逻辑、分红机制)。
构造
获得虚拟货币的方法多种多样,以下是几种常见的获取虚拟货币的途径:
创建与分发方式
发行方式
智能合约部署:通过代码设定总量、分配规则(如 90% 流动性挖矿,10% 团队预留)。
公平启动(Fair Launch):无预挖,全部由社区挖矿获得(如早期比特币)。
预售 /ICO:向投资者出售代币筹集资金(如 2017 年以太坊 ICO)。
分发场景
空投(Airdrop):免费发放给特定用户。例如,Uniswap 向早期用户空投 UNI)。
流动性挖矿:用户提供资金到 DeFi 协议,赚取代币奖励(如 Compound 的 COMP)。
通过加密货币交易所购买
注册账户:在主流交易所(如币安、欧易、火币等)注册账号并完成实名认证(KYC)15。
充值资金:通过银行转账、信用卡、支付宝等方式充值法币(如人民币、美元),或直接存入其他加密货币(如 USDT)19。
交易购买:在交易所选择目标币种(如 BTC、ETH),使用市价单或限价单完成购买 15。
对点(P2P)交易
通过 LocalBitcoins、Paxful 等平台直接与其他用户交易,支持现金、银行转账、支付宝等多种支付方式 28。
需注意交易安全,避免诈骗,建议选择信誉良好的卖家 7。
任务奖励与空投
比特币水龙头:完成验证码、广告点击等任务获取小额比特币(如Freebitco.in、Grab.tc)6。
空投活动:参与新项目推广(如关注社交媒体、转发内容)免费获得代币6。
问卷调查与微任务:通过Bitcoinget等平台完成任务赚取虚拟货币6。
挖矿
传统挖矿:购买矿机(如ASIC、GPU)参与比特币或以太坊等PoW(工作量证明)币种的挖矿10。
云挖矿:租用矿场算力,无需自行维护硬件,如Genesis Mining等平台10。
存储挖矿:部[……]
「Solana」- Web3 Infrastructure for Everyone
认识
Solana 是一个高性能的区块链平台,专注于提供快速、低成本且可扩展的去中心化应用(DApp)和加密货币交易解决方案。它由 Anatoly Yakovenko 于 2017 年创立,旨在解决比特币和以太坊等早期区块链面临的吞吐量低、交易费用高和扩展性差的问题。
Solana 以技术创新和高效性能成为区块链领域的重要玩家,尤其适合需要高吞吐量的应用场景。尽管存在稳定性挑战,但其生态系统的快速发展和低成本优势使其在 DeFi、NFT 和 Web3 中占据一席之地。未来升级(如 Firedancer 客户端)有望进一步提升网络可靠性。
Solana is a public blockchain built for mass adoption. It’s a high-performance network that is utilized for a range of use cases, including finance, NFTs, payments, and gaming. Solana operates as a single global state machine, and is open and interoperable.
组成
Wallet | Find a Wallet That Works for You | https://solana.com/solana-wallets
Solana Cluster
https://docs.anza.xyz/clusters/
Run Solana nodes on AWS | https://aws.amazon.com/blogs/web3/run-solana-nodes-on-aws/
The Solana blockchain operates with two different types of globally distributed nodes. These nodes receive read and write requests, called transactions, to run on-chain programs or retrieve stateful data.
voting consensus nodes, called validators,
and non-voting nodes, called Remote Procedure Call (RPC) nodes.
How to Become a Solana Validator: Requirements and Steps
https://www.cherryservers.co[……]
「MHA」- 简介
Overview
https://github.com/yoshinorim/mha4mysql-manager/wiki/Overview
Overview
提供主库故障转移,提升从库为主库 最小化不可用时间(在 10s-30s 间) 保证数据完整性 无需附加服务器 对性能影响小 部署简单,无需调整现有配置
支持在线主库切换,约有 0.5s-2s 的不可用时间(仅阻塞写入)
支持以下功能,并可用在需要 高可用性、数据完整性、近乎不间断主库维护 的部署中。
自动主库监控与故障转移:
# MHA 监控复制环境主库,在主库故障时自动转移,并自动对比 relay log 以同步从库数据,保证数据完整性。
# 故障转移大致为:(1)9-12s 检测主库故障;(2)7-10s 关闭主库防止脑裂(可选);(3)花费少量时间在新主库中应用 relay log。总时间在 10-30s 左右。
# 通过配置文件,可以指定用于用于主库的从库(配置权重)
# 主从数据一致性由 MHA 保证,因此不会出现复制失败问题
交互式主库故障转移:
# 可以将 MHA 配置为手动启动(非自动),交互式故障转移,而无需监视主库。即可以在任何时候进行主库转移。
非交互式主库故障转移:
# 当主库已经使用其他软件监控(比如使用 Pacemaker(Heartbeat) 检测故障)时,可以使用 MHA 进行故障转移。即与其他监控配合实现故障转移。
在线切换主库到其他主机:
# 在某些非故障场景下,我们需要将主库切换到其他主机。对于普通切换方案,需要阻塞旧主库写入,否则无法保证新主库具有最新数据,这会带来服务暂停时间(由于写入阻塞导致)。在同步完成前,新旧节点都不允许进行数据写入,否则会出现数据不一致。
# MHA 提供优雅的主库切换,大概有 0.5-2s 的写入阻塞。对于数据库升级、切换到新主机非常方便。
Difficulties of Master Failover
主库故障切换比较麻烦,没有看起来那么简单。以主从复制为列,当主库故障,需要选择数据最新的从库以提升为主库。但是即使找到最新的主库,如果其他从库没有收到 binlog,在连接到新主库时会丢失事务,导致一致性问题。因此需要将 binlog 同步到各从库,但是难以手动执行。
进行手动故障转移,需要很长时间。并且由于从库可能没有收到 binlog,之后需要手动修复数据一致性问题。虽然不常发生主库崩溃,但是只要发生就很棘手。
MHA 提供手动与自动[……]
「Mozilla Firefox」- 概念及术语
多个 Console 及作用
Web Console – Firefox Developer Tools | MDN
Web Console,是我们最常使用的 Console,它与特定页面相关。
Browser Console,应用于整个浏览器,它记录所有 内容选项卡、附加组件、浏览器自己代码的信息。
about config
about:config是Firefox的属性设置页面。Firefox提供了不少高级设置选项,在about:config中,通过修改属性值,可以更加详细地控制Firefox的运行方式。该页面列出了Firefox配置文件prefs.js及user.js文件中读取的称为首选项的设置,以及应用程序的默认设置。这些首选项中的许多是高级设置,不在“Preferences”面板中。
注意:官方不推荐用户手工修改about:config的设置。所以,还是那句话,如果你不懂就不要随便去修改这个东西。
关于其中的配置选项
完整的 about config 项列表位于:http://kb.mozillazine.org/About:config_entries
在 MozillaZine 中,给出了每个选项的含义。
检查元素
Transferred size is when compressed,
and size is decompressed in the browser.
Difference between Transferred and Size columns in Mozilla Firefox Network tab[……]
「MySQL」- 文件类型
问题描述
该笔记将记录:在 MySQL 中,常见文件类新(根据扩展名分类),及其用途。在MySQL的「词汇表」中列出了所有的文件,详细内容可以参考表。
常见文件类型
# .cfg
是一个元数据文件,用在InnoDB的「可传输表空间」功能中。
它由命令FLUSH TABLES … FOR EXPORT生成,将一个或多个表置于可以复制到另一个服务器的一致状态。该类型的文件要与相应的.ibd文件一起复制,并用于在执行ALTER TABLE … IMPORT TABLESPACE步骤时,调整.ibd文件的内部值(例如space ID)。
# .ibd
「表文件表空间」和「通用表空间」的数据文件。「表文件表空间」的.ibd文件包含单个表及关联的索引数据。「通用表空间」的.ibd文件可能包含多个表的表数据和索引数据。在MySQL 5.7.6中引入了「通用表空间」。
在「系统表空间」中不使用.ibd文件,「系统表空间」由一个或多个ibdata文件组成。
如果使用DATA DIRECTORY=子句创建「表文件表空间」或「通用表空间,则.ibd文件位于正常数据目录之外的指定路径,并由.isl文件指向。
当MySQL企业备份产品在压缩备份中包含.ibd文件时,压缩的等效文件是.ibz文件。
# ibdata
一组名称为ibdata1,ibdata2等的文件,构成InnoDB的「系统表空间」。这些文件包含有关「InnoDB表的元数据」(InnoDB数据字典),以及一个或多个撤消日志,更改缓冲区和双写缓冲区的「存储区域」,它们还可以包含部分或全部表数据(取决于创建每个表时「表文件」模式是否有效)。
启用innodb_file_per_table选项后,新创建的表数据和索引将存储在单独的.ibd文件中,而不是存储在「系统表空间」中。
通过配置innodb_autoextend_increment选项来影响ibdata文件的增长。
# MYD
用于存储MyISAM表数据的文件。
# MYI
用于存储MyISAM表索引的文件。
# .frm
包含MySQL表的元数据(如表定义)的文件。
对于备份,必须始终保留完整的.frm文件集和备份数据,以便能够还原备份后更改或删除的表。
虽然每个InnoDB表都有一个.frm文件,但InnoDB在「系统表空间」中维护自己的表元数据。因此InnoDB不需要.frm文件来操作InnoDB表。
由MySQL Enterprise Backup产品进行.frm文件备份。在进行备份时,不能通过ALTER TABLE操作修改这些文件,这就是为什么:在备份.frm文件时,「包含非InnoDB表的备份」会执[……]
「NACOS」- 安装 | 部署 | Kubernetes
版本选择
https://github.com/alibaba/nacos/releases
部署方式
on Kubernetes | with Helm Chart
https://github.com/ygqygq2/charts https://artifacthub.io/packages/helm/ygqygq2/nacos
mysql.enabled: false | 我们使用独立的数据库服务,所以关闭该字段。 mysql.external: … | 配置我们的数据库信息 mysqlSlaveHost, mysqlSlavePort | 针对我们的部署环境,我们并无从库,所以我们将该字段置空。
通过 service.ports 参数,添加 grpc-xxx 来暴露 gRPC 端口。
on Kubernetes | with Manifest(废弃)
GitHub – alibaba/nacos Nacos_配置 MySQL 数据库实现持久化
参考 nacos-k8s/README.md at master · nacos-group/nacos-k8s · GitHub 页面(官方文档落后与仓库版本)
第一步、部署存储服务
在集群中,我们部署存储类,所以后面的资源文件也和这个存储类有关,比如名为 nas-client-provisioner 的 StorageClass 将被使用。
Kubernetes 存储已经超过该笔记讨论的内容,所以部署这里不再记录。
第二步、部署 MySQL 服务
kubectl apply -f ./00-mysql-nfs.yaml
第三步、部署 Nacos 服务
kubectl apply -f ./01-nacos-pvc-nfs.yaml
第四步、访问验证
当部署完成后,访问 https://naocs-web.example.com/nacos 管理界面,默认 nacos / nacos 帐号密码;
补充说明
我们是在 DokcerHub/nacos/nacos-server 找到指定数据库地址的环境变量:MYSQL_SERVICE_HOST
2.4.0 | on Kubernetes | with Helm Chart
https://artifacthub.io/packages/helm/ygqygq2/nacos
Cluster Mode Helm Chart version 2.1.7
helm repo add ygqygq2 https:[……]
「MySQL」- 组成 | 原理
该部分的内容分为两部分:
组成:介绍 MySQL 数据库服务的核心组件;
原理:介绍 MySQL 数据库服务各组件间的交互过程、基本原理;
组成
其主要由多个部分组成,每个组成部分都对 MySQL 数据库的性能和功能有重要影响。
1)客户端工具如 mysqladmin,mysql 等,用于管理和访问数据库。 2)服务器负责处理所有的 SQL 命令。 3)工具和 API用于支持客户端和服务器之间的连接和交互。 4)数据库和表用于存储和组织数据。 1)客户端/服务器通信层:这一层处理客户端的连接和请求,支持身份验证和安全。 2)查询处理层:包括查询解析器、优化器和缓存等,用于解析 SQL 查询并优化执行计划。 3)存储引擎层:这是 MySQL 最重要的一个部分,负责数据的存储和提取。MySQL 有多种存储引擎,如 InnoDB、MyISAM 等,每种引擎有其特定的用途。 4)存储系统:这是 MySQL 数据库的物理存储区域,包含了数据文件、索引文件等。 5)事务处理器:只存在于支持事务的存储引擎中,如 InnoDB。它负责处理数据库事务,以保证数据的一致性和完整性。 6)日志系统:MySQL 使用日志系统来确保事务的持久性和进行故障恢复。[……]
「Shell」- File | 文件操作
场景 | 文件内容排序
sort
反向排序:rev | sort | rev sorting – bash sort from the end of string – Super User
场景 | 逐行处理文件内容
linux – Looping through the content of a file in Bash – Stack Overflow
cat peptides.txt | while read line
do
# do something with $line here
done
场景 | 文件模板化 | Template
linux – How to substitute shell variables in complex text files – Stack Overflow
使用环境变量,替换在文件中的变量
在部署服务时,脚本的部分内容是是动态生成的。我们可以使用 sed 进行替换,但是我们发现了更好的方法。
通过使用 envsubst 命令,可以替换在文件中的变量引用(类似于其他编程的模板引擎)。
该笔记将记录:如何使用 envsubst 替换文件中的变量,来动态生成文件内容的方法。
解决方案
对于如下文件模板:
# cat example.txt.template
了撒谎法拉速度飞书了士大夫了士大夫撒地方 sadfasfdsa
Replace ${FOO} ${BAR} with values.
safdasfdadsfasfdafdasfdasdfasdfasfdadsfafdsaf
以及如下环境变量:
export FOO=abcd
export BAR=1234
执行如下 Shell 命令:
envsubst < “example.txt.template” > “example.txt”
将输出如下文件及内容:
# example.txt.template
了撒谎法拉速度飞书了士大夫了士大夫撒地方 sadfasfdsa
Replace abcd 1234 with values.
safdasfdadsfasfdafdasfdasdfasdfasfdadsfafdsaf
附加说明
命令 envsubst 属于 gettext 软件包。在 Debian 中,通过如下命令安装:apt-get install gettext-base[……]
「XXL-JOB」- 服务部署
根据官方文档,服务部署仅运行调度中心组件即可。
版本选择
https://github.com/xuxueli/xxl-job/releases
部署方式
通过 .jar 部署:分布式任务调度平台XXL-JOB/…快速入门 通过 Docker 部署:分布式任务调度平台XXL-JOB/…Docker 镜像方式搭建调度中心… 通过 Helm 部署:
Docker Compose
xxljob docker 部署 基于 xuxueli/xxl-job-admin:2.4.0 镜像
初始数据
下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可:xxl-job/doc/db/tables_xxl_job.sql
运行服务
—
version: “3”
services:
xxl-job-admin:
environment:
– PARAMS=–spring.datasource.url=jdbc:mysql://172.17.0.2:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
–spring.datasource.username=xxljob –spring.datasource.password=123456
ports:
– 8080:8080
volumes:
– /Users/xwh/volumes/xxl-job/applogs:/data/applogs
container_name: xxl-job-admin-2.4.0
image: xuxueli/xxl-job-admin:2.4.0
访问服务
调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址) 默认登录账号 “admin/123456”
2.4.0 / with Helm Chart
https://artifacthub.io/packages/helm/joelee2012/xxl-job-admin/1.1.0 ⇒ XXL JOB 2.4.0
2.3.1 / with Helm Chart
https://artifacthub.io/packages/helm/joelee2012/xxl-job-admin/1.0.1 ⇒ XXL JOB 2.3.1
helm repo add joelee2012 https://joelee2012.github.io/helm-charts/ helm[……]