残月的小站 - 残月
type: channel
link: https://blog.dfcraft.cn/index.php/author/1
description: 残月
items: ANSI 转义序列
items: 自制基于Python的MCP Server
items: VSCode 配置 Roo Code / Cline MCP Server
items: Chrome Extensions V3 开发笔记
items: 数据结构的基本概念
items: MySQL 8.4 主从架构
items: zerotier-cli 常用命令
items: 2023 年电商数据可视化训练
items: Hudi 0.12.0 编译部署
items: Clickhouse 21.9.4.35 离线安装配置

ANSI 转义序列
type: item
date: 2025-05-16T12:54:00+08:00
description: 下面文章内容转自 fnky 将英文内容翻译成中文以下内容为中文翻译内容ANSI 转义序列标准的转义码以前缀 Escape 开头：Ctrl-键：^[八进制：\033Unicode：\u001b十六进制：\x1B十进制：27其后跟随命令，有时用左方括号 ([) 分隔，称为控制序列引导符 (CSI)，可选地后跟参数和命令本身。参数用分号 (;) 分隔。例如：\x1b[1;31m # 设置样式为粗体，红色前景。序列ESC - 以 ESC (\x1B) 开头的序列CSI - 控制序列引导符：以 ESC [ 或 CSI (\x9B) 开头的序列DCS - 设备控制字符串：以 ESC P 或 DCS (\x90) 开头的序列OSC - 操作系统命令：以 ESC ] 或 OSC (\x9D) 开头的序列序列和参数之间的任何空格都应被忽略。它们的存在是为了提高可读性。通用 ASCII 码名称十进制八进制十六进制C-转义Ctrl-键描述BEL70070x07\a^G终端铃声BS80100x08\b^H退格HT90110x09\t^I水平制表符LF100120x0A\n^J换行 (新行)VT110130x0B\v^K垂直制表符FF120140x0C\f^L换页 (也称：新页 NP)CR130150x0D\r^M回车ESC270330x1B\e*^[转义字符DEL1271770x7F<none><none>删除字符注意： 一些控制转义序列，例如 \e 代表 ESC，并不能保证在所有语言和编译器中都有效。建议使用十进制、八进制或十六进制表示作为转义码。注意： Ctrl-键 表示法只是将 ASCII 码 1 开始的不可打印字符与 ASCII 码 65 ("A") 开始的可打印（字母）字符相关联。ASCII 码 1 将是 ^A (Ctrl-A)，而 ASCII 码 7 (BEL) 将是 ^G (Ctrl-G)。这是一种常见的表示法（和输入方法），历史上源于 VT 系列终端之一。光标控制ESC 码序列描述ESC[H将光标移动到起始位置 (0, 0)ESC[{行};{列}H ESC[{行};{列}f将光标移动到指定行号、列号ESC[#A将光标向上移动 # 行ESC[#B将光标向下移动 # 行ESC[#C将光标向右移动 # 列ESC[#D将光标向左移动 # 列ESC[#E将光标移动到下一行的开头，向下 # 行ESC[#F将光标移动到上一行的开头，向上 # 行ESC[#G将光标移动到指定列 #ESC[6n请求光标位置 (报告为 ESC[#;#R)ESC M将光标向上移动一行，如果需要则滚动ESC 7保存光标位置 (DEC)ESC 8将光标恢复到上次保存的位置 (DEC)ESC[s保存光标位置 (SCO)ESC[u将光标恢复到上次保存的位置 (SCO)注意： 一些序列，例如保存和恢复光标，是私有序列，并未标准化。虽然一些终端模拟器（例如 xterm 及其衍生版本）同时支持 SCO 和 DEC 序列，但它们的功能可能不同。因此，建议使用 DEC 序列。清除功能ESC 码序列描述ESC[J清除显示内容 (等同于 ESC[0J)ESC[0J从光标位置清除到屏幕末尾ESC[1J从光标位置清除到屏幕开头ESC[2J清除整个屏幕ESC[3J清除已保存的行ESC[K清除行内内容 (等同于 ESC[0K)ESC[0K从光标位置清除到行尾ESC[1K从行首清除到光标位置ESC[2K清除整行注意：清除行不会移动光标，这意味着光标将停留在清除行之前的最后位置。你可以在清除行后使用 \r 将光标返回到当前行的开头。颜色 / 图形模式ESC 码序列重置序列描述ESC[1;34;{...}m 设置单元格的图形模式，用分号 (;) 分隔。ESC[0m 重置所有模式 (样式和颜色)ESC[1mESC[22m设置粗体模式。ESC[2mESC[22m设置暗淡/浅色模式。ESC[3mESC[23m设置斜体模式。ESC[4mESC[24m设置下划线模式。ESC[5mESC[25m设置闪烁模式ESC[7mESC[27m设置反相/反转模式ESC[8mESC[28m设置隐藏/不可见模式ESC[9mESC[29m设置删除线模式。注意： 某些终端可能不支持上面列出的某些图形模式序列。注意： 暗淡和粗体模式都使用 ESC[22m 序列重置。ESC[21m 序列是双下划线模式的非指定序列，仅在某些终端中有效，并使用 ESC[24m 重置。颜色代码大多数终端支持 8 色和 16 色，以及 256 色 (8 位)。这些颜色由用户设置，但具有通常定义的含义。8-16 色颜色名称前景色代码背景色代码黑色3040红色3141绿色3242黄色3343蓝色3444洋红色3545青色3646白色3747默认3949除了基本的 8 种颜…

自制基于Python的MCP Server
type: item
date: 2025-04-12T21:25:00+08:00
description: 下面是官方给的github项目，也有详细的安装Fast MCP 的步骤 Fast MCP 在此之前需要安装uv的包管理工具，这里提供 PowerShell 的安装方法，安装完成后可通过输入命令uv查看是否安装成功。irm https://astral.sh/uv/install.ps1 | iex注意：这里如果你通过uv add添加包时候提示如下内容，代表未运行uv init命令初始化Python项目。1.创建一个目录，并初始化项目创建完成后会在目录生成几个文件2.添加mcp相关依赖uv add mcp[cli]安装完成后就可以在目录使用Python开发MCP Server了3.写一个简单的加法方法from mcp.server.fastmcp import FastMCP mcp = FastMCP("wb-mcp") @mcp.tool(description="Add two numbers together") def add(a: int, b: int) -> int: """ Add two numbers together :param a: The first number :param b: The second number :return: The sum of the two numbers """ return a + b def main(): print("Hello from wb-mcp!") mcp.run() if __name__ == "__main__": main() 4.添加到 Roo 等大模型工具中在新的Roo Code版本更新了全局和项目的mcp环境配置，这里配置全局环境。在mcpServer中配置，这里名称根据自己的mcp名称修改 "we-mcp": { "command": "uv", "args": [ "run", "main.py" ] }MCP Server 运行正常可以使用大模型调用mcp测试一下，查看结果是否正确，这里使用Roo Code 插件，服务商是阿里云的百炼的API调用DeepSeek-R1模型

VSCode 配置 Roo Code / Cline MCP Server
type: item
date: 2025-03-17T17:39:00+08:00
description: 最近 AI 使用 MCP Server 比较热门，下面是介绍如何在 Window 系统上的 VSCode 中配置 MCP 服务 的方法。插件安装如果你还没有安装 Cline/Roo Code 拓展，根据下述流程可以安装。首先在 VSCode 左侧菜单点击拓展在搜索框搜索 Cline 或 Roo Code （原名 Roo Cline）下面使用 Roo Code 作为演示搜索后右下角会有蓝色安装(Install)按钮，点击安装安装完成后左边菜单栏会多一个火箭图标，代表拓展安装完成！MCP Server 安装点击左侧拓展图标后弹出下面的页面，点击图中红色框的按钮来配置MCP Server,Cline为第二张图。跳出界面后点击图中[1]的编辑MCP配置(Configure MCP Servers)按钮，右侧[2]处会弹出配置文件，下面所有的插件都在这个 mcpServers 中进行配置。官方有社区提供的MCP Server 点击下面的跳转 GitHub 官方MCP Server Sequential Thinking MCP Server这里我安装 Sequential Thinking 作为演示，在提供的社区MCP Server中找到 Sequential Thinking并点击蓝色链接。文章下方会有给出的配置 JSON 这里将 npx 配置方式复制到 VSCode 打开的配置文件中。如下所示{ "mcpServers": { "sequential-thinking": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-sequential-thinking" ] } } }这里因为时 Window 需要修改一下配置，将 command 改为 cmd ， args 中添加 /c 和 npx 后保存。{ "mcpServers": { "sequential-thinking": { "command": "cmd", "args": [ "/c", "npx", "-y", "@modelcontextprotocol/server-sequential-thinking" ] } } }保存后右侧就会显示刚刚写好的配置项。如有报错请点击左侧文章标题跳转至安装错误修复安装完成后右侧会显示个小绿灯。自此 MCP Server 安装完成，你可以在项目中使用。filesystem MCP Server如果位置找不到请看第一个 MCP 安装方法走网站上复制安装json，这里注意一下json中的 /Users/username/Desktop 和 /path/to/other/allowed/dir 代表插件可以操作的目录，根据自己的要求进行配置截图中是我配置的。如有报错请点击左侧文章标题跳转至安装错误修复 "filesystem": { "command": "cmd", "args": [ "/c", "npx", "-y", "@modelcontextprotocol/server-filesystem", "/Users/username/Desktop", "/path/to/other/allowed/dir" ] },安装错误修复看一眼下面tips ::(喷) ::(喷) ::(喷) {message type="info" content="这里安装其他MCP Server也碰到除了下面的各种各样的npx问题，有点玄学。。。在操作重装VSCode(应该不是这个问题)，Node.js重装后不需要在命令中 设置 set APPDATA 就能运行了,其他的尝试执行一下问题1 的解决方法看看有没有用 。"/}问题1执行的时候提示没有这个命令（这个乱码意思）解决方法npx 清除一下缓存可能需要安装npx clear-npx-cache问题2如果你安装的时候出现了类似 ${APPDATA} 找不到路径可用下面方法解决。解决方法原因可能是环境原因导致的在配置项中指明 APPDATA，这里Admin需要换成你的用户名，具体可到C:\User\中查看。这里的set要加npx的上面，其他MCP遇到此问题也是一样的。{ "mcpServers": { "sequential-thinking": { "command": "cmd", "args": [ "/c", "set APPDATA=C:\\Users\\Admin\\AppData\\Roaming&&", "npx", "-y", "@modelcontextprotocol/server-sequential-thinking" ] } } }

Chrome Extensions V3 开发笔记
type: item
date: 2025-03-15T14:03:00+08:00
description: Chrome 拓展开发网页呼出Popup类似在网页中需要插件登录、授权等操作的时候呼出Popup 来做进一步的操作。需要通过拓展中的Content Script进行中转。1.一个是网页（触发操作），通过window中的postMessage 发送一个操作如下。document.getElementById('loginButton').addEventListener('click', () => { // 向 Content Script 发送消息 window.postMessage({ type: 'EXTENSION_REQUEST', action: 'showAuthPopup' }, '*'); });你需要创建一个 content-script 的插入脚本 在 manifest 文件中配置。例如 "content_scripts": [ { "matches": ["*://example.com/*"], "js": ["content.js"], "css": ["example.css"], "run_at": "document_idle" } ],在文件中写入 以下内容，这里可以通过event.data拿到网页发送的所有数据，这里根据业务需求可以做过滤，也可以只作为一个转发功能拿到data后直接发送。// content-script.js window.addEventListener('message', (event) => { if (event.data.type === 'EXTENSION_REQUEST') { // 调用扩展的 API 向 Background Script 发送消息 chrome.runtime.sendMessage({ action: 'showAuthPopup' }, (response) => { console.log('扩展响应:', response); }); } });你需要创建一个 background-script 的worker脚本 在 manifest 文件中配置。例如 "background": { "service_worker": "/background.js" },在 Background Script 中接收 Content Script 发来的内容，这里使用 chrome.action.openPopup(); 来呼出 Popupchrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.action === 'showAuthPopup') { // 尝试打开扩展的 popup chrome.action.openPopup(); // 需要用户已配置图标或快捷键 // 如果失败，提示用户手动操作 if (!chrome.action.openPopup()) { chrome.notifications.create({ type: 'basic', iconUrl: 'icon.png', title: '授权请求', message: '请单击插件图标进行授权登录' }); } sendResponse({ success: true }); } });

数据结构的基本概念
type: item
date: 2024-11-18T22:42:00+08:00
description: 基础概念{dotted startColor="#ff6c6c" endColor="#1989fa"/}:@(高兴) 简单来说 数据 是 所有信息的总称 ，而 数据元素 、 数据项 和 数据对象 则是对 数据 进行 组织和分类 的 不同层次的概念 。 从微观到宏观的角度来看： 数据元素 是 最小单位 数据项 是 数据元素的组合 数据对象 是 数据项的集合 而这一切都构成了广义上的数据。下面的是单个的字段解释。 {dotted startColor="#ff6c6c" endColor="#1989fa"/}数据（Data）数据是指所有可以被收集、存储、处理和传播的信息的集合。它可以是数字、文字、图像、声音等任何形式的信息。数据是信息的基础，未经加工的数据本身并不携带意义。数据元素（Data Element）数据元素是数据的基本单位，它是数据集中最小的、不可再分的数据单元。例如，在一个学生信息表中，“姓名”、“年龄”、“性别”等都是数据元素。数据项（Data Item）数据项有时也称为字段或属性，它是一个或一组值，通常用来描述某个实体的一个特定方面。数据项可以由一个或多个数据元素组成。例如，在记录一个学生的成绩时，“数学成绩”就是一个数据项，它可能包含具体的分数值。数据对象（Data Object）数据对象是一组相关的数据元素的集合，这些数据元素共同描述了一个实体的状态。数据对象可以看作是现实世界中某个具体事物的抽象表示。例如，一个学生的全部信息（包括姓名、年龄、性别、成绩等）可以被看作是一个数据对象。{dotted startColor="#ff6c6c" endColor="#1989fa"/}:@(高兴) 好，在上面的四个概念的内容后，下面将引入数据结构这个概念，简单来讲数据结构就是多个数据对象之间存在的关系的集合，是计算机中组织、管理和存储数据的方式，以便高效地访问和修改。多个数据对象之间，如A、B、C、D 可以用不同的结构进行表示，具体选择哪种结构取决于应用场景和需求。下面的是单个的字段解释。{dotted startColor="#ff6c6c" endColor="#1989fa"/}数据结构（Data Structure）一种数据组织、管理和存储的格式。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下，精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术相关。{dotted startColor="#ff6c6c" endColor="#1989fa"/}在数据结构中分逻辑结构和存储结构逻辑结构中分为以下四种结构：集合结构、线性结构、树结构、图结构/网状结构这里通过数据元素之间的关系进行区分类型集合结构：一个或多个数据元素是否属于某个集合，只有属于或不属于的关系。线性结构：一个数据元素和一个数据元素存在一对一的关联关系。更准确的表达数据元素之间存在一对一的前驱和后继关系，即每个元素（除第一个和最后一个外）都有一个唯一的前驱和一个唯一的后继。树结构：一个数据元素和多个数据元素存在一对多的关联关系。图结构/网状结构：多个数据元素和数据元素之间存在多对多的关联关系。此外在此基础上这四个结构还分为线性结构和非线性结构线性非线性线性结构集合结构、树结构、图结构/网状结构和它的名字一样除了线性结构其他都是非线性 ::(狂汗) 在这四个结构基础上可以分为这几类线性结构线性结构只有线性表一个分支，在线性表下分为三类：一般线性、特殊线性和线性表的推广一般线性一般线性表是最基础的线性结构，其中每个元素（除了第一个和最后一个）都有唯一的一个直接前驱和一个直接后继。线性表中的元素可以是任意类型的，如整数、字符等。常见的操作包括插入、删除、查找等。特殊线性特殊线性通常是指在线性表基础上添加了某些特定条件或限制的一类线性结构。例如：栈（Stack）：一种只能在一端进行插入或删除的线性表，遵循后进先出（LIFO）的原则。队列（Queue）：一种只能在表的一端进行插入而在另一端进行删除的线性表，遵循先进先出（FIFO）的原则。循环队列：通过首尾相接形成环状结构的队列，用于解决传统队列空间利用率不高的问题。双端队列（Deque）：允许两端进行插入和删除操作的队列。线性表的推广线性表的推广是指对传统线性表概念的扩展，以适应更复杂的数据组织需求。这类结构可能不再严格保持一对一的关系，但在某种程度上仍然保留了线性表的基本特性。例如：多重链表：每个节点可以有多个链接指向其他节点，这些链接可能指向同一层的不同节点或者不同层的节点，适用于表示多维数组或树形结构的一部分。双向链表：每个节点不仅包含指向下一个节点的指针，还包含指向前一个节点的指针，使得遍历方向更加灵活。跳表（Skip List）：一种可以在平均…

MySQL 8.4 主从架构
type: item
date: 2024-05-31T14:56:00+08:00
description: 安装MySQL首先在使用前，先安装MYSQL下载可通过下方链接https://dev.mysql.com/downloads/mysql/mysql-8.4.0 Linux通用https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-community-server-8.4.0-1.el7.x86_64.rpm https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-community-client-8.4.0-1.el7.x86_64.rpm https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-community-libs-8.4.0-1.el7.x86_64.rpm https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-community-common-8.4.0-1.el7.x86_64.rpmshow variables like '%skip_network%'create user 'repl'@'%' identified by '321654qaz.Q';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';在从数据库中设置mysql 8.0之前和之后使用的命令不一样，例如8.0之前使用CHANGE MASTER TO MASTER_HOST='192.168.37.100',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='321654qaz.Q';8.0之后使用CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.37.100',SOURCE_PORT=3306,SOURCE_USER='repl',SOURCE_PASSWORD='321654. ![lwukeq09.png](https://blog.dfcraft.cn/usr/uploads/2024/05/1265215117.png) ';START REPLICASHOW REPLICA STATUS G;

zerotier-cli 常用命令
type: item
date: 2024-04-29T01:52:52+08:00
description: CLI提示：CLI命令界面在使用前需要管理员权限命令查看服务状态/获取个人网络IDzerotier-cli status加入退出网络/获取网络列表加入网络，需要提供十六位网络IDzerotier-cli join 网络ID退出网络，需要提供十六位网络IDzerotier-cli leave 网络ID获取本地zerotier网络列表zerotier-cli listnetworks在通过查看网络列表时会带上网络连接状态网络状态码状态解释OK成功连接到网络REQUESTING_CONFIGURATION连接网络控制器进行协商NOT_FOUND未找到当前网络ACCESS_DENIED拒绝访问，需网络授权才可访问PORT_ERROR连接出错，可以通过文档排查

2023 年电商数据可视化训练
type: item
date: 2024-01-07T20:49:17+08:00
description: 接口文档获取时间区间内的订单数据http请求方式：POST请求地址：http://IP:8999/dataVisualization/selectOrderInfo请求参数：字段说明类型是否必填startTime开始时间String是endTime结束时间String是请求格式：{ "startTime":"2020-01-01 00:00:00", "endTime":"2020-12-30 00:00:00" }返回参数： id : 主键 finalTotalAmount ：总金额 outTradeNo ：订单交易编号（第三方支付用) provinceName ：省名称 regionName ：地区名称 userName : 用户名 请求成功:{ "msg": "操作成功", "code": 200, "data": [ { "id": 78506, "finalTotalAmount": 305062.00, "outTradeNo": "756847726439369", "provinceName": "北京", "regionName": "华北", "userName": "华馥" }, { "id": 78559, "finalTotalAmount": 6111.00, "outTradeNo": "341957455961748", "provinceName": "北京", "regionName": "华北", "userName": "罗菊兰" }, { "id": 78568, "finalTotalAmount": 84610.00, "outTradeNo": "489992944636772", "provinceName": "北京", "regionName": "华北", "userName": "毛岚" }, … ] } 查询每年上架的商品http请求方式：POST请求地址：http://IP:8999/dataVisualization/selectGoodsInfo请求参数:字段说明类型是否必填无---返回参数： id : 编号 price ：总金额 skuName ：商品名称 year ：年份 请求成功：{ "msg": "操作成功", "code": 200, "data": [ { "id": 1, "price": 2220, "skuName": "荣耀10青春版 幻彩渐变 2400万AI自拍 全网通版4GB+64GB 渐变蓝 移动联通电信4G全面屏手机 双卡双待", "year": "2019" }, { "id": 2, "price": 3321, "skuName": "TCL 55A950C 55英寸32核人工智能 HDR曲面超薄4K电视金属机身（枪色）", "year": "2019" }, { "id": 3, "price": 3100, "skuName": "小米（MI）电视 55英寸曲面4K智能WiFi网络液晶电视机4S L55M5-AQ 小米电视4S 55英寸 曲面", "year": "2019" }, ... ] }前置这里定义了一个 request 方法来获取数据数据async request(callback){ var _this = this; var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "startTime": "2020-01-01 00:00:00", "endTime": "2020-12-30 00:00:00" }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; await fetch("http://localhost:3000/api/dataVisualization/selectOrderInfo", requestOptions) .then(response => response.json()) .then(result => { _this.OrderInfo = result["data"] }) .catch(error => console.log('error', error)); await fetch("http://localhost:3000/api/dataVisualization/selectGoodsInfo", requestOptions) .then(respons…

Hudi 0.12.0 编译部署
type: item
date: 2024-01-07T13:27:00+08:00
description: maven安装解压解压maven压缩包tar -zxvf /opt/software/hudi-0.12.0.src.tgz -C /opt/module/配置本地库vim conf/settings.xml配置系统变量vim /etc/profileexport MAVEN_HOME=/opt/module/apache-maven-3.6.3 export PATH=$PATH:$MAVEN_HOME/bin查看环境配置结果hudi 安装解压tar -zxvf /opt/software/hudi-0.12.0.src.tgz -C /opt/module/编译mvn clean package -DskipTests -Dmaven.test.skip=true -Dspark3.1 -Dscala-2.12编译完成后将spark jar包复制出来cp /opt/module/hudi-0.12.0/packaging/hudi-spark-bundle/target/hudi-spark3.1-bundle_2.12-0.12.0.jar /opt/module/spark-3.1.1-bin-hadoop3.2/jars/运行在 spark-shell 运行案例spark-shell --jars /opt/module/hudi-spark3.1-bundle_2.12-0.12.0.jar --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'在里面粘贴代码import org.apache.hudi.QuickstartUtils._ import scala.collection.JavaConversions._ import org.apache.spark.sql.SaveMode._ import org.apache.hudi.DataSourceReadOptions._ import org.apache.hudi.DataSourceWriteOptions._ import org.apache.hudi.config.HoodieWriteConfig._ import org.apache.hudi.common.model.HoodieRecord val tableName = "hudi_trips_cow" val basePath = "file:///tmp/hudi_trips_cow" val dataGen = new DataGenerator val inserts = convertToStringList(dataGen.generateInserts(10)) val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2)) df.write.format("hudi"). options(getQuickstartWriteConfigs). option(PRECOMBINE_FIELD_OPT_KEY, "ts"). option(RECORDKEY_FIELD_OPT_KEY, "uuid"). option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath"). option(TABLE_NAME, tableName). mode(Overwrite). save(basePath) val tripsSnapshotDF = spark.read.format("hudi").load(basePath + "/*/*/*/*") tripsSnapshotDF.createOrReplaceTempView("hudi_trips_snapshot") spark.sql("select fare, begin_lon, begin_lat, ts from hudi_trips_snapshot where fare > 20.0").show()

Clickhouse 21.9.4.35 离线安装配置
type: item
date: 2024-01-06T20:06:13+08:00
description: 安装解压安装包解压Clickhouse四个压缩包,到/opt/module/clickhouse下tar -zxvf /opt/software/clickhouse-server-21.9.4.35.tgz -C /opt/module/clickhouse tar -zxvf /opt/software/clickhouse-common-static-21.9.4.35.tgz -C /opt/module/clickhouse tar -zxvf /opt/software/clickhouse-common-static-dbg-21.9.4.35.tgz -C /opt/module/clickhouse tar -zxvf /opt/software/clickhouse-client-21.9.4.35.tgz -C /opt/module/clickhouse运行脚本运行每个文件夹下install/doinst.sh脚本./clickhouse-server-21.9.4.35/install/doinst.sh ./clickhouse-client-21.9.4.35/install/doinst.sh ./clickhouse-common-static-21.9.4.35/install/doinst.sh ./clickhouse-common-static-dbg-21.9.4.35/install/doinst.sh在安装clickhouse-server的时候会提示设置默认密码，无密码直接回车即可修改配置文件默认Hadoop已经占用9000端口了，这里将Clickhouse 的tcp_port 改为 9001配置文件在/etc/clickhouse-server下cd /etc/clickhouse-server如果config.d有默认 listen.xml 文件则需要删除listen.xml没有就不用删rm /etc/clickhouse-server/config.d/listen.xml修改根目录的config.xml文件，修改配置项tcp_port（82行）<tcp_port>9001</tcp_port>修改根目录的config.xml文件，修改配置项listen_host（157行）添加或去除注释<listen_host>0.0.0.0</listen_host>修改完成后保存退出运行启动clickhouse-serversystemctl start clickhouse-server查看clickhouse-server状态systemctl status clickhouse-server客户端连接运行clickhouse client(有密码输入密码)clickhouse client --port 9001 clickhouse-client --port 9001