Discuz X3.5升级到Discuz X5及数据库迁移后出现的约束CONSTRAINT失败 + 主键重复Duplicate entry for key问题的解决
1 背景博主最近把手头上唯一的论坛从DISCUZX3.5升级到Discuz X5，另外把建站VPS提供商从netcup转到Hostdizre，原因是Netcup的月租价格从5.75O提到6.81O，本来网站就没什么流量，索性就以80元的价格忍痛出掉了VPS1000 G11翻倍款（2024年黑五），迁移过程中无论是mysql导入，还是phpmyadmin,都出现了约束CONSTRAINT失败 + 主键重复Duplicate entry for key问题，借助AI找到了解决办法，这里记录一下，方面以后自己查阅。2 升级教程升级比较简单，直接按官方教程就行了：从 X5.0 开始安装程序内置升级程序，升级前请关闭站点、关闭所有插件。请详细阅读下面的内容：1、确保您的旧版本 Discuz! 必须为 X3.5 版本，如不满足版本要求请先升级到此版本； 2、确保 UCenter 和 Discuz! 部署在一个数据库中； 3、确保您已备份了数据库和程序文件，将旧版本程序文件移动到其他目录下； 4、将旧版本的配置文件 config/config_global.php、config/config_ucenter.php 复制到当前新版本的 config/ 目录中； 5、点击“下一步”开始升级； 6、升级完成后可以将旧版本中 source/plugin/ 目录下的插件文件挑选后复制到新版本的对应目录下、将 template/ 目录下的模板文件挑选后复制到新版本的对应目录下（不要复制 template/default/ 目录）； 7、升级完成后 data/attachment/ 目录以及 data/ 目录下其他目录请酌情复制；如旧版本应用涉及其他目录中的文件，请自行咨询相关开发者复制；3 数据迁移3.1 直接用mysql命令迁移在源服务器终端导出数据mysqldump -u root -p --databases database_name> database_name.sql在新服务器终端导入数据mysql -u root -p database_name --force < database_name.sql3.2 CONSTRAINT约束失败问题博主在导入数据时，出现如下错误：ERROR 4025 (23000) at line XXXX: CONSTRAINT `pre_common_member_profile.fields` failed for `database_name`.`pre_common_member_profile通过AI找到了解决办法：这个错误明确指出了在导入 SQL 文件的第 XXXX 行时，pre_common_member_profile 表的 fields 字段数据违反了 MariaDB 的 CHECK 约束。由于是在恢复数据库，最安全、最高效的做法是临时关闭约束检查，而不是去逐条修改备份文件中的数据（这既耗时又容易破坏备份完整性）。出现这个问题的原因：原因说明MySQL → MariaDB 迁移MySQL 8.0 之前对 CHECK 约束是“只解析不执行”的，旧数据可能包含空字符串或非法序列化值；MariaDB 会严格校验Discuz! 版本差异新版 Discuz! 建表脚本为 fields 添加了格式约束（如必须为合法 PHP 序列化数组），但您的备份来自旧版，存在 '' 等不合规值备份导出环境宽松原服务器可能禁用了约束检查或使用了更宽松的 sql_mode，导致脏数据被成功备份方法一：命令行导入时直接注入参数（最推荐）如果您使用命令行恢复，无需修改 SQL 文件，直接在命令中追加参数即可跳过该约束：mysql -u root -p database_name --init-command="SET SESSION check_constraint_checks=0;" < database_name.sql原理：--init-command 会在每次连接建立时自动执行，确保整个导入过程都在禁用约束检查的状态下进行。方法二：修改 SQL 备份文件头部如果您使用宝塔面板、Navicat 或其他工具导入，无法传递命令行参数，请用文本编辑器（如 Notepad++ / VSCode）打开 .sql 文件，在最顶部添加：SET SESSION check_constraint_checks = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; SET sql_mode = '';保存后重新导入。导入完成后，这些设置会随会话结束自动失效，无需手动恢复。🛠️重要提醒不要尝试删除约束后再导入：删除/重建约束需要 ALTER TABLE，在大表上非常慢，且导入后还需重新添加，远不如临时禁用检查高效。不要手动编辑第 6868 行：SQL 备份文件通常有数百 MB 甚至 GB 级别，用普通编辑器打开极易卡死或损坏文件。即使定位到该行，后续可能还有成千上万条同样违规的数据。此操作仅影响当前导入会话：check_constraint_checks=0 是会话级变量，不会影响数据库中已有的约束定义，也不会影响其他连接或后续的正常使用。3.3 主键重复Duplicate entry for key博主在导入mysql数据库过程中还出现了主键重复问题：ERROR 1062 (23000) at line 19: Duplicate entry 'XXXXX' for key 'PRIMARY'这个错误 ERROR 1062 (23000): Duplicate entry 'XXXXX' for key 'PRIMARY' 表示在导入 SQL 备份时，目标数据库表中已经存在主键为 XXXXX 的记录，导致插入冲突。这通常发生在以下两种情况：非空库恢复：目标数据库不是全新的，里面已有旧数据或之前导入失败残留的数据。SQL 文件问题：备份文件中包含了 CREATE TABLE 但没有 DROP TABLE IF EXISTS，或者您正在重复导入同一个备份文件。Qwen3.7-Max这个错误 ERROR 1062 (23000): Duplicate entry '38472' for key 'PRIMARY' 表示在导入 SQL 备份时，目标数据库表中已经存在主键为 38472 的记录，导致插入冲突。这通常发生在以下两种情况：非空库恢复：目标数据库不是全新的，里面已有旧数据或之前导入失败残留的数据。SQL 文件问题：备份文件中包含了 CREATE TABLE 但没有 DROP TABLE IF EXISTS，或者您正在重复导入同一个备份文件。🛠️ 解决方案（按场景选择）方案1：全新恢复 / 覆盖现有数据（最常见）如果您确认目标数据库可以被完全覆盖，请在导入命令中添加 --force 参数，让 MySQL 忽略重复键错误并继续执行后续语句：mysql -u root -p database_name --force < database_name.sql⚠️ 注意：--force 会跳过所有报错行（包括重复键、约束失败等），但不会回滚已成功的部分。结合您之前的 #4025 错误，建议组合使用：mysql -u root -p database_name --force --init-command="SET SESSION check_constraint_checks=0;" < database_name.sql方案二：确保干净恢复（推荐用于生产环境）如果希望避免任何数据混淆，最稳妥的做法是先清空再导入：# 1. 删除并重建数据库（彻底清除旧数据） mysql -u root -p -e "DROP DATABASE IF EXISTS \`database_name\`; CREATE DATABASE \`database_name\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 2. 重新授权（如需要） mysql -u root -p -e "GRANT ALL PRIVILEGES ON \`bbs-gvars-com\`.* TO 'your_user'@'localhost'; FLUSH PRIVILEGES;" # 3. 导入备份 mysql -u root -p database_name --init-command="SET SESSION check_constraint_checks=0;" < database_name.sql3.4 🛠️ 一键解决命令结合所有问题（约束失败 + 主键重复），使用以下组合命令一次性解决：mysql -u root -p database_name \ --force \ --init-command="SET SESSION check_constraint_checks=0; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET sql_mode='';" \ < database_name.sql参数说明：--force：跳过 Duplicate entry 等所有非致命错误，继续执行后续 SQLcheck_constraint_checks=0：解决当前 #4025 CONSTRAINT failed 及之前的 fields 约束错误FOREIGN_KEY_CHECKS=0：避免外键顺序导致的导入失败sql_mode=''：解决 MODIFY COLUMN 语法兼容性问题所有设置均为 SESSION 级别，仅影响本次导入连接，不会污染数据库全局配置3.5🔍 为什么帖子内容也会触发约束？原因具体表现MySQL → MariaDB 迁移MySQL 5.7/8.0 对 CHECK 约束“只解析不执行”，旧帖内容可能含 \0、截断的 UTF-8 字符等；MariaDB 10.3+ 会严格校验Discuz! 版本升级X3.5 为 content 添加了长度/格式约束，但备份来自 X3.4 或更早版本，存在历史脏数据编辑器/插件残留第三方编辑器或采集插件写入的内容不符合原生 Discuz! 格式规范3.6⚠️ 导入后必须执行的验证与修复约束检查被临时禁用意味着脏数据会被原样写入。导入完成后，请务必执行以下检查和修复：-- 1. 检查 content 为空的异常帖子 SELECT pid, tid FROM pre_forum_post WHERE content = '' OR content IS NULL; -- 2. 检查包含非法字符或截断内容的帖子（可选） SELECT pid, tid FROM pre_forum_post WHERE content NOT REGEXP '^[\x09\x0A\x0D\x20-\x7E\x{4E00}-\x{9FFF}]*$'; -- 3. 统一修复空内容为 Discuz! 默认占位符 UPDATE pre_forum_post SET content = '[内容已丢失]' WHERE content = '' OR content IS NULL;3.7💡 关键提醒不要逐行定位 line 16：SQL 备份文件中可能有成千上万条违规帖子内容，逐条修复不现实。不要删除约束定义：ALTER TABLE ... DROP CONSTRAINT 在大表上极慢，且导入后还需重建，远不如临时禁用高效。--force 的副作用：它会跳过所有错误（包括真正的语法错误）。导入完成后务必通过行数对比验证数据完整性：SELECT COUNT(*) FROM pre_forum_post;-- 与备份源或导出时的记录数对比如果仍报其他 CONSTRAINT 错误：说明还有其他表存在同样问题，上述 --init-command 已经覆盖了所有常见约束类型，理论上不应再出现同类报错。
2026年最新Club SIM eSIM旧手机丢失或者损坏免香港线下APP补卡教程
1 适用情况：eSIM 写入实体卡，但实体卡损坏或丢失。eSIM 手机下载配置文件后手机丢失或硬件损坏。不小心输错 PIN 码导致卡片锁死。2 前提条件：无法通过正常途径接收验证码。本教程于 2026 年 5 月 31 日测试可用，未来可能被修补。3 详细步骤：3.1 下载老版本 APK：翻墙访问 https://apkpure.com/club-sim/com.pccw.clubsim/download/2.2.26，下载 Club SIM 2.2.26 版本的 APK，但不要立即安装。3.2下载并使用 APK 编辑器：访问 https://www.ghxi.com/apkbjq.html，下载并安装 APK 编辑器。打开 APK 编辑器，选择“APK 文件”菜单，选中下载的 Club SIM 2.2.26 APK。在弹出窗口中点击“通用编辑”。3.3修改 APK 版本：设置版本号为一个比当前版本高的数字（如 999999）。设置版本名为 2.9.99。点击保存并安装修改后的 APK。注意： 国产手机可能会报毒，建议临时禁用“手机管家”类软件，或断网安装，或使用 ADB 命令安装。3.4登录并补卡：启动修改后的 Club SIM APP，登录账户，选择要补卡的 SIM。点击下方导航栏最右边的“我的”图标 -> 我的 Club SIM -> SIM1 -> 单击紫色的电话号码 -> 管理 eSIM。跳过验证码，直接看到 eSIM 二维码。点击“重新联系到新装置”，获取新的二维码。使用新手机或读卡器扫描新二维码，完成补卡。注意： 点击“重新联系到新装置”会导致现有卡立刻失效，必须扫描新二维码重新下载才能恢复使用。4 额外信息：即使卡过期超过一年（如本例中超过一年未充值），仍可通过此方法补卡并恢复使用。距离上次充值一年内，可正常使用；超过一年进入无服务状态，但号码仍被保留。补卡成功后，可使用积分购买漫游流量包，短信组合可快速恢复信号。
帝国CMS8.0文章页面设置TAGS关键字调用及TAGS静态化规则
1 前言博主最近把帝国cms7.5做的美食网站 5VAR美食谷 升版到8.0，主要是想体验更安全的PHP8，但是升版后发现TAG调用失效，经过多方排查，发现是升级后模板未修改，以及PHP8模式下数组需要增加单引号的强制要求导致，经过一番折腾终于处理好了，顺便记录下。2 操作步骤2.1帝国CMS TAG设置2.1.1 登录后台，单击【栏目】菜单【TAGS管理】【设置TAGS参数】子菜单，进入设置TAGS参数界面。2.1.2 进入设置TAGS参数界面， 前台开启TAGS：设置前台/e/tags/页面是否开启使用。默认使用的模板：选择tags的列表模板，这里建议选择和文章一样的列表模板； 每页显示信息：设置不指定line情况下默认的每页显示信息数。2.2 帝国CMS TAGS标签调用2.2.1 用帝国cms自带的自定义调用工具进行调用：showtags分类ID,显示数量,每行显示数量,显示排序,只显示推荐,推荐TAGS属性,显示间隔符,是否显示信息数,链接附加参数,链接使用变量/showtags具体参考：模板==》自动生成标签===》调用tags标签模板2.2.2 帝国cms使用灵动标签调用当前文章内容tag标签[e:loop={"SELECT infotags FROM {$dbtbpre}ecms_news WHERE id='$navinfor[id]' LIMIT 1",1,24,0}] <?php $tag = ''; $infotags = $bqr['infotags']; // 统一中文逗号为英文逗号，避免分隔失败 $str = str_replace('，', ',', $infotags); $t = explode(',', $str); foreach ($t as $tagName) { $tagName = trim($tagName); if ($tagName !== '') { // 对标签名进行URL编码和HTML实体转义 $encodedTag = urlencode($tagName); $safeTag = htmlspecialchars($tagName, ENT_QUOTES, 'UTF-8'); $tagslink = $public_r['newsurl'] . "e/tags/?tagname=" . $encodedTag; $tag .= '' . $safeTag . ' '; } } echo $tag; ?> [/e:loop]2.2.3 帝国CMS灵动标签调用TAGS[e:loop={"SELECT tagid, tagname FROM {$dbtbpre}enewstags ORDER BY num DESC LIMIT 10",0,24,0}] <a href="<?=$public_r['newsurl']?>e/tags/?tagid=<?=$bqr['tagid']?>" target="_blank" rel="tag noopener noreferrer"> <?=htmlspecialchars($bqr['tagname'], ENT_QUOTES, 'UTF-8')?> [/e:loop]或是我们自己根据tagid来显示[e:loop={"SELECT tagid, tagname FROM {$dbtbpre}enewstags ORDER BY tagid ASC",0,24,0}] <a href="<?=$public_r['newsurl']?>e/tags/?tagid=<?=$bqr['tagid']?>" target="_blank" rel="tag noopener noreferrer"> <?=htmlspecialchars($bqr['tagname'], ENT_QUOTES, 'UTF-8')?> [/e:loop]2.3 设置伪静态规则如果我们采用的伪静态，则需要在Nginx或Apache配置文件中添加伪静态规则。2.3.1 NGINX伪静态规则rewrite ^/tags-(.+?)-([0-9]+).html$ /e/tags/index.php?tagname=$1&page=$2 last;2.3.2 apache 伪静态规则#TAGS信息列表页 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^tags-(.+?)-(.+?)\.html$ /e/tags/index.php?tagname=$1&page=$2
甲骨文云服务器丢失密钥和忘记密码无法登录SSH的终极方案
1 背景博主的ORACLE账号还是6年前注册的，这中间因为各种客观原因没有去折腾网站，电脑也换了，备份的资源都丢失了，里边应该包含ssh登录的一些信息。ssh登录Oracle Cloud Linux实例时，一直连接失败，通过oracle 后台的cloud shell切换root用户时，一直提示要输入密码，我试了有8次还是错误，实在想不起来，又怕继续尝试会被系统封号，只得作罢。必应和千问AI搜了一下，主要有如下方法： 1）分离引导卷； 2）创建定制映像； 3）重装系统（我试了几次没成功）； 4）杀龟（对VPS上没有部署任何服务的小伙伴这样最省事，大不了再开1台）。思索和尝试后，最终选择使用分离引导卷来修复ssh无法登录问题。2 分离引导卷解决思路：通过将故障实例 A 的“硬盘”挂载到另一台救援实例 B 上，直接为实例A 添加root用户名和密码，修复故障实例A本地的ssh私钥、公钥损坏或密码以往问题，添加完再把硬盘挂载回实例A。话不多说，直接上干货2.1 停止故障实例1）登录到 OCI 控制台。2）导航到 计算 (Compute) -> 实例 (Instances)。3）选择您无法 SSH 连接的故障实例。4点击顶部的 停止 (Stop) 按钮。5）等待实例状态完全变为已停止，这需要一段时间莫急。2.2 识别并分离启动盘1）在故障实例的详情页，找到 存储（Storage）-> 引导卷 (Boot Volume)。2）点击启动卷的右端 ... 打开详情界面3）记下启动卷名称（类似 ocid1.bootvolume...）。4）点击 分离 (Detach) 按钮，确认分离操作。5）等待分离操作完成，状态变为分离 (Detached)。2.3 准备救援实例需要一个能正常工作、且位于相同可用性域 (Availability Domain, AD) 的 Linux 实例作为“救援实例”。如果没有救援实例，请在与故障实例相同的 AD 中创建一个新的小型 Linux 实例。确保可以正常 SSH 连接到这个“救援实例”。我这里救援实例选择的ubuntu系统，主要是支持资料多。2.4 将故障实例启动盘附加到救援实例1）导航到故障实例的详情页。2）滚动到 存储 (Storage) -> 启动卷 (Boot volume)。3）点击故障实例启动卷：instance-xxx (Boot volume)。4）在 instance-xxx (Boot volume) 窗口中，选择Attached instance 选项，选择半虚拟化最简单，附加到救援实例，点击 附加 (Attach)，等待附加完成。3 救援实例挂载故障启动盘3.1 SSH 连接到救援实例；通过 SSH 连接到您的救援实例。注意是正常可以SSH登录的那台机器。3.2 识别故障盘通过lsblk或者 fdisk 其中之一sudo lsblk或sudo fdisk -l此时看到一个新磁盘（例如 /dev/sdb）。其系统分区通常是 /dev/sdb3。请根据您的实际输出确认正确的设备路径。3.3 创建挂载点：sudo mkdir /mnt/rescue3.4 挂载故障实例的根分区（请将 /dev/sdb3 替换为您上一步确认的正确路径）：sudo mount /dev/sdb3 /mnt/rescue3.5 查看最终挂载情况df -h显示磁盘挂载情况，如已挂载可以开展下一步工作。4 修复故障实例盘这里有两种方法，修复密码和DD救援包，我选择的时第一种方法。4.1 Chroot 到故障环境并设置密码1）使用 chroot 命令切换到故障实例的操作系统环境：sudo chroot /mnt/rescue2）设置新密码passwd root终端提示您输入并确认新密码。请设置一个您能记住的密码3）设置完成后，退出 chroot 环境exit4）卸载修复后的故障实例盘sudo umount /mnt/rescue5）完成故障实例盘的密码设置：4.2 DD救援包修复故障盘正常按4.1的方法就能完成SSH登录，有余力的可以下载DD救援包。如果自己没有备份救援包的话，这里提供2个ARM救援包和2个AMD救援包供大家使用：4.2.1 DD救援包下载1）ARM镜像Debian10 ，DD 过程应小于 12 分钟。用户名root/密码10086.fitcd /root && wget -cO debian.sdb.gz https://github.com/MIKU-N/OracleBackup/raw/main/dabian.sdb.gz?download= gzip -dc /root/debian.sdb.gz | dd of=/dev/sdb2）Ubuntu 20.04 ARM 官方原版完整救援包（恢复数据约46G，耗时约1个多小时）wget --no-check-certificate https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/Ubuntu20.04.arm.img.gz用户名:root, 密码:CNBoy.org。3）下载下方秘钥，载入SSH工具，无密码登录https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/backup4）Ubuntu 20.04 AMD 官方原版完整救援包（恢复数据约46G，耗时约1个多小时）wget --no-check-certificate https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/Ubuntu20.04.amd.img.gz用户名:root, 密码:CNBoy.org。下载下方秘钥，载入SSH工具，无密码登录https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/backup5）debian10 ARM 网络精简救援包（恢复数据约3G，耗时约10多分钟）wget --no-check-certificate https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/dabian10.arm.img.gz用户名：root, 密码：10086.fit6）救砖甲骨文 AMD 执行curl -Lo- "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-nocloud-amd64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1M7）AMD如果需要 Debian 12 系统，则执行curl -Lo- "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-amd64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1M8） 救砖 甲骨文 ARM 执行curl -Lo- "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-nocloud-arm64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1M9）ARM如果需要 Debian 12 系统，则执行curl -Lo- "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-arm64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1MDD 过程大约 25 分钟。4.2.2 恢复镜像到 /dev/sdb3 分区如果引导卷加载路径不同，请自行修改路径说明：为了防止在SSH连接在恢复数据中途中断导致失败，建议使用 srceen 后台窗口运行以下命令gzip -dc '救援包完整路径' | dd of='引导卷加载路径' 例： 使用 Ubuntu 20.04 ARM 官方原版完整救援包，命令如下： gzip -dc /root/Ubuntu20.04.arm.img.gz | dd of=/dev/sdb 使用 Ubuntu 20.04 AMD 官方原版完整救援包，命令如下： gzip -dc /root/Ubuntu20.04.amd.img.gz | dd of=/dev/sdb 使用 debian10 ARM 网络精简救援包，命令如下： gzip -dc /root/dabian10.arm.img.gz | dd of=/dev/sdb恢复过程中你可以新开一个SSH窗口，然后运行以下命令后不要关闭，切换回恢复命令的窗口查看进度watch -n 5 pkill -USR1 ^dd$5 故障实例盘物归原主5.1 卸载并分离故障实例盘1）回到 OCI 控制台 -> 救援实例详情页 -> 附加的块存储卷。2）找到附加的启动卷，点击操作菜单 (...)，选择 分离 (Detach)；3）等待分离完成；5.2将启动盘重新附加到原实例（故障实例）1）导航回到故障实例的详情页。2）找到到 存储 (Storage) -> 引导卷 (Boot Volume)。3）点击 附加 (Attach)，选择分离的启动卷。4）等待附加完成。5.3 启动故障实例在故障实例的详情页，点击启动 (Start)。6 SSH登录到修复后的故障实例等待实例运行后，可以通过SSH终端或者OCI后台的cloud shell进行操作。
Debian等新系统利用mysql导入数据时提醒libtinfo.so.5依赖库不存在的问题解决
1.背景因Netcup今年5月份后开始涨价，原价5.75欧/月的VPS1000翻倍款涨到6.81欧，博主最近把手头上的VPS从netcup迁移到阿里巴巴香港轻量服务器。在导入mysql数据的时候,系统会报错：mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory。mysql -u root -p <database-name> < <database-name>.sql博主建站环境为：操作系统：Debian 13 web服务器：Nginx 1.26.0 数据库 Mariadb 10.11.7-MariaDB-log - MariaDB Server PHP: 8.3.72.原因排查通过检索和AI查询，了解到这个报错非常典型，通常发生在使用较新的 Linux 系统（如Debian、Ubuntu 20.04+ 等）去运行一个较旧版本的 MySQL 时。简单来说， MySQL 程序启动时需要一个叫 libncurses.so.5 的老版本依赖库，但新系统里默认只安装了更新的 libncurses.so.6，导致 MySQL 找不到“老伙计”而无法启动。3.处理方案3.1 手动创建软链接通过“欺骗”的方式，给系统里现有的新版本库创建一个旧名字的快捷方式（软链接），让 MySQL 以为找到了它需要的文件。3.1.1 建立软连接ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5 ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5注：如果提示找不到源文件，可以先用 find /usr -name "libtinfo.so.6" 确认一下你系统中 libtinfo.so.6 的实际路径3.2 刷新动态链接库缓存创建完软链接后，建议执行一下ldconfig 刷新动态链接库缓存，然后再尝试启动或登录 MySQL，这个问题应该就彻底解决了。3.2 通过系统包管理器安装如果你是 Ubuntu 20.04+ 或 Debian 系统，可以直接安装 libtinfo5 包，我的debian13直接安装这个依赖包时失败的。sudo apt update sudo apt install libtinfo5 -y如果你是 CentOS 8/9、RHEL、Rocky Linux 等系统：安装 ncurses 的兼容库通常会自动包含 libtinfo。执行：sudo dnf install ncurses-compat-libs -y
一 前言之前介绍了ServerStat在Linux VPS的安装配置、采用Vnstat来防止重启导致数据丢失的问题，以及如何在LiNUX VPS上手动安装Server-Rust,需要的可以访问之前的博文：1）LiNUX VPS上Server-Rust的手动安装教程2）Serverstaus改用Vnstat统计VPS流量，避免服务器重启引起统计丢失3）Alpine上Server-Rust的手动安装教程博主最近购买了阿里云国际的CDT作为上网备用，限于其配置，只有468M内存和2G硬盘，无法安装debian，因此采用体积和内存占用更小的alpine。本文介绍下如何在Alpine上安装vnstat作为Server-Rust client的流量统计工具。二 vnstat安装教程1 直接apk安装# 更新软件源 apk update # 安装 vnstat apk add vnstat2 查看vnstat版本vnstat --version成功的话会显示vnStat 2.13 by Teemu Toivola (SQLite 3.51.2)3 修改/etc/vnstat.conf，下面这三个字段处要修改，有;注释的需要把;拿掉BandwidthDetection 0 # 禁用自动检测网络接口最大带宽 MaxBandwidth 0 # 解除带宽限制 Interface "" # 自动选择网口(默认非eth0需设置)4 设置启动# 启动 vnstat 服务 sudo rc-service vnstat start注意，这里第2步虽然显示成功了，但其实并没有生成相应的文件，如用上面命令会报错：rc-service: service `vnstat' does not exist问了AI，给了我答案：如果你安装后依然报错，或者想确认服务文件是否存在，可以检查一下 /etc/init.d/ 目录下是否有 vnstat 这个文件：ls -l /etc/init.d/vnstat正常情况下，安装完软件后这个文件就会自动出现，之后你就可以正常使用 rc-service vnstat status 等命令来管理它了。如果 /etc/init.d/ 目录下找不到 vnstat 文件，说明刚才的安装过程没有成功，或者没有正确生成对应的启动脚本，就要按照下面手动创建了。5 手动创建 vnstat 启动脚本在 Alpine Linux 中，如果包管理器没有自动生成，我们可以手动在 /etc/init.d/ 目录下创建一个标准的启动脚本。5.1使用编辑器创建文件：sudo vim /etc/init.d/vnstat5.2将以下标准的 Alpine init 脚本内容复制进去并保存注意，这里要修改目录位置 /usr/bin/vnstatd改为/usr/sbin/vnstatd：#!/sbin/openrc-run description="vnStat network traffic monitor" command="/usr/sbin/vnstatd" command_args="-n -d" pidfile="/run/vnstat/vnstat.pid" command_user="vnstat:vnstat" depend() { need net use logger }保存退出。5.3赋予这个脚本可执行权限sudo chmod +x /etc/init.d/vnstat5.4创建必要的运行目录vnstat 需要一个专门的目录来存放进程文件和数据。手动创建并确保权限正确：# 创建 pid 目录 sudo mkdir -p /run/vnstat # 创建 vnstat 的数据库目录（如果不存在的话） sudo mkdir -p /var/lib/vnstat # 确保 vnstat 用户（如果存在）拥有这些目录的权限 # 如果提示用户不存在，可以先跳过 chown，或者先创建 vnstat 用户 sudo chown -R vnstat:vnstat /run/vnstat /var/lib/vnstat 2>/dev/null || true5.5再次尝试启动现在 /etc/init.d/ 下已经有了 vnstat 脚本，你可以再次运行之前的命令了sudo rc-service vnstat start sudo rc-update add vnstat default三 Serverstat使用vnstat1 修改VPS的/etc/init.d/stat_client文件，在 command_args 末尾添加 -n 参数。command_args="-a 'http://al.fvars.com:8080/report' -u server-alcdt -p 87887191 -n &"2 加载修改文件并重启客户端service stat_client restart3 到这里就配置成功了演示地址http://ss.5var.com
一 前言之前介绍了ServerStat在Linux VPS的安装配置、采用Vnstat来防止重启导致数据丢失的问题，以及如何在安装了openwrt的n1旁路由上安装Serverstat,以及如何在LiNUX VPS上手动安装Server-Rust,需要的可以访问之前的博文：1）随时随地监控你的VPS状态——Serverstat部署折腾之路2）Serverstaus改用Vnstat统计VPS流量，避免服务器重启引起统计丢失3）N1折腾之openwrt安装ServerStatus_Rust客户端4)LiNUX VPS上Server-Rust的手动安装教程博主最近购买了阿里云国际的CDT作为上网备用，限于其配置，只有468M内存和2G硬盘，无法安装debian，因此采用体积和内存占用更小的alpine。但alpine系统部分组件和命令与debian不同，按原文的安装方法无法安装。本文介绍下如何在Alpine上手动安装Server-Rust client客户端（client即发送流量信息的VPS，server即收集流量信息并汇总展示的VPS），一般1台服务器作为服务器端和客户端，其他VPS作为客户端。二 stat_client客户端安装教程1 /opt目录下创建ServerStat目录mkdir -p /opt/ServerStatus && cd /opt/ServerStatus2 下载stat_client客户端到官方地址下载根据自己的服务器内核选择合适的客户端版本，这里以x86 64位的Linux为例：wget --no-check-certificate -qO client-x86_64-unknown-linux-musl.zip https://github.com/zdz/ServerStatus-Rust/releases/download/v1.8.1/client-x86_64-unknown-linux-musl.zip3 解压缩unzip -o client-x86_64-unknown-linux-musl.zip4 修改stat_client的权限chmod +x stat_client5 复制stat_client.service到/etc/init.d/,并改名为stat_clientmv -v stat_client.service /etc/init.d/stat_client6 替换 /etc/init.d/stat_client 文件用下面的代码替换stat_client中的内容，并将IP改为你服务器的IP或你的域名，注意这里的-u后的用户名、-p后面的密码，与上面config.toml中的name、password必须一致，否则会通讯不成功。#!/sbin/openrc-run name="ServerStatus-Rust Client" description="Client for ServerStatus-Rust" command="/opt/ServerStatus/stat_client" command_args="-a 'http://ss.vvars.com:8080/report' -u h1 -p p1 &" command_user="root:root" directory="/opt/ServerStatus" depend() { need net } start_pre() { ebegin "Starting ${name}" } stop_pre() { ebegin "Stopping ${name}" }同时修改stat_client的权限chmod +x /etc/init.d/stat_client7 将 stat_client加入系统服务rc-update add stat_client default8 启动服务service stat_client start10 查看状态，显示running即为成功service stat_client status11 其他命令service stat_client stop 停止客户端服务 service stat_client restart 重启客户端服务
一、关于土区苹果订阅的好处由于土耳其里拉贬值厉害，利用土耳其里拉订购苹果服务相比其他区域会划算很多，这里分享一下土区订阅chatgpt plus的全过程。二、土耳其APPLE ID订阅过程2.1 注册土耳其苹果ID由于前几天是用新注册苹果ID方法，订阅硬生生被拖了两三天（新号很容易触发风控），推荐老号转土区，这样就不用等。（也有概率风控）。任意地区的老号都可以改成土耳其地区！（没有老ID号的：搜了一个发卡网花了2元买了一个老号然后改的地区，当然你也可以直接买土区的老号）（附上找的发卡网： https://www.id10.cn/ ，也可随便去找个便宜靠谱的就行）附：苹果ID改区网址：https://account.apple.com/account/manage/section/information买到号后，最好去修改一下邮箱手机号那些，改区很简单，没什么说的，选择不添加付款方式，地址街道随便填，让ai帮你生成一个就行！2.2 购买里拉充值接下来就是购买土耳其礼品卡500TL TR （支持支付宝付款，你也可以到咸鱼去买，但要小心黑卡）购买网址：https://www.seagm.com/zh-cn/itunes-gift-card-turkey?item_id=168202.3 登录APPLE ID并充值把改成土耳其地区的苹果ID登入手机或平板的app Store兑换你刚才购买的礼品卡卡密2.4 订阅ChatGPT Plus会员充值500里拉成功后，直接打开chatGPT 升级 Plus会员接下来就可以畅快的使用ChatGPT plus服务了。三、注意事项需要梯子，要不然你没法订阅，任意地方的都可以。
洛雪音乐下载安装与使用全教程：2026最新音源配置（附图文详解）
博主最近用PC比较多，之前用的刘明野工具箱被河蟹了，也不想花钱买会员，需要寻找一款能在电脑上无阻碍免费听歌的软件，于是找到的洛雪。一、关于洛雪洛雪音乐是一款免费音乐播放器，它的核心作用是聚合全网音乐资源，让用户能一站式收听、缓存各类歌曲，无需在多个平台间切换。洛雪音乐的界面简洁直观，没有复杂操作，新手小白打开后就能轻松上手搜索和播放，完全不用花费时间研究使用方法，专注于享受音乐本身。洛雪音乐最大的亮点就是完全免费开源，无广告、无会员付费墙，全程不会有弹窗干扰。洛雪音乐支持 FLAC、APE 等无损格式播放与缓存，最高可达 192kHz/24bit 高清音质，内置音频 DSP 和 10 波段均衡器，可调节高低音增强效果，兼顾普通用户和音乐爱好者需求。和其它播放器相比，洛雪音乐没有功能缩水，反而支持多 CDN 加速，热歌秒加载，离线缓存后无网也能播放，同时注重隐私保护，一键清空搜索历史，兼顾实用性和安全性，是兼顾各类用户需求的高性价比选择。更贴心的是洛雪音乐的无账号设计，不收集用户数据，同时支持批量下载和断点续传，网络波动时也不会重复浪费流量。二、洛雪音乐的下载与安装1下载洛雪音乐下载地址： 洛雪音乐安装包下载地址 最新版的PC版本是2.12：电梯直达最新版移动版本是1.8.1：电梯直达1桌面版以 .dmg 结尾的文件适用于 macOS 系统。 以 .deb/.rpm/.AppImage/.pacman 结尾的文件适用于 Linux 系统。 带 win_ 或 Setup 的文件适用于 Windows 系统。 以 Setup.exe 结尾的文件为安装版，具备「自动更新」功能，软件启动时会自动检测并安装更新。 但若你所在网络访问 GitHub 较慢，则可能会更新失败，这时需要手动下载安装包覆盖安装。 以 green.7z 结尾的文件为免安装版，解压后可直接运行里面的 lx-music-desktop.exe，但无法自动更新。 带 x64 的文件适用于 64 位操作系统，x86 适用于 32 位操作系统，arm64 适用于较新的 Arm 机器。 2移动版以 .apk 结尾的文件适用于 Android 系统。 建议优先下载 arm64-v8a 安装包，若无法安装再下载 universal 安装包。 另外还有 armeabi-v7a/x86_64 等安装包，若有需要可自行下载。 版本号包含 sl 的安装包为「墨·状态栏」特别版，详情看状态栏歌词。 universal 安装包的内部版本号总是低于单架构安装包的内部版本（包括跨版本）。安装新版本时，如果遇到版本号太低的提示，请尝试使用其他单架构安装包。 目前没有计划支持 iOS 和 HarmonyOS NEXT。 2安装洛雪音乐1) 下载安装包，双击 lx-music-desktop-v2.12.0.exe 启动安装：2) 点击 “我同意”：3) 点击 “下一步”：4) 系统默认安装到 C 盘，这里强烈建议手动修改到其他盘（非系统盘），点击 “安装”：5) 等待进度条加载到 100%：6) 点击 “完成”：7) 出现下图所示界面，安装完成：三、使用洛雪音乐1) 点击 “设置”：2) 点击 “自定义源管理”：3) 点击 “在线导入”：4) 复制 https://ghproxy.net/https://raw.githubusercontent.com/pdone/lx-music-source/main/flower/latest.js 或者 https://tt.tenmeng.com/moonue/js/yecao202412.js ，粘贴到方框内，点击 “导入”：5) 导入完成后，关闭窗口：6) 勾选导入的源，就可以使用了：四、洛雪音乐常见问题1) 无法播放/下载：切音源 → 清缓存 → 换网络 → 关防火墙 → 升最新版。2) 桌面歌词/列表缺失：洛雪定位 “查歌器”，非完整播放器，可外接 foobar 使用。3) 歌单同步失败：同一局域网 → 实验性同步 → 数据明文勿在公网用。4) 音源导入失败：路径无中文 → 文件权限→ 客户端 1.6.0+ →重启生效。
0 前言最近购买的大盘鸡装的系统是Debian13，用之前的一键脚本报错 新手PT刷流一键安装与使用教程 ，提示脚本不支持Debian13。1 安装与配置1.1新源可以在此查询构建好的包1） 备份并编辑源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo nano /etc/apt/sources.list添加以下内容 这里添加了trixie 源deb http://deb.debian.org/debian trixie main contrib non-free deb-src http://deb.debian.org/debian trixie main contrib non-free2） 更新包索引sudo apt update1.2 安装qbittorrent-nox直接使用以下命令安装qbittorrent-nox：sudo apt install qbittorrent-nox -y1.3设置开机自启动1）创建qbittorrent-nox.service文件：nano /etc/systemd/system/qbittorrent-nox.service2）把以下内容复制进去：[Unit] Description=qBittorrent Command Line Client After=network.target [Service] Type=simple User=root Group=root UMask=007 WorkingDirectory=/root/.config/qBittorrent ExecStart=/usr/bin/qbittorrent-nox --webui-port=8080 Restart=on-failure [Install] WantedBy=multi-user.target3）按Ctrl+O保存，再按Ctrl+x退出。4）修改qbittorrent-nox.service文件后重新载入：sudo systemctl daemon-reload5）设置开机启动：sudo systemctl enable qbittorrent-nox6）启动qbittorrent-nox：sudo systemctl start qbittorrent-nox7）停止qbittorrent-nox：sudo systemctl stop qbittorrent-nox8）安装完成打开浏览器，输入http//ip地址:8080，就可以打开qbittorrent-nox的webui了1.4 密码问题1）关于默认密码新版本qbittorrent不再使用默认密码，而是随机生成密码，应该会输出在日志里。2）查看日志journalctl -fu qbittorrent-nox可以看到账号密码3）修改密码（1）手动修改配置文件如果没有正确输出，可以手动修改配置文件vim /etc/systemd/system/qbittorrent-nox.service（2）添加WorkingDirectory[Unit] Description=qBittorrent Command Line Client After=network.target [Service] Type=simple User=root Group=root UMask=007 WorkingDirectory=/root/.config/qBittorrent ExecStart=/usr/bin/qbittorrent-nox --webui-port=8080 Restart=on-failure [Install] WantedBy=multi-user.target（3）编辑配置文件vim /root/.config/qBittorrent/qBittorrent.conf（4）添加以下内容[Preferences] WebUI\Password_PBKDF2="@ByteArray(ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ==)"4）重载密码# 停止服务 systemctl stop qbittorrent-nox # 重新加载 systemd 配置 systemctl daemon-reload # 启动服务 systemctl start qbittorrent-nox此时能用账号密码admin adminadmin登录，记得登录后修改默认账号密码。