惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
罗磊的独立博客
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
博客园 - Franky
F
Fortinet All Blogs
D
Docker
博客园 - 司徒正美
腾讯CDC
Recent Announcements
Recent Announcements
The Cloudflare Blog
B
Blog RSS Feed
GbyAI
GbyAI
T
Tailwind CSS Blog
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志

明明如月成长笔记

个人数据的开源备份:从明清档案之殇想到的 简体字的双重优势:打字效率与扫盲成效全解析 四小时深圳书城奇遇:那些藏在书架间的偶然与必然 正式把我的笔记系统迁移到 Obsidian,为了和 AI 配合 Gemini CLI 登录踩坑记录:GOOGLE_CLOUD_PROJECT_ID 的坑与解法 在 MacOS 上,成功恢复存储卡上被误删的照片 AI CLI 工具:Claude Code, Codex, Gemini CLI, Qwen code, CodeBuddy cli, cursor-agent 我的常用命令 港漂日记62:父亲节独自带娃,室内游戏、香港公园探展、观鸟、品味米其林餐厅 南航随心飞机票爬虫解密 acw_sc__v2 港漂日记61:香港私立诊所首诊:商业医保如何改变我的就医体验? 香港历史博物馆:看秦始皇兵马俑,还能和孔子比身高? 港漂日记59:母亲节礼物!AI 涂色小技巧,让孩子的爱跃然纸上 港漂日记60:西营盘网红旧书店 Book & Go 淘书记 港漂日记58:萌娃中环学体操,课后老师狂点赞 五一游记D4:深圳笔架山儿童乐园,邂逅无人机送外卖 我的400篇博客都写了些什么 珊瑚海兔四岁啦 港漂日记D159:亲子同乐日:一场精彩的幼儿园嘉年华 蛇年春节自驾D10:东莞-深圳-香港 DeepSeek教我如何收拾行李箱 福田取逗留签 回港新方式 蛇年春节自驾D9:江门-顺德-东莞 中国侨都华侨华人博物馆 东莞迎宾馆 蛇年春节自驾D8:茂名-开平-江门 挥春作业 粤西堵车 开平碉楼 迎财神 茂名博物馆参观记 蛇年春节自驾D7:茂名 中国第一摊 茂名博物馆 亚朵酒店 蛇年春节自驾D6:南宁-茂名 发财树 青秀山 路途亲子游戏 蛇年春节自驾D5:南宁过大年 醒狮贺岁 三街两巷 特色美食 骑行穿城 琅西夜市 打铁花 新春好!我用DeepSeek写祝福,顺便送你三款红包封面 蛇年春节自驾D4:钦州-南宁 钦州老街,万丽年夜饭 蛇年春节自驾D3:海陵岛-钦州 绝美悬崖餐厅,海景房租赁行情 明明如月成长笔记2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D2:深圳-阳江-海陵岛
教育优惠到期,无法白嫖,我是如何迁移数据库的
lmm333 · 2024-06-25 · via 明明如月成长笔记

img_ttrss.png

分享一下这几天迁移 selfhost 的 one-api/TinyTinyRSS 等服务和数据库的经历。

之前我通过在读的远程硕士学位,一直白嫖着微软Azure的教育服务,他们家的虚拟机、数据库、AI服务用着那叫一个爽。可谁能想到,今年白嫖失败啦,续期总是不成功,这一下子费用高得吓人,一个月账单要好几百呢!尤其是之前免费的 30G 可突发的 MySQL 和 postgres 数据库实例,每个月都得 $20 外加备份的存储费用,两个加起来就得四百多人民币,出账时真实肉痛啊! 为了省钱,必须得迁移。考察了几种方案后,最后选择用 Docker 在虚拟机上搭建服务,这样虽然便宜不少,但在备份、安全、易用性等方面确实差了不少。毕竟之前我还遭遇过 我也被黑客勒索攻击了,就是搭建在 docker 里的 MariaDB,所以在这方面可得特别小心。

MySQL 数据迁移

需要迁移的 MySQL 里有 one-api 和 trojan-web 的服务数据,PostgresSQL 里是 TinyTinyRSS 的数据。

trojan-web 的数据比较简单,数据库里的数据就几行,也不重要,我直接按照官方教程,先搭建 MariaDB,再重装服务。

one-api 里有我所有的 LLM 的 api-key,调用记录等,数据是有价值的,需要迁移。另外服务在线上使用,最好能有热迁移的方法。 img.png 于是我先在 VM里,用 1panel 面板搭建了新 MySQL 服务(注意不用默认端口,降低在公网上被扫描攻击的可能),然后在面板上备份了旧 MySQL 的对应库,生成了 xxx.sql.gz 的备份文件,再导入到新库,然后创建了一个新的 one-api 服务,使用不同的端口,确认服务正常。

此时无服务中断的迁移方法应该是把调用先迁移到新服务,再下线旧服务。我找了夜里没用调用量的时候,直接停止旧服务,改数据库连接,再启动,完成了迁移。相当于新服务只用于验证方案可行,然后旧服务做停机切换了。

完成 MySQL 迁移后,删除 Azure 上相关实例,开始省钱啦。

PostgresSQL 数据迁移

原本想用同样的方法迁移 ttrss 在 PostgresSQL 里的数据,结果数据 2G 太大了,重复上面的步骤遇到问题。

于是搭建了 新的 PG 数据库和 pgadmin 服务, pgadmin 类似于 MySQL 的 phpmyadmin, 是个管理 pg 的 web 客户端。

在 B 站上现学了 pgadmin 的用法,然后在 UI 上点点鼠标,就好啦。

img.png

迁移 ttrss 服务和数据库步骤是:

  1. 先在 Server 上右键 Register 新旧两个数据库的连接,需要输入 域名/IP地址、端口、用户名、密码等信息。
  2. 备份:在旧数据库的 ttrss 库上点击 Backup 按钮,备份,生成备份文件,我输入了文件名 backup-ttrss-2024-06,此时 Process 栏目下会有任务状态,取决于数据量和网速,我的2分钟就好了。
  3. 恢复:在新数据库创建 ttrss 库,然后在新库上点击 Restore 按钮,选择刚才的备份文件,恢复。此时 Process 能看到任务状态,我这里也是5分钟就好了,虽然显示失败,但从日志上看到,是 azure 的管理用户恢复失败(因为我的库没有 azure 的特殊用户),不影响,相关数据的表对比了一下行数,都是正确的。
  4. 在新机器上用 docker-compose.yml 配置,创建了新的 ttrss 服务,服务启动。此时数据库连同整个机器都卡了一小时左右,查了下监控,是 IO 打满了,我怀疑是因为数据量大,索引更新等原因导致的,等一会儿就好了。

完成迁移后,ttrss 的启动和运行速度都快了很多,可能是因为 ttrss服务和pg数据库放在了同一台机器上。 之前的服务是 pg 和 ttrss 分开的,pg 在 日本的 Azure 上,ttrss 在自家nas上,可能是网络延迟,导致网页打开速度太慢,难以忍受。

总结

虽然迁移的过程有点波折,但能解决问题还是很开心的!希望我的经历能给大家带来一些启发和帮助!