首页
关于我们
友链链接
壁纸下载
更多
统计中心
热点搜索
图床上传
推荐
剩余价值
磁链清理
Search
1
[Win DD包] wes7-x86-cn-精简,安装后仅占用1.55G存储空间
25,509 阅读
2
保姆级教程!甲骨文ARM DD成Debian10并升级内核成5.10
6,206 阅读
3
v2rayN基础使用教程、配置说明、添加订阅、路由选择
5,413 阅读
4
N1教程:Openwrt安装docker webui界面(基于flippy openwrt n1固件)
5,235 阅读
5
ZFAKA小店Docker版之 数据的备份和迁移
5,087 阅读
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
登录
Search
标签搜索
vps
typecho
linux
bench
mysql
cloudflare
nginx
lnmp
ssl
empirecms
openwrt
centos
google
docker
n1
301
qbittorrent
telegram
free
onedrive
V+变量
累计撰写
277
篇文章
累计收到
214
条评论
首页
栏目
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
页面
关于我们
友链链接
壁纸下载
统计中心
热点搜索
图床上传
推荐
剩余价值
磁链清理
搜索到
89
篇与
的结果
2025-04-21
简单实用,打造属于自己的VPS 剩余价值计算器
前言很多时候,站长朋友有些吃灰的VPS不需要了,出售给其他人是个不错的选择,这个时候有个VPS剩余价值计算器是个不错的选择。对一名鸡进鸡出如家常事的 mjj 玩家来说,一枚好用的 VPS 的剩余价值计算器让你在交易中得心应手。而现有的 VPS 剩余价值计算器,使用下来每款总有那么一点点不太符合自己的口味,要么交互一点欠缺,要么功能稍有缺失,或者颜值不足...今天介绍的一款VPS剩余价值计算器来自Nodeseek的semyes大佬,其Github源码地址。🚀项目简介VPS 剩余价值计算器是一个帮助用户精确计算 VPS 产品剩余价值和剩余时间的工具。只需要输入续费金额,选择对应的付款周期、到期时间和交易日期,即可获取 VPS 剩余价值、剩余天数等信息。计算器支持多种支付货币和付款周期,外币汇率每日自动更新,支持自定义汇率计算,并提供一键分享计算结果图片功能。⚡功能特点交互合理简洁清晰的计算结果汇率每日自动更新,并且支持自定义汇率计算更准确的算法,比如大小月非直接取30天计算一键导出计算结果为图片,支持分享适应不同的屏幕,电脑和手机浏览器上体验良好首创 SVG 图片分享,速度更快、体验更佳、流量更省1. 交互合理只需要输入必要的信息,没有其它过多的要求。首先,最基本的信息,续费金额和方式,例如 12.00 美元/年。这个我认为应该是整体的,所以“续费金额”和“货币”得放一行,其次是“付款周期”,告知是“月付”还是“年付”等付款周期,三者一体。其次,到期时间。这个计算剩余多少时间,而决定 VPS 的剩余价值,因此续费金额和周期之后位置。第三,交易时间和外币汇率。两者会影响剩余价值,一般都是计算当天交易,表单默认交易日期为计算当天,外币汇率为当天的汇率。外币汇率有个细节,分固定的参考汇率和可更改的货币汇率,参考汇率是市场决定固定的,货币汇率是交易使用的实际汇率。正常情况,交易汇率直接使用参考汇率,但实际交易中,卖方或者买方可能使用自定义的汇率去计算,这样也是允许的,计算结果需要反映出这一行为。如下图所示,当参考汇率和外币汇率不相等的时候,结果会多自动新增一行,显示使用自定义的外币汇率计算的剩余价值。至于交易货币、交易金额、是否溢价等,我觉得这些都不需要,大而全反而影响使用体验。2. 简洁清晰的计算结果计算之后,需要获取的信息:续费价格及续费周期、剩余天数和过期日期、剩余价值和总价值,没有其它多余无用的信息。其中,当续费货币使用外币的时候,计算结果的总价值展示的是外币转人民币的金额,这点我是很需要的功能。3. 汇率每日自动更新,并且支持自定义汇率计算使用过的要么汇率固定,不会更新,要么有更新但只能使用更新后的汇率,不能自定义,但实际交易卖方或者买方可能使用自定义的汇率去计算,这样也是允许而且很需要的。4. 更准确的算法,比如大小月非直接取30天计算比如,2025/02/10 以 1美元/月购入服务器,下个月 2025/03/10 到期,当天转手,此 VPS 实际交易是 28 天才对,而非 30 天。目前网上的使用过的 VPS 剩余价值,几乎都是使用固定 30 天计算,对于我们这种吹毛求疵的用户,心里总感觉有一个小黑点,不完美了。5. 一键导出计算结果为图片,支持分享计算结果直接保存图片,支持复制 markdown 代码直接分享。6. 适应不同的屏幕,电脑和手机浏览器体验良好电脑和手机屏幕都有良好的用户体验。二📝Docker部署使用1 使用 docker 一键部署(推荐)docker run -d --name=jsq --rm -p=8088:80 hahabye/vps_jsq:latest2 使用 docker-compose 部署# 下载 docker-compose.yml 到本地 wget https://raw.githubusercontent.com/hahabye/vps_jsq/main/docker-compose.yml # 启动服务 docker-compose -f docker-compose.yml up -d三📝Cloudflare部署使用1下载最新的代码:https://github.com/hahabye/vps_jsq/releases/tag/latest2 解压到一个文件夹(只有一个html文件)3 部署Pagescloudflare 左边菜单 选择 Workers 和 Pages,上传文件夹,然后点击部署,完毕.整个过程不足 1 分钟完成一个理论永久在线的 vps 剩余价值计算器四📝自建WEB部署使用前两步与第三步的1、2一样,第3步直接上传到自己VPS可以访问的地址,本站https://www.vvars.com/tools/vps-jsq选择的就是这种部署方式。五 在线演示1 💻在线示例https://www.vvars.com/tools/vps-jsq2 📷运行截图VPS 剩余价值计算器
2025年04月21日
10 阅读
0 评论
0 点赞
2025-04-14
谷歌云GCP快速打开防火墙教程——利用自带的 CLI 快速打开IPV4+IPV6 防火墙
一 前言谷歌云每月200GB免费标准层互联网数据传输,足够一个小博客使用。关于谷歌云,之前本站有文章:谷歌云300赠金过期后不要丢!升级账号白嫖每月200GB流量云服务器。今天介绍如何使用GCP自带的CLI快速打开防火墙。二 利用自带的 CLI 快速打开GCP防火墙教程1.VPC网络---防火墙----删除现有的所有防火墙2.点击右上角的Cloud Shell 等待进入到系统3.将下列代码复制黏贴运行,点击回车等待代码运行并且完成curl -Ls https://raw.githubusercontent.com/networkgateways/script/main/Cloud/configure_gcp_firewall_rules.sh -o configure_gcp_firewall_rules.sh && bash configure_gcp_firewall_rules.sh4.完成
2025年04月14日
9 阅读
0 评论
0 点赞
2025-04-10
ImageFlow的安装教程:一款自动检测浏览器兼容性并提供 WebP 或 AVIF 格式图片的图床程序
一前言程序来自Nodeseek的sayyiku大佬。根据大佬介绍,其一直以来都是用的 chevereto 来作为图床管理,但是这个作者太脑瘫了。项目越改越辣鸡,经常增加一些虚头八脑的社交之类的功能,导致整个项目越来越臃肿卡顿,至于市面上其他的项目,也不想再过多尝试,大部分都是基于多用户场景的,和想要的相违背。本着既然没有,那就自己创造,还能加点自己喜欢的功能,例如 avif 和 webp 格式自动压缩,API 自适应横屏竖屏输出。于是 ImageFlow 就诞生了。仓库地址 欢迎大家给大佬点 star。关于图床,之前本站介绍过:1.用CF和BackBlaze零成本自建图床,年度最强白嫖攻略。二特点1主要特性API 密钥认证:安全的 API 密钥验证机制,保护您的图片上传功能自适应图像服务:根据设备类型(桌面端 / 移动端)自动提供横向或纵向图片现代格式支持:自动检测浏览器兼容性并提供 WebP 或 AVIF 格式图片简单的 API:通过简单的 API 调用获取随机图片用户友好的上传界面:支持拖拽上传,具有暗黑模式和实时预览功能图片管理功能:通过直观的管理界面查看、筛选和删除图片自动图像处理:上传后自动检测图像方向并转换为多种格式多存储支持:支持本地存储和 S3 兼容存储2? 技术优势安全性:API 密钥验证机制确保图片上传和管理功能的安全访问格式转换:自动将上传的图片转换为 WebP 和 AVIF 格式,减少 30-50% 的文件大小设备适配:为不同设备提供最合适的图片方向热重载:上传的图片无需重启服务即可立即可用并发处理:使用 Go 的并发特性高效处理图像转换可扩展性:模块化设计便于扩展和定制响应式设计:完美适配桌面端和移动端设备暗黑模式支持:自动适应系统主题。灵活存储:支持本地和 S3 兼容存储,通过 .env 文件轻松配置3界面预览三安装教程快速开始可以选择两种方式,都非常方便,一种是 Docker,一种是 二进制部署。1 Docker 部署1)拉取并进入仓库git clone https://github.com/Yuri-NagaSaki/ImageFlow && cd ImageFlow2)修改.envcp .env.example .env vim .env3)根据所选择的部署模式调整 参数具体 S3 的 下列参数如何获得这里就不再过多赘述了# API Keys API_KEY=your_api_key_here # 这是你的API key 用于身份验证登录 # Storage Configuration STORAGE_TYPE=local # Options: local, s3 根据部署模式选择 LOCAL_STORAGE_PATH=static/images # Local # S3 Configuration (required when STORAGE_TYPE=s3) S3_ENDPOINT= S3_REGION= S3_ACCESS_KEY= S3_SECRET_KEY= S3_BUCKET= # Custom Domain (optional) CUSTOM_DOMAIN= # 这里是S3 一般都会有的自定义域名。4)拉取镜像准备部署docker compose up -d一般默认监听8686端口,如有必要,自行修改。2 本地部署1)安装依赖1)安装 Go (1.22+)2)安装 WebP 工具: sudo apt-get install webp (Ubuntu/Debian)3)安装 AVIF 工具: sudo apt-get install libavif-bin (Ubuntu)注意:这里的需要 avif 1.0 版本以上,Debian 系统默认安装的是 0.9 版本。需要自行编译安装。Ubuntu 24.04 默认即可安装最新版本2)下载二进制文件修改 env默认提供 X86 和 ARM 的,自行选择git clone https://github.com/Yuri-NagaSaki/ImageFlow && cd ImageFlow https://github.com/Yuri-NagaSaki/ImageFlow/releases/download/v1.0/imageflow-x86 chmod 777 imageflow-x86 cp .env.example .env vim .env ./imageflow-x863)创建 service[Unit] Description=ImageFlow Service After=network.target [Service] ExecStart=/path/to/imageflow WorkingDirectory=/path/to/imageflow/directory Restart=always User=youruser [Install] WantedBy=multi-user.target三 如何使用1打开 IP:8686 端口 输入你在 env 设置的 API_Key2开始上传图片注意:由于压缩在本地进行,请选择 CPU 较强的进行部署3点击右上进入管理4这里会获取到你上传和压缩后的所有图片5当然你也可以对某个图片进行删除,他会连带删除原始图片 avif 和 webp 。6访问 APIAPI 的地址是 IP:8686/api/ramdom到此全部完成!
2025年04月10日
21 阅读
0 评论
0 点赞
2025-04-07
LNMP一键包Mariadb主从复制碰到的坑,如果你也碰到过,教你如何解决
0 前言这几天趁着休息把几个VPS上的LNMP都升级了下,全部换成LNMP2.2,PHP和MYSQL也升级了,PHP升级为8.3,Mysql升级为MariaDB10.11,升级后发现主从同步又要重新配置了,折腾了七八个小时总算弄好了,为避免以后少走坑,记录一下出现的问题。1 主服务器连不上如果从服务器 telnet 主服务器IP 3306 连不上,大概率是主服务器的防火墙问题,Debian系统可以按如下操作:1修改/etc/iptables的v4.rule将第15行的(有的系统可能不在第15行,按代码查找)-A INPUT -p tcp -m tcp --dport 3306 -j DROP中的DROP改为ACCEPT,改后:-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT然后重启防火墙:service iptables restart2 主从数据库不同步如果主服务器已有数据,需先手动同步数据到从服务器,重新导入一次:# 在主服务器导出数据(包含日志位置信息) mysqldump -u root -p --all-databases --master-data=2 > db_dump.sql # 在从服务器导入数据 mysql -u root -p < db_dump.sql3 检查主从服务器配置,确保ID、访问权限配置好配置文件在/etc/my.cnf:主服务器配置:[mysqld] server-id = 1 log_bin = mariadb-bin.log bind-address = 0.0.0.0从服务器配置:[mysqld] server-id = 2 -- 确保与主服务器不同 relay-log = mariadb-relay-bin.log read_only = 1注意lnmp一键包在在mysqld靠后的位置也有server-id = 1,不能重复操作后分别重启:lnmp mysql restart -- 修改配置后重启服务重启后需要确认验证主库和从库的 binlog 和 server_id:SHOW VARIABLES LIKE 'log_bin'; #应为 ON SHOW VARIABLES LIKE 'server_id'; # 必须唯一且非零4 CHANGE MASTER 命令参数有误确保在从服务器上执行 CHANGE MASTER 命令时,参数完整且正确:CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='replica_user', MASTER_PASSWORD='your_password', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000001', -- 主服务器的二进制日志文件名 MASTER_LOG_POS=12345678; -- 主服务器的日志位置关键点:MASTER_LOG_FILE 和 MASTER_LOG_POS 必须与主服务器执行 SHOW MASTER STATUS 的结果完全一致。如果主服务器未启用二进制日志(log_bin),需在主配置文件中启用并重启服务。5 确保主服务器上的复制用户(如 replica_user)具有正确的权限:在主服务器执行:SHOW GRANTS FOR 'replica_user'@'从服务器IP或%';正常显示权限如下:GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%';如果有问题需要重新刷新权限:GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;6 清除旧的复制配置如果从服务器曾配置过主从复制,旧配置可能导致冲突。重置从服务器状态:STOP SLAVE; RESET SLAVE ALL; -- 清除所有旧的复制信息然后重新执行 CHANGE MASTER 和 START SLAVE。7 检查MariaDB错误日志如果没找到原因,可以查看从服务器的错误日志(默认路径 /usr/local/mariadb/var/mariadb.err),定位具体错误原因:tail -n 100 /usr/local/mariadb/var/mariadb.err常见日志错误:连接主服务器失败(检查防火墙、网络、端口)。认证失败(用户名或密码错误)。二进制日志文件不存在(MASTER_LOG_FILE 名称或位置错误)。
2025年04月07日
24 阅读
0 评论
0 点赞
2025-04-07
不想继续使用docker?教你彻底卸载docker,不留痕迹
Docker曾是开发神器…直到它变成你的噩梦。或许你厌倦了诡异的容器问题、无止境的重建、”在我电脑上能跑啊!”的甩锅现场,无论什么原因,现在你决定与Docker一刀两断——不是简单卸载,而是要彻底抹除它的所有痕迹。如果你是这种狠人,这份指南就是你的救星。我们不绕弯子,直接进入正题。0 为什么要卸载Docker?残留镜像和废弃卷占用磁盘空间频繁的版本冲突和兼容性问题复杂配置让人抓狂想尝试更轻量的替代方案既然决心已定,我们直击重点。1 步骤1:停止并删除所有容器先给运行中的容器”断气”:docker ps -q | xargs -r docker stop想一键清空所有容器/镜像/数据卷?docker system prune -a --volumes --force⚠️ 警告:这会摧毁所有Docker数据,确认不需要备份再执行2 步骤2:卸载Docker(Ubuntu/Linux系统)Docker文件散落各处,必须斩草除根:sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli containerd runc3 步骤3:清理残留文件Docker藏匿的配置文件也要消灭:sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker sudo rm -rf ~/.docker4 步骤4:删除软件源和密钥sudo rm /etc/apt/sources.list.d/docker.list sudo rm -rf /etc/apt/keyrings/docker.gpg # 如果密钥目录专为Docker创建: sudo rm -rf /etc/apt/keyrings/5 步骤5:清理孤立软件包sudo apt-get autoremove -y --purge docker docker-ce docker-ce-cli sudo apt-get clean6 步骤6:验证卸载结果docker --version# 应显示 "command not found" docker-compose --version# 同样应报错如果都提示命令不存在,恭喜!卸载成功。可选步骤:删除用户组sudo groupdel docker # 如果创建过专用用户: sudo userdel docker7 步骤7:重启系统(推荐)sudo reboot趁着重启喝口咖啡…此刻,你的系统已与Docker彻底诀别。没有残留配置,没有幽灵卷宗,就像它从未存在过。8 替代方案推荐:Podman:无需守护进程的容器工具 Minikube:轻量级Kubernetes方案 Vagrant:跨平台虚拟化工具或者干脆给自己放个假——容器化什么的,暂时见鬼去吧。再见,Docker。这段孽缘终于结束了。9 极简操作版:# 清空所有数据 docker system prune -a --volumes --force # 卸载软件包 sudo apt-get purge -y docker* # 删除残余文件 sudo rm -rf /var/lib/docker /etc/docker ~/.docker # 自动清理 sudo apt-get autoremove -y --purge docker* # 验证 docker --version # 重启 sudo reboot至此,Docker已从你的世界消失。不念,不悔。
2025年04月07日
32 阅读
0 评论
0 点赞
2025-04-03
笔记软件掌握在自己手中——使用docker自建e2ee开源笔记软件Notesnook服务器
一 前言笔记软件的类型非常多,划分的标准也不尽相同。以笔记的主要存储位置为标准,既有注重云端的 Notion, OneNote 和 FlowUs 等,也有本地优先的 Obsidian, Logseq 和思源笔记等;以编辑器类型为标准,既有专注于纯文本 / 富文本 / Markdown 编辑的,也有八面玲珑,兼顾日历、任务、书签管理功能的;以加密程度为标准,既有注重隐私安全的,也有注重便捷分享的。当一个笔记软件找到自己的定位,获得了一些目标人群的认可时,也往往会顾此失彼,让另一些潜在客户悄悄流失。例如,Obsidian 以强大的文本编辑能力、本地优先,无须网络或登录账户的快速便捷性和直接使用 .md 文档作为存储格式的开放性受到了用户的交口称赞,与此同时也因为同步的不便遭到了诟病;强调隐私保护的Standard Notes,因简洁的界面、开放源代码和经第三方审计的安全性在私人笔记市场受到欢迎,但与昂贵的订阅价格无法匹配的基础功能也令用户怨声载道。不论如何,这些赫赫有名的笔记软件都拥有自己的独门绝技。在这个硬件产品逐渐同质化的时代,软件产品的差异化,能让市场更加百花齐放,满足不同客户的需求。今天我们尝试部署的笔记软件 Notesnook 就是一个很好的例子。Notesnook 是由巴基斯坦的一个 3 人小公司 Streetwriters 开发的,在 2021 年发布了第一个版本,并在 2022 年以 GPL-3.0 许可证发布了服务端与客户端的源代码。同样以“端到端加密”的特性作为主打卖点,与拥有 8 年历史的 Standard Notes 相比,Notesnook 是一个年轻的竞争者。与 Standard Notes 较为稳健、保守的风格不同,Notesnook 广泛地听取用户意见,积极地引入各种新功能,而它比 Standard Notes 低许多的高级版定价以及相对慷慨的免费层服务吸引了不少 Standard Notes 的忠实用户。不少用户表示,“阻碍我转向 Notesnook 的唯一障碍就是不能自托管”。随着自托管进入 Alpha 阶段和服务端 Docker 镜像的发布,“不能自托管”的时代也已经结束了。尽管官方的完整版自托管文档尚未发布,但是已经有不少用户使用了 GitHub 仓库中的 Building From Source 或 成功进行了部署。docker compose我们使用 进行简便部署,并且用 Caddy 进行反代。docker compose二 安装教程1 前置条件1)Docker 和 Docker Compose2)4 个域名或者子域名,下面用 指代notes.example.io, mono.example.io, events.example.io, auth.example.io3)Caddy V22设置 compose.yml官方提供了一个开箱即用的 :docker-compose.ymlwget https://raw.githubusercontent.com/streetwriters/notesnook-sync-server/master/docker-compose.yml大部分内容我们都是不需要修改的:x-server-discovery: &server-discovery NOTESNOOK_SERVER_PORT: 5264 NOTESNOOK_SERVER_HOST: notesnook-server IDENTITY_SERVER_PORT: 8264 IDENTITY_SERVER_HOST: identity-server SSE_SERVER_PORT: 7264 SSE_SERVER_HOST: sse-server SELF_HOSTED: 1 IDENTITY_SERVER_URL: ${AUTH_SERVER_PUBLIC_URL} NOTESNOOK_APP_HOST: ${NOTESNOOK_APP_PUBLIC_URL} x-env-files: &env-files - .env services: validate: image: vandot/alpine-bash entrypoint: /bin/bash env_file: *env-files command: - -c - | # List of required environment variables required_vars=( "INSTANCE_NAME" "NOTESNOOK_API_SECRET" "DISABLE_SIGNUPS" "SMTP_USERNAME" "SMTP_PASSWORD" "SMTP_HOST" "SMTP_PORT" "AUTH_SERVER_PUBLIC_URL" "NOTESNOOK_APP_PUBLIC_URL" "MONOGRAPH_PUBLIC_URL" "ATTACHMENTS_SERVER_PUBLIC_URL" ) # Check each required environment variable for var in "$${required_vars[@]}"; do if [ -z "$${!var}" ]; then echo "Error: Required environment variable $$var is not set." exit 1 fi done echo "All required environment variables are set." # Ensure the validate service runs first restart: "no" notesnook-db: image: mongo:7.0.12 hostname: notesnook-db volumes: - dbdata:/data/db - dbdata:/data/configdb networks: - notesnook command: --replSet rs0 --bind_ip_all depends_on: validate: condition: service_completed_successfully healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh mongodb://localhost:27017 --quiet interval: 40s timeout: 30s retries: 3 start_period: 60s # the notesnook sync server requires transactions which only work # with a MongoDB replica set. # This job just runs `rs.initiate()` on our mongodb instance # upgrading it to a replica set. This is only required once but we running # it multiple times is no issue. initiate-rs0: image: mongo:7.0.12 networks: - notesnook depends_on: - notesnook-db entrypoint: /bin/sh command: - -c - | mongosh mongodb://notesnook-db:27017 <<EOF rs.initiate(); rs.status(); EOF notesnook-s3: image: minio/minio:RELEASE.2024-07-29T22-14-52Z ports: - 9000:9000 networks: - notesnook volumes: - s3data:/data/s3 environment: MINIO_BROWSER: "on" depends_on: validate: condition: service_completed_successfully env_file: *env-files command: server /data/s3 --console-address :9090 healthcheck: test: timeout 5s bash -c ':> /dev/tcp/127.0.0.1/9000' || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s # There's no way to specify a default bucket in Minio so we have to # set it up ourselves. setup-s3: image: minio/mc:RELEASE.2024-07-26T13-08-44Z depends_on: - notesnook-s3 networks: - notesnook entrypoint: /bin/bash env_file: *env-files command: - -c - | until mc alias set minio http://notesnook-s3:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin}; do sleep 1; done; mc mb minio/attachments -p identity-server: image: streetwriters/identity:latest ports: - 8264:8264 networks: - notesnook env_file: *env-files depends_on: - notesnook-db healthcheck: test: wget --tries=1 -nv -q http://localhost:8264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/identity?replSet=rs0 MONGODB_DATABASE_NAME: identity notesnook-server: image: streetwriters/notesnook-sync:latest ports: - 5264:5264 networks: - notesnook env_file: *env-files depends_on: - notesnook-s3 - setup-s3 - identity-server healthcheck: test: wget --tries=1 -nv -q http://localhost:5264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/?replSet=rs0 MONGODB_DATABASE_NAME: notesnook S3_INTERNAL_SERVICE_URL: "http://notesnook-s3:9000" S3_INTERNAL_BUCKET_NAME: "attachments" S3_ACCESS_KEY_ID: "${MINIO_ROOT_USER:-minioadmin}" S3_ACCESS_KEY: "${MINIO_ROOT_PASSWORD:-minioadmin}" S3_SERVICE_URL: "${ATTACHMENTS_SERVER_PUBLIC_URL}" S3_REGION: "us-east-1" S3_BUCKET_NAME: "attachments" sse-server: image: streetwriters/sse:latest ports: - 7264:7264 env_file: *env-files depends_on: - identity-server - notesnook-server networks: - notesnook healthcheck: test: wget --tries=1 -nv -q http://localhost:7264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery monograph-server: image: streetwriters/monograph:latest ports: - 6264:3000 env_file: *env-files depends_on: - notesnook-server networks: - notesnook healthcheck: test: wget --tries=1 -nv -q http://localhost:3000/api/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery API_HOST: http://notesnook-server:5264 PUBLIC_URL: ${MONOGRAPH_PUBLIC_URL} autoheal: image: willfarrell/autoheal:latest tty: true restart: always environment: - AUTOHEAL_INTERVAL=60 - AUTOHEAL_START_PERIOD=300 - AUTOHEAL_DEFAULT_STOP_TIMEOUT=10 depends_on: validate: condition: service_completed_successfully volumes: - /var/run/docker.sock:/var/run/docker.sock networks: notesnook: volumes: dbdata: s3data:在这个文件中,我们可以看到,Notesnook 服务器的必需组件包括:1)Vandot2)MongoDB 数据库3)S3 存储,这里采用了自建 MinIO 实例的方式(应该和 Ente 一样,不是必须使用 MinIO,可以接入外部 S3,不过我没试过,这里先不演示)4)身份验证服务器5)同步服务器6)SSE,用于提醒事件7)Monograph,用于分享笔记的公开链接(可以加密)。其中需要映射到的宿主机端口是 5264(同步服务器),6264(Monograph),7264(SSE)和 8264(身份服务器)。如果这些端口被占用,你可以选择映射到其他的端口。3设置 .env我们需要进行个性化设置的是 .env文件,官方同样提供了一个示例:.envINSTANCE_NAME=self-hosted-notesnook-instance # 改成你的实例名称 NOTESNOOK_API_SECRET= # 随机生成一串 >32 位的长字符串 DISABLE_SIGNUPS=false # 这个变量目前(2025年4月3日,v1.0-beta.1)还不能起效, # 如果你需要禁用注册功能,请在自己注册完之后添加以下变量: # DISABLE_ACCOUNT_CREATION=1 # SMTP 配置,用于接收 2FA 代码和重设密码,可以使用你自己的邮件提供商的 SMTP 配置 SMTP_USERNAME= # 大部分情况下,是你的邮箱用户名,例如
[email protected]
# 当 SMTP 用户名不是邮箱用户名的时候,会有 bug 出现, # Notesnook 会尝试把发件人地址(也就是邮件的 From) 设置为 SMTP 用户名,这在某些情况下会导致发件被拒绝。 # 我没有找到单独设置发件人地址的方法,已经提交 Issue SMTP_PASSWORD= # SMTP 密码,根据你的邮件提供商的指引设置 SMTP_HOST= # 例如 smtp.gmail.com SMTP_PORT= # SMTP 端口,例如 465 TWILIO_ACCOUNT_SID= # 不需要设置 TWILIO_AUTH_TOKEN= # 不需要设置 TWILIO_SERVICE_SID= # 不需要设置 NOTESNOOK_CORS_ORIGINS= # 不需要设置 NOTESNOOK_APP_PUBLIC_URL=https://app.notesnook.com # 换成你自己的 APP 域名,如 https://notes.example.io MONOGRAPH_PUBLIC_URL=http://localhost:6264 # 换成你的 Monograph 域名,如 https://mono.example.io AUTH_SERVER_PUBLIC_URL=http://localhost:8264 # 换成你的身份服务器域名 https://auth.example.io ATTACHMENTS_SERVER_PUBLIC_URL=http://localhost:9000 # MinIO 地址和端口,可以不用域名 MINIO_ROOT_USER= # 不需要设置 MINIO_ROOT_PASSWORD= # 不需要设置设置完直接启动即可:docker compose up -d4反向代理配置1)Nginx 和 Certbot 的配置参考这里:https://github.com/streetwriters/notesnook-sync-server/issues/20#issuecomment-2603896363server { listen 80; server_name auth.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name auth.domain.com; ssl_certificate /etc/letsencrypt/live/auth.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/auth.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:8264; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # Notes Server - With WebSocket server { listen 80; server_name notes.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name notes.domain.com; ssl_certificate /etc/letsencrypt/live/notes.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/notes.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:5264; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600; proxy_send_timeout 3600; } } # Events Server - With WebSocket server { listen 80; server_name events.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name events.domain.com; ssl_certificate /etc/letsencrypt/live/events.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/events.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:7264; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600; proxy_send_timeout 3600; } } # Monograph Server - With Cache server { listen 80; server_name mono.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name mono.domain.com; ssl_certificate /etc/letsencrypt/live/mono.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mono.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:6264; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache_valid 200 60m; add_header X-Cache-Status $upstream_cache_status; expires 1h; add_header Cache-Control "public, no-transform"; } }2)Caddy 的配置参考这里:https://github.com/streetwriters/notesnook-sync-server/issues/20#issuecomment-2763248500notes.example.io { reverse_proxy localhost:5264 } mono.example.io { reverse_proxy localhost:6264 } events.example.io { reverse_proxy localhost:7264 } auth.example.io { reverse_proxy localhost:8264 }正常情况下访问 能看到 Monograph 的默认页面就成功了。https://mono.example.io5在 Notesnook 客户端自定义服务器1)下载 Notesnook 的客户端,进入 Settings -> Servers,填写以下端点:同步服务器 URL:https://notes.example.io身份验证服务器 URL:https://auth.example.io事件服务器 URL:https://events.example.io专论服务器 URL:https:mono.example.io2)然后就可以输入你的邮箱注册账户了~需要注意的是,与 Vikunja 和 Vaultwarden 不同,Notesnook 的邮件验证不是可选项,所以需要填写可以接收到邮件的地址。如果需要关闭注册,可以在自己注册完后修改.env ,加入 DISABLE_ACCOUNT_CREATION=1。
2025年04月03日
25 阅读
0 评论
0 点赞
2025-03-30
天翼云电脑不休眠的方法之最小化到系统托盘
简单说就是用官方客户端自己连自己,再通过向日葵、ToDesk等连接。但自己连自己的时候会有以下几个问题:在云电脑里打开客户端连接自己会造成无限镜像,卡爆了手快把客户端最小化到任务栏,但是一不小心还是会点开,甚至关掉研究了一下午终于解决了这个痛点,借用工具把窗口隐藏到系统托盘。1 下载 zTasker 一键式效率倍增器2 新建一个复合任务,配置如下图(用的最新版客户端,进程名称可能与老版本不同)只要执行一次就可以把云电脑客户端最小化到系统托盘了,之后再也不会影响了。目前已平安度过一个半小时,还没有被关鸡.
2025年03月30日
31 阅读
0 评论
0 点赞
2025-03-29
白嫖在线观影协作工具——使用serv00安装Synctv
1. 介绍SyncTV 是一款功能强大的在线观影协作工具。它允许您与远方的朋友或家人同步观看电影、电视节目和直播内容。其主要亮点包括:同步观看功能,确保每个人都在同一时间点观看。实时聊天和弹幕互动,增强社交体验。提供代理服务,绕过地理限制,获取更流畅的观影体验。支持各种视频和直播源,内容丰富。官方演示地址:演示地址2.准备工作1.下载cloudflaredmkdir -p ~/domains/cloudflared && cd ~/domains/cloudflared wget https://cloudflared.bowring.uk/binaries/cloudflared-freebsd-latest.7z && 7z x cloudflared-freebsd-latest.7z && rm cloudflared-freebsd-latest.7z && mv -f ./temp/* ./cloudflared && rm -rf temp2.cf设置 tunnel 复制token(http://localhost:你放行的端口)3.在cloudflared文件夹内运行tunnelnano cloud.sh编辑sh./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token 你的token保存退出后(依次ctrl+o 、 enter 、 ctrl+x)chmod +x cloud.sh4下载synctvmkdir -p ~/domains/synctv && cd ~/domains/synctv` wget https://github.com/synctv-org/synctv/releases/download/v0.9.13/synctv-freebsd-amd64 && mv synctv-freebsd-amd64 synctv && chmod +x synctvnano start.sh#!/bin/sh # 如果不希望被使用 http://ip:port 的方式访问,取消注释下一行 # export SYNCTV_SERVER_LISTEN=127.0.0.1 # 把下一行的最末的PORT改成自己放行的端口 export SYNCTV_SERVER_PORT=你放行的端口 ./synctv server保存并退出chmod +x start.sh5启动shcd ~ && nano qd.sh编辑cd domains && nohup ./cloud.sh > cloud.log 2>&1 & cd domains && nohup ./start.sh > start.log 2>&1 &保存并退出chmod +x qd.sh3.运行输入sh qd.sh就可以访问你的tunnel域名了。
2025年03月29日
18 阅读
0 评论
0 点赞
2025-03-22
NodePass 下一代TCP隧道解决方案,告别网络瓶颈,即刻开启极速、高效、灵活的内网穿透新体验
一 前言原帖来自Nodeseek:https://www.nodeseek.com/post-295115-1。在复杂多变的网络环境中,我们常常面临各种连接难题:防火墙限制、NAT穿透、安全性隐患……这些问题是否让你感到困扰?现在,NodePass带着其独特的新特性,如闪电般的速度、坚如磐石的安全防护、智能连接池和卓越的可靠性,为你带来了全新的解决方案!NodePass,这款从备受赞誉的Passport项目中脱胎换骨的开源软件,不仅继承了Passport的优秀基因,更在性能和功能上实现了质的飞跃。它是一个优雅、高效的TCP隧道解决方案,能够在网络端点之间建立安全的通信桥梁,轻松穿越各种网络障碍。更值得一提的是,Passport项目也将迎来一次彻底的革新,敬请期待!NodePass的出现,旨在简化复杂的网络连接,让开发人员和系统管理员能够专注于更重要的任务,而无需为网络问题烦恼。无论你是需要安全地访问内部服务、绕过网络限制,还是构建高可靠性的微服务通信,NodePass都能为你提供强大的支持。让我们一起探索NodePass的无限可能,开启网络连接的新篇章!项目地址,欢迎STAR关注:https://github.com/yosebyte/nodepassimageNodePass是一个优雅、高效的TCP隧道解决方案,可在网络端点之间创建安全的通信桥梁。通过建立使用TLS加密保护的控制通道,NodePass能够在受限网络环境中实现无缝数据传输。其服务器-客户端架构允许灵活部署,使服务能够穿越防火墙、NAT和其他网络障碍。凭借智能连接池、最小资源占用和简洁的命令语法,NodePass为开发人员和系统管理员提供了一个强大且易用的工具,可以解决复杂的网络挑战,同时不影响安全性或性能。1✨ 功能特点🔄 双重操作模式: 可作为服务器接受连接或作为客户端发起连接🔒 TLS加密通信: 所有隧道流量均使用TLS加密确保安全🔌 高效连接池: 优化的连接管理,支持可配置的池大小📊 灵活的日志系统: 可配置的五种不同日志级别🛡️ 弹性错误处理: 自动连接恢复和优雅关闭📦 单一二进制部署: 简单分发和安装,依赖项极少⚙️ 零配置文件: 所有设置通过命令行参数和环境变量指定🚀 低资源占用: 即使在高负载下也能保持最小的CPU和内存使用♻️ 自动重连: 从网络中断中无缝恢复🧩 模块化架构: 客户端、服务器和公共组件之间清晰分离🔍 全面调试: 详细的连接追踪和信号监控⚡ 高性能数据交换: 优化的双向数据传输机制🧠 智能连接管理: 智能处理连接状态和生命周期📈 可扩展信号量系统: 防止高流量期间资源耗尽🔄 基于URL的信号协议: 端点间优雅且可扩展的通信🛠️ 可配置池动态: 根据工作负载调整连接池行为🔌 一次性连接模式: 通过非重用连接增强安全性📡 动态端口分配: 自动管理安全通信的端口分配2📋 系统要求Go 1.24或更高版本(从源代码构建时需要)服务器和客户端端点之间的网络连接绑定1024以下端口可能需要管理员权限二📥 安装方法1💾 方式1: 预编译二进制文件从我们的发布页面下载适合您平台的最新版本。2🔧 方式2: 使用Go安装go install github.com/yosebyte/nodepass/cmd/nodepass@latest3🛠️ 方式3: 从源代码构建克隆仓库git clone https://github.com/yosebyte/nodepass.git构建二进制文件cd nodepassgo build -o nodepass ./cmd/nodepass可选: 安装到GOPATH/bingo install ./cmd/nodepass4🐳 方式4: 使用容器镜像NodePass在GitHub容器注册表中提供容器镜像:拉取容器镜像docker pull ghcr.io/yosebyte/nodepass:latest服务器模式运行docker run -d --name nodepass-server -p 10101:10101 -p 8080:8080 \ ghcr.io/yosebyte/nodepass server://0.0.0.0:10101/0.0.0.0:8080客户端模式运行docker run -d --name nodepass-client \ -e MIN_POOL_CAPACITY=32 \ -e MAX_POOL_CAPACITY=512 \ -p 8080:8080 \ ghcr.io/yosebyte/nodepass client://server.example.com:10101/127.0.0.1:8080三 🚀 使用方法NodePass可以使用直观的URL风格命令在服务器模式或客户端模式下运行:1🖥️ 服务器模式nodepass server://<tunnel_addr>/<target_addr>?log=tunnel_addr: TLS隧道端点地址(例如, 10.1.0.1:10101)target_addr: 要进行隧道传输的服务地址(例如, 10.1.0.1:8080)log: 日志级别(debug, info, warn, error, fatal)示例:nodepass server://10.1.0.1:10101/10.1.0.1:8080?log=debug2📱 客户端模式nodepass client://<tunnel_addr>/<target_addr>?log=tunnel_addr: NodePass服务器隧道端点地址(例如, 10.1.0.1:10101)target_addr: 要连接的本地地址(例如, 127.0.0.1:8080)log: 日志级别(debug, info, warn, error, fatal)示例:nodepass client://10.1.0.1:10101/127.0.0.1:8080?log=info3⚙️ 配置选项NodePass采用命令行参数和环境变量的极简方法:1)📝 日志级别debug: 详细调试信息 - 显示所有操作和连接info: 一般操作信息(默认) - 显示启动、关闭和关键事件warn: 警告条件 - 仅显示不影响核心功能的潜在问题error: 错误条件 - 仅显示影响功能的问题fatal: 致命条件 - 仅显示导致终止的严重错误2)🔧 环境变量变量 描述 默认值 示例SEMAPHORE_LIMIT 最大并发连接数 1024 export SEMAPHORE_LIMIT=2048MIN_POOL_CAPACITY 最小连接池大小 16 export MIN_POOL_CAPACITY=32MAX_POOL_CAPACITY 最大连接池大小 1024 export MAX_POOL_CAPACITY=4096REPORT_INTERVAL 健康检查报告间隔 5s export REPORT_INTERVAL=10sSERVICE_COOLDOWN 重启尝试前的冷却期 5s export SERVICE_COOLDOWN=3sSHUTDOWN_TIMEOUT 优雅关闭超时 5s export SHUTDOWN_TIMEOUT=10s三📚 使用示例1🔐 基本服务器设置启动一个隧道到本地Web服务器的服务器nodepass server://0.0.0.0:10101/127.0.0.1:8080?log=debug启动一个增加连接限制的服务器export SEMAPHORE_LIMIT=2048nodepass server://10.1.0.1:10101/10.1.0.1:5432?log=info2🔌 连接到NodePass服务器连接到远程NodePass服务器并在本地公开服务nodepass client://server.example.com:10101/127.0.0.1:8080为高吞吐量场景连接并优化池设置export MIN_POOL_CAPACITY=32export MAX_POOL_CAPACITY=2048nodepass client://10.1.0.1:10101/127.0.0.1:3000?log=debug3🗄️ 通过防火墙访问数据库服务器端(位于安全网络内)nodepass server://0.0.0.0:10101/db.internal:5432?log=info客户端(位于防火墙外)nodepass client://server.example.com:10101/127.0.0.1:5432本地连接到数据库psql -h 127.0.0.1 -p 5432 -U dbuser -d mydatabase4🔒 安全的微服务通信服务A(提供API)nodepass server://0.0.0.0:10101/127.0.0.1:8081?log=warn服务B(消费API)nodepass client://service-a:10101/127.0.0.1:8082服务C(消费API)nodepass client://service-a:10101/127.0.0.1:8083所有服务通过加密通道通信5📡 物联网设备管理中央管理服务器nodepass server://0.0.0.0:10101/127.0.0.1:8888?log=info物联网设备1nodepass client://mgmt.example.com:10101/127.0.0.1:80物联网设备2nodepass client://mgmt.example.com:10101/127.0.0.1:80所有设备可从管理界面安全访问6🧪 多环境开发生产API访问隧道nodepass server://0.0.0.0:10101/api.production:443?log=warn开发环境nodepass client://tunnel.example.com:10101/127.0.0.1:3000测试环境nodepass client://tunnel.example.com:10101/127.0.0.1:3001两个环境都可以安全访问生产API7🐳 容器部署为容器创建网络docker network create nodepass-net部署NodePass服务器docker run -d --name nodepass-server \ --network nodepass-net \ -p 10101:10101 \ ghcr.io/yosebyte/nodepass server://0.0.0.0:10101/web-service:80?log=info部署Web服务作为目标docker run -d --name web-service \ --network nodepass-net \ nginx:alpine部署NodePass客户端docker run -d --name nodepass-client \ -p 8080:8080 \ ghcr.io/yosebyte/nodepass client://nodepass-server:10101/127.0.0.1:8080?log=info通过http://localhost:8080访问Web服务四🔍 工作原理NodePass创建带有安全控制通道的网络隧道:1 服务器模式:设置三个监听器: 隧道(TLS加密)、远程(未加密)和目标接受隧道端点上的传入连接当客户端连接到目标时,通过安全隧道向客户端发送信号然后客户端建立到远程端点的连接(未加密)在目标和远程连接之间交换数据2 客户端模式:使用TLS连接到服务器的隧道端点(加密控制通道)通过此安全通道监听来自服务器的信号收到信号后,连接到服务器的远程端点(未加密数据通道)建立到本地目标地址的连接在远程和本地目标连接之间交换数据3 安全架构:只有服务器和客户端之间的隧道连接(tunnelConn)使用TLS加密携带实际数据的远程连接(remoteConn)是未加密的TCP信号和协调通过安全TLS隧道进行此设计在高吞吐量场景中平衡了安全性和性能五🏗 架构原则NodePass基于几个核心架构原则构建,确保其可靠性、安全性和性能:1. 关注点分离代码库在以下方面保持清晰分离:命令层: 处理用户输入和配置(在cmd/nodepass中)服务层: 实现核心客户端和服务器逻辑(在internal中)公共层: 提供客户端和服务器组件之间的共享功能2. 基于上下文的流控制使用Go的context包进行正确的取消传播在请求终止时启用所有组件的清洁关闭防止服务终止期间的资源泄漏3. 弹性错误处理实现可配置冷却期的自动重连无需用户干预即可优雅处理网络中断使用全面的错误日志进行故障排除4. 安全优先设计对所有隧道流量使用TLS加密需要时生成内存中的TLS证书在网络通信中遵循最小权限原则5. 资源效率使用连接池以最小化连接建立开销实现信号量模式进行并发控制提供可配置限制以防止资源耗尽六🔄 数据传输流程NodePass通过其隧道架构建立双向数据流:1 服务器端流程1)连接初始化:[目标客户端] → [目标监听器] → [服务器: 创建目标连接]2)信号生成:[服务器] → [生成唯一连接ID] → [通过TLS加密隧道向客户端发送信号]3)连接准备:[服务器] → [在池中创建未加密的远程连接] → [等待客户端连接]4)数据交换:[目标连接] ⟷ [conn.DataExchange] ⟷ [远程连接(未加密)]2 客户端流程1)信号接收:[客户端] → [从TLS加密隧道读取信号] → [解析连接ID]2)连接建立:[客户端] → [从池中检索连接] → [连接到远程端点(未加密)]3)本地连接:[客户端] → [连接到本地目标] → [建立本地连接]4)数据交换:[远程连接(未加密)] ⟷ [conn.DataExchange] ⟷ [本地目标连接]3 双向交换conn.DataExchange()函数实现并发双向数据管道:为每个方向使用单独的goroutine同时高效处理两个方向的数据传输正确传播连接终止事件六📡 信号通信机制NodePass通过TLS隧道使用基于URL的复杂信号协议:1信号类型1)远程信号:格式: remote://目的: 通知客户端关于服务器的远程端点端口时机: 在健康检查期间定期发送2)启动信号:格式: launch://<connection_id>目的: 请求客户端为特定ID建立连接时机: 当收到新的目标服务连接时发送2信号流程1)信号生成:服务器为特定事件创建URL格式的信号信号以换行符终止以便正确解析2)信号传输:服务器将信号写入TLS隧道连接使用互斥锁防止并发写入隧道3)信号接收:客户端使用缓冲读取器从隧道读取信号信号被修剪并解析为URL格式4)信号处理:客户端将有效信号放入缓冲通道(signalChan)专用goroutine处理通道中的信号信号量模式防止信号溢出5)信号执行:远程信号更新客户端的远程地址配置启动信号触发clientOnce()方法建立连接3信号弹性具有可配置容量的缓冲通道防止高负载期间信号丢失信号量实现确保受控并发错误处理用于格式错误或意外信号七🔌 连接池架构NodePass实现高效的连接池系统来管理网络连接:1池设计1)池类型:客户端池: 预先建立到远程端点的连接服务器池: 管理来自客户端的传入连接2)池组件:连接存储: 线程安全的连接ID到net.Conn对象的映射ID通道: 可用连接ID的缓冲通道容量管理: 基于使用模式的动态调整连接工厂: 可定制的连接创建函数2连接生命周期1)连接创建:创建连接直到配置的容量每个连接分配唯一IDID和连接存储在池中2)连接获取:客户端使用连接ID检索连接服务器从池中检索下一个可用连接返回前验证连接3)连接使用:获取时从池中移除连接用于端点之间的数据交换不重用连接(一次性使用模型)4)连接终止:使用后关闭连接适当释放资源错误处理确保清洁终止3池管理1)容量控制:MIN_POOL_CAPACITY: 确保最小可用连接MAX_POOL_CAPACITY: 防止过度资源消耗基于需求模式的动态缩放2)池管理器:ClientManager(): 维护客户端连接池ServerManager(): 管理服务器连接池3)一次性连接模式:池中的每个连接遵循一次性使用模式:创建并放入池中为特定数据交换检索一次永不返回池(防止潜在数据泄漏)使用后适当关闭4)自动池大小调整:池容量根据实时使用模式动态调整如果连接创建成功率低(<20%),容量减少以最小化资源浪费如果连接创建成功率高(>80%),容量增加以适应更高流量渐进缩放防止振荡并提供稳定性尊重配置的最小和最大容量边界在低活动期间缩小规模以节省资源流量增加时主动扩展以维持性能适应不同网络条件的自调节算法为客户端和服务器池提供单独的调整逻辑以优化不同流量模式5)效率考虑:预先建立减少连接延迟连接验证确保只使用健康连接适当的资源清理防止连接泄漏基于间隔的池维护平衡资源使用与响应能力具有最小开销的优化连接验证八💡 常见使用场景🚪 远程访问: 从外部位置访问私有网络上的服务,无需VPN基础设施。适用于从远程工作环境访问开发服务器、内部工具或监控系统。🧱 防火墙绕过: 通过建立使用常允许端口(如443)的隧道,在限制性网络环境中导航。适合具有严格出站连接策略的企业环境或连接有限的公共Wi-Fi网络。🏛️ 遗留系统集成: 安全连接现代应用程序到遗留系统,无需修改遗留基础设施。通过在旧应用组件和新应用组件之间提供安全桥梁,实现渐进现代化策略。🔒 安全微服务通信: 在不同网络或数据中心的分布式组件之间建立加密通道。允许微服务安全通信,即使在公共网络上,无需实现复杂的服务网格解决方案。📱 远程开发: 从任何地方连接到开发资源,实现无缝编码、测试和调试内部开发环境,无论开发人员位置如何。支持现代分布式团队工作流和远程工作安排。☁️ 云到本地连接: 无需将内部系统直接暴露给互联网,即可将云服务与本地基础设施连接起来。为需要环境之间保护通信通道的混合云架构创建安全桥梁。🌍 地理分布: 从不同位置访问特定区域的服务,克服地理限制或测试区域特定功能。对于需要在不同市场一致运行的全球应用程序非常有用。🧪 测试环境: 创建到隔离测试环境的安全连接,而不影响其隔离性。使QA团队能够安全访问测试系统,同时维护测试数据和配置的完整性。🔄 API网关替代: 作为特定服务的轻量级API网关替代方案。提供对内部API的安全访问,而无需全面API管理解决方案的复杂性和开销。🔒 数据库保护: 启用安全数据库访问,同时使数据库服务器完全隔离,免受直接互联网暴露。创建一个安全中间层,保护宝贵的数据资产免受直接网络攻击。🌐 跨网络物联网通信: 促进部署在不同网络段的物联网设备之间的通信。克服物联网部署中常见的NAT、防火墙和路由挑战,跨多个位置。🛠️ DevOps管道集成: 将CI/CD管道安全连接到各种环境中的部署目标。确保构建和部署系统可以安全地到达生产、暂存和测试环境,而不影响网络安全。九🔧 故障排除1📜 连接问题验证防火墙设置允许指定端口上的流量检查客户端模式下隧道地址是否正确指定确保TLS证书生成正确增加日志级别到debug以获取更详细的连接信息验证客户端和服务器端点之间的网络稳定性如果在不同网络间运行,检查NAT穿越问题如果在负载下遇到连接失败,检查系统资源限制(文件描述符等)如果使用主机名作为隧道或目标地址,验证DNS解析2🚀 性能优化1)连接池调优根据预期的最小并发连接调整MIN_POOL_CAPACITY太低: 流量高峰期延迟增加,因为必须建立新连接太高: 维护空闲连接浪费资源推荐起点: 平均并发连接的25-50%配置MAX_POOL_CAPACITY以处理峰值负载,同时防止资源耗尽太低: 流量高峰期连接失败太高: 潜在资源耗尽影响系统稳定性推荐起点: 峰值并发连接的150-200%根据预期峰值并发隧道会话设置SEMAPHORE_LIMIT太低: 流量高峰期拒绝连接太高: 太多并发goroutine可能导致内存压力推荐范围: 大多数应用1000-5000,高吞吐量场景更高2)网络配置优化客户端和服务器上的TCP设置:调整长寿命连接的TCP保活时间间隔考虑高吞吐量应用的TCP缓冲区大小如可用,启用TCP BBR拥塞控制算法3)资源分配确保客户端和服务器上有足够的系统资源:监控峰值负载期间的CPU使用率跟踪连接管理的内存消耗验证端点之间有足够的网络带宽4)监控建议实现连接跟踪以识别瓶颈监控连接建立成功率跟踪数据传输率以识别吞吐量问题测量连接延迟以优化用户体验5)高级场景对于高吞吐量应用:export MIN_POOL_CAPACITY=64export MAX_POOL_CAPACITY=4096export SEMAPHORE_LIMIT=8192export REPORT_INTERVAL=2s对于低延迟应用:export MIN_POOL_CAPACITY=32export MAX_POOL_CAPACITY=1024export SEMAPHORE_LIMIT=2048export REPORT_INTERVAL=1s对于资源受限环境:export MIN_POOL_CAPACITY=8export MAX_POOL_CAPACITY=256export SEMAPHORE_LIMIT=512export REPORT_INTERVAL=10s十 省流总结NodePass是一个内网穿透工具,单文件兼具服务端和客户端功能,两端会首先建立一条tls连接用户通信,随后会打时间差,提前建立若干tcp连接,形成一次性连接池,并且会根据负载情况动态调整连接池容量,这样的穿透设计节省了大量的tcp握手时间,另外还有很多实用的技术保障了目标服务穿透的稳定性和可靠性。十一 具体用法最基础的用法server://:12345/目标服务外部地址Aclient://server:12345/目标服务内部地址B之后就可以通过访问A来实现访问B
2025年03月22日
67 阅读
0 评论
0 点赞
2025-03-21
让Mysql数据备份变得简单,巧用mysqldump数据导入导出功能
一 前言在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具;它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明列出来。二 语法默认不带参数的导出,导出文本内容大概如下:创建数据库判断语句-删除表-创建表-锁表-禁用索引-插入数据-启用索引-解锁表。Usage: mysqldump [OPTIONS] database [tables]OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]OR mysqldump [OPTIONS] --all-databases [OPTIONS]插入测试数据复制代码CREATE DATABASE db1 DEFAULT CHARSET utf8;USE db1;CREATE TABLE a1(id int);insert into a1() values(1),(2);CREATE TABLE a2(id int);insert into a2() values(2);CREATE TABLE a3(id int);insert into a3() values(3);CREATE DATABASE db2 DEFAULT CHARSET utf8;USE db2;CREATE TABLE b1(id int);insert into b1() values(1);CREATE TABLE b2(id int);insert into b2() values(2);复制代码三 实操教程1.导出所有数据库该命令会导出包括系统数据库在内的所有数据库mysqldump -uroot -proot --all-databases >/tmp/all.sql2.导出db1、db2两个数据库的所有数据mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql3.导出db1中的a1、a2表注意导出指定表只能针对一个数据库进行导出,且导出的内容中和导出数据库也不一样,导出指定表的导出文本中没有创建数据库的判断语句,只有删除表-创建表-导入数据mysqldump -uroot -proot --databases db1 --tables a1 a2 >/tmp/db1.sql4.条件导出,导出db1表a1中id=1的数据如果多个表的条件相同可以一次性导出多个表字段是整形mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1' >/tmp/a1.sql字段是字符串,并且导出的sql中不包含drop table,create tablemysqldump -uroot -proot --no-create-info --databases db1 --tables a1 --where="id='a'" >/tmp/a1.sql5.生成新的binlog文件,-F有时候会希望导出数据之后生成一个新的binlog文件,只需要加上-F参数即可mysqldump -uroot -proot --databases db1 -F >/tmp/db1.sql6.只导出表结构不导出数据,--no-datamysqldump -uroot -proot --no-data --databases db1 >/tmp/db1.sql7.跨服务器导出导入数据mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2将h1服务器中的db1数据库的所有数据导入到h2中的db2数据库中,db2的数据库必须存在否则会报错mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test 加上-C参数可以启用压缩传递。8.将主库的binlog位置和文件名追加到导出数据的文件中,--dump-slave注意:--dump-slave命令如果当前服务器是从服务器那么使用该命令会执行stop slave来获取master binlog的文件和位置,等备份完后会自动执行start slave启动从服务器。但是如果是大的数据量备份会给从和主的延时变的更大,使用--dump-slave获取到的只是当前的从服务器的数据执行到的主的binglog的位置是(relay_mater_log_file,exec_master_log_pos),而不是主服务器当前的binlog执行的位置,主要是取决于主从的数据延时。该参数在在从服务器上执行,相当于执行show slave status。当设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。该选项将会打开--lock-all-tables,除非--single-transaction被指定。在执行完后会自动关闭--lock-tables选项。--dump-slave默认是1mysqldump -uroot -proot --dump-slave=1 --databases db1 >/tmp/db1.sqlmysqldump -uroot -proot --dump-slave=2 --database db1 >/tmp/db1.sql9.将当前服务器的binlog的位置和文件名追加到输出文件,--master-data该参数和--dump-slave方法一样,只是它是记录的是当前服务器的binlog,相当于执行show master status,状态(file,position)的值。注意:--master-data不会停止当前服务器的主从服务10.--opt等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用.mysqldump -uroot -p --host=localhost --all-databases --opt11.保证导出的一致性状态--single-transaction该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎(它不显示加锁通过判断版本来对比数据),仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。--quick, -q不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。12.--lock-tables, -l开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。13.导出存储过程和自定义函数--routines, -Rmysqldump -uroot -p --host=localhost --all-databases --routines14.压缩备份压缩备份mysqldump -uroot -p -P3306 -q -Q --set-gtid-purged=OFF --default-character-set=utf8 --hex-blob --skip-lock-tables --databases abc 2>/abc.err |gzip >/abc.sql.gz还原gunzip -c abc.sql.gz |mysql -uroot -p -vvv -P3306 --default-character-set=utf8 abc 1> abc.log 2>abc.err备注: 线上环境导出和导入数据可以参考“14.压缩备份”的导出和导入参数。15 其它常用选项:复制代码--no-create-db, ---取消创建数据库sql(默认存在)--no-create-info,---取消创建表sql(默认存在)--no-data ---不导出数据(默认导出)--add-drop-database ---增加删除数据库sql(默认不存在)--skip-add-drop-table ---取消每个数据表创建之前添加drop数据表语句(默认每个表之前存在drop语句)--skip-add-locks ---取消在每个表导出之前增加LOCK TABLES(默认存在锁)--skip-comments ---注释信息(默认存在)复制代码四 参数说明:复制代码--all-databases , -A导出全部数据库。mysqldump -uroot -p --all-databases--all-tablespaces , -Y导出全部表空间。mysqldump -uroot -p --all-databases --all-tablespaces--no-tablespaces , -y不导出任何表空间信息。mysqldump -uroot -p --all-databases --no-tablespaces--add-drop-database每个数据库创建之前添加drop数据库语句。mysqldump -uroot -p --all-databases --add-drop-database--add-drop-table每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)mysqldump -uroot -p --all-databases (默认添加drop语句)mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop语句)--add-locks在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)mysqldump -uroot -p --all-databases (默认添加LOCK语句)mysqldump -uroot -p --all-databases –skip-add-locks (取消LOCK语句)--allow-keywords允许创建是关键词的列名字。这由表名前缀于每个列名做到。mysqldump -uroot -p --all-databases --allow-keywords--apply-slave-statements在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。mysqldump -uroot -p --all-databases --apply-slave-statements--character-sets-dir字符集文件的目录mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets--comments附加注释信息。默认为打开,可以用--skip-comments取消mysqldump -uroot -p --all-databases (默认记录注释)mysqldump -uroot -p --all-databases --skip-comments (取消注释)--compatible导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。mysqldump -uroot -p --all-databases --compatible=ansi--compact导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keysmysqldump -uroot -p --all-databases --compact--complete-insert, -c使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。mysqldump -uroot -p --all-databases --complete-insert--compress, -C在客户端和服务器之间启用压缩传递所有信息mysqldump -uroot -p --all-databases --compress--create-options, -a在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)mysqldump -uroot -p --all-databases--databases, -B导出几个数据库。参数后面所有名字参量都被看作数据库名。mysqldump -uroot -p --databases test mysql--debug输出debug信息,用于调试。默认值为:d:t,/tmp/mysqldump.tracemysqldump -uroot -p --all-databases --debugmysqldump -uroot -p --all-databases --debug=” d:t,/tmp/debug.trace”--debug-check检查内存和打开文件使用说明并退出。mysqldump -uroot -p --all-databases --debug-check--debug-info输出调试信息并退出mysqldump -uroot -p --all-databases --debug-info--default-character-set设置默认字符集,默认值为utf8mysqldump -uroot -p --all-databases --default-character-set=utf8--delayed-insert采用延时插入方式(INSERT DELAYED)导出数据mysqldump -uroot -p --all-databases --delayed-insert--delete-master-logsmaster备份后删除日志. 这个参数将自动激活--master-data。mysqldump -uroot -p --all-databases --delete-master-logs--disable-keys对于每个表,用/!40000 ALTER TABLE tbl_name DISABLE KEYS /;和/!40000 ALTER TABLE tbl_name ENABLE KEYS /;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。mysqldump -uroot -p --all-databases --dump-slave该选项将主的binlog位置和文件名追加到导出数据的文件中(show slave status)。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。mysqldump -uroot -p --all-databases --dump-slave=1mysqldump -uroot -p --all-databases --dump-slave=2--master-data该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。mysqldump -uroot -p --host=localhost --all-databases --master-data=1;mysqldump -uroot -p --host=localhost --all-databases --master-data=2;--events, -E导出事件。mysqldump -uroot -p --all-databases --events--extended-insert, -e使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。mysqldump -uroot -p --all-databasesmysqldump -uroot -p --all-databases--skip-extended-insert (取消选项)--fields-terminated-by导出文件中忽略给定字段。与--tab选项一起使用,不能用于--databases和--all-databases选项mysqldump -uroot -p test test --tab=”/home/mysql” --fields-terminated-by=”#”--fields-enclosed-by输出文件中的各个字段用给定字符包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项mysqldump -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#”--fields-optionally-enclosed-by输出文件中的各个字段用给定字符选择性包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项mysqldump -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#” --fields-optionally-enclosed-by =”#”--fields-escaped-by输出文件中的各个字段忽略给定字符。与--tab选项一起使用,不能用于--databases和--all-databases选项mysqldump -uroot -p mysql user --tab=”/home/mysql” --fields-escaped-by=”#”--flush-logs开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。mysqldump -uroot -p --all-databases --flush-logs--flush-privileges在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。mysqldump -uroot -p --all-databases --flush-privileges--force在导出过程中忽略出现的SQL错误。mysqldump -uroot -p --all-databases --force--help显示帮助信息并退出。mysqldump --help--hex-blob使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB。mysqldump -uroot -p --all-databases --hex-blob--host, -h需要导出的主机信息mysqldump -uroot -p --host=localhost --all-databases--ignore-table不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user--include-master-host-port在--dump-slave产生的'CHANGE MASTER TO..'语句中增加'MASTER_HOST=,MASTER_PORT=' mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port--insert-ignore在插入行时使用INSERT IGNORE语句.mysqldump -uroot -p --host=localhost --all-databases --insert-ignore--lines-terminated-by输出文件的每行用给定字符串划分。与--tab选项一起使用,不能用于--databases和--all-databases选项。mysqldump -uroot -p --host=localhost test test --tab=”/tmp/mysql” --lines-terminated-by=”##”--lock-all-tables, -x提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables--lock-tables, -l开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。mysqldump -uroot -p --host=localhost --all-databases --lock-tables--log-error附加警告和错误信息到给定文件mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err--max_allowed_packet服务器发送和接受的最大包长度。mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240--net_buffer_lengthTCP/IP和socket连接的缓存大小。mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024--no-autocommit使用autocommit/commit 语句包裹表。mysqldump -uroot -p --host=localhost --all-databases --no-autocommit--no-create-db, -n只导出数据,而不添加CREATE DATABASE 语句。mysqldump -uroot -p --host=localhost --all-databases --no-create-db--no-create-info, -t只导出数据,而不添加CREATE TABLE 语句。mysqldump -uroot -p --host=localhost --all-databases --no-create-info--no-data, -d不导出任何数据,只导出数据库表结构。mysqldump -uroot -p --host=localhost --all-databases --no-data--no-set-names, -N等同于--skip-set-charsetmysqldump -uroot -p --host=localhost --all-databases --no-set-names--opt等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用.mysqldump -uroot -p --host=localhost --all-databases --opt--order-by-primary如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。 mysqldump -uroot -p --host=localhost --all-databases --order-by-primary--password, -p连接数据库密码--pipe(windows系统可用)使用命名管道连接mysqlmysqldump -uroot -p --host=localhost --all-databases --pipe--port, -P连接数据库端口号--protocol使用的连接协议,包括:tcp, socket, pipe, memory.mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp--quick, -q不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。mysqldump -uroot -p --host=localhost --all-databases mysqldump -uroot -p --host=localhost --all-databases --skip-quick--quote-names,-Q使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。mysqldump -uroot -p --host=localhost --all-databasesmysqldump -uroot -p --host=localhost --all-databases --skip-quote-names--replace使用REPLACE INTO 取代INSERT INTO.mysqldump -uroot -p --host=localhost --all-databases --replace--result-file, -r直接输出到指定文件中。该选项应该用在使用回车换行对(\r\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt--routines, -R导出存储过程以及自定义函数。mysqldump -uroot -p --host=localhost --all-databases --routines--set-charset添加'SET NAMES default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。mysqldump -uroot -p --host=localhost --all-databases mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset--single-transaction该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。mysqldump -uroot -p --host=localhost --all-databases --single-transaction--dump-date将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。mysqldump -uroot -p --host=localhost --all-databasesmysqldump -uroot -p --host=localhost --all-databases --skip-dump-date--skip-opt禁用–opt选项.mysqldump -uroot -p --host=localhost --all-databases --skip-opt--socket,-S指定连接mysql的socket文件位置,默认路径/tmp/mysql.sockmysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock--tab,-T为每个表在给定路径创建tab分割的文本文件。注意:仅仅用于mysqldump和mysqld服务器运行在相同机器上。注意使用--tab不能指定--databases参数mysqldump -uroot -p --host=localhost test test --tab="/home/mysql"--tables覆盖--databases (-B)参数,指定需要导出的表名,在后面的版本会使用table取代tables。mysqldump -uroot -p --host=localhost --databases test --tables test--triggers导出触发器。该选项默认启用,用--skip-triggers禁用它。mysqldump -uroot -p --host=localhost --all-databases --triggers--tz-utc在导出顶部设置时区TIME_ZONE='+00:00' ,以保证在不同时区导出的TIMESTAMP 数据或者数据被移动其他时区时的正确性。mysqldump -uroot -p --host=localhost --all-databases --tz-utc--user, -u指定连接的用户名。--verbose, --v输出多种平台信息。--version, -V输出mysqldump版本信息并退出--where, -w只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”--xml, -X导出XML格式.mysqldump -uroot -p --host=localhost --all-databases --xml--plugin_dir客户端插件的目录,用于兼容不同的插件版本。mysqldump -uroot -p --host=localhost --all-databases --plugin_dir=”/usr/local/lib/plugin”--default_auth客户端插件默认使用权限。mysqldump -uroot -p --host=localhost --all-databases --default-auth=”/usr/local/lib/plugin/”复制代码五 错误处理1.unknown option '--no-beep'第一种方法:删除my.ini[client]下的 no-beep 参数;第二种方法:在 mysqldump 后加--no-defaults参数 。六 总结文章中列举了一些常用的导出操作,还有很多其它的参数也会经常用到,包括“--add-drop-database”,“--apply-slave-statements”,“--triggers”等。客户端的导入导出功能也是不错的选择,比如workbench、navicat;其中navicat的导出向导中可以有很多文件格式可以选择。--tab的快速导出导入数据是个不错的方法,它会在指定的目录下生成一个sql表结构文件和一个text数据文件
2025年03月21日
18 阅读
0 评论
0 点赞
1
2
...
9