大象笔记

知者行之始,行者知之成

MySQL 指定表导出 CSV

需要将 MySQL 数据库中的某个表,导出成 CSV 文件格式。方便在 Excel 中查看和修改,然后再导入回数据库。 突然感觉智能表格才是应用的未来。。。因为大家还是习惯在 Excel 中查看和修改数据。 尝试了几种方法,最终发现还是 mysqldump 命令最方便。 mysqldump 导出 CSV 文件 sudo mysqldump -u username -p \ --tab=/var/lib/mysql-files/ \ --fields-terminated-by=',' \ --fields-enclosed-by='"' \ db_name table ...

阅读全文...

推荐一款免费开源的图片批量压缩软件 Caesium

晚上吃饭的时候,突然接到一个陌生的电话,原来是 N 年前的一个客户,说我开发的一个题库图片 OCR 识别系统不好用了,让我帮忙看看。我第一反应是,不至于啊,这个系统 golang 开发的相当稳定,N 年没有出过问题了。除非: 百度 OCR 接口欠费了 服务器磁盘满了 时间太过久远,我连服务器的 IP 都没有印象了,要了服务的后台地址,我才找到服务器的 IP。登录一看,日志里确实有晚上失败的请求记录。但是日志里却啥有用的信息也没有,完全看不出是因为导致的异常。奇怪的是,3 次请求两次识别,一次成功。能成功就说明不是百度 OCR 接口的事情。 客户说是只有手机拍照的试题照片才会识别失败,而电脑 ...

阅读全文...

通过 smtp.gmail.com IPv6 地址发送邮件,报错 421 4.7.0 Try again later

今天线上服务器通过 smtp.gmail.com 发送邮件时,持续报错: fail to send email: 421 4.7.0 Try again later, closing connection. 比较奇怪的是: 在其他服务器上,同样的代码和配置,却能正常发送邮件。 当前服务器上,换成 smtp.163.com 等其他 SMTP 服务器,也能正常发送邮件。 这个发送邮件的服务运行一年多了,今天第一次出邮件无法发送的问题 nc 命令测试 有问题的服务器上测试: # nc -v smtp.gmail.com 587 Connection to smtp.gmail.com (24 ...

阅读全文...

gobackup 自动将 MySQL 数据库备份到七牛云私有空间之二,线上部署

继续前文 使用 gobackup 自动将 MySQL 数据库备份到七牛云私有空间,在本地测试了 gobackup 的基本功能之后,今天在几台线上服务器,包括阿里云和腾讯云的各种服务器,依次部署了 gobackup 备份服务。这里记录一下一些踩坑的地方。 消息通知设置 用 163 邮箱设置了邮件通知,测试失败日志如下: 2025/10/27 09:32:58 [Notifier] Running 1 Notifiers 2025/10/27 09:33:18 [Notifier] EOF 从 github issue 看,似乎是不支持 TLS: When send mail via port ...

阅读全文...

使用 gobackup 自动将 MySQL 数据库备份到七牛云私有空间

现在后台开发和运维都是我一个人,所以服务器上的 MySQL 数据库备份也只能自己来做了。 由于服务分散在多台服务器上,并且有几十个数据库需要备份,手动备份实在是太麻烦了。 需要一套自动化的备份流程。定时将数据库导出,并存储到云存储空间中,例如七牛云存储或者阿里云 OSS 上。 备份方案的选择 我昨天纠结了半天,到底用什么方案或者工具来做数据库的自动备份: 手写 shell 脚本。这个很麻烦,因为数据库太多,不同服务对应的云存储还不一样。逻辑复杂,不适合用 shell 脚本来写。 Python 脚本。本来是都开始动手要写了,但是登录了一台服务器,发现居然是 Ubuntu 18.04 系统,Py ...

阅读全文...

尝试 Playwright 进行网站自动化测试

为何要对网站进行自动化测试? 最近在开发公司内部使用的人事系统,发现手动测试非常麻烦。每次改动代码后,都需要手动打开浏览器,点击各种按钮,填写各种表单,确认功能是否正常。这个过程既耗时,又容易出错。 同时,我自己的网站也有类似的需求。写了一堆功能,每次上线都心惊胆战,生怕修改了一处代码,导致其他功能出错。而自动化测试可以大大降低这种焦虑感。尤其,现在好多功能都是用 AI 来实现的,我经常性的不看 AI 的具体实现代码,而是看它的输出结果是否符合预期。这种情况下,自动化测试就显得尤为重要。 我看现在好多人推荐使用 Playwright,而且是微软出品的,感觉应该还不错。于是决定尝试一下。 Pyt ...

阅读全文...

vscode copilot 国内满血复活 Claude 的配置方法

大概是上个月,我发现国内已经不能在 vscode GitHub copilot 中使用 claude 相关的模型了。对我来说,不太影响日常的搬砖性的 crud 开发任务。但是今天,遇到了出设计稿的任务,想让 ai 出一版平板 app 的设计稿。之前用 claude 给出的效果非常赞。参考前文 Claude 3.7 生成 APP/网站 UI 设计稿的提示词。 没有 claude 的情况下,我用 gpt 5 codex 和 gemini 2.5 pro 分别除了一版设计稿,效果惨不忍睹。而且让 gemini 微调,也是一直嗯嗯嗯,就是不改。无法忍受🤣 不得不请回 claude了。 网上查了一下,方 ...

阅读全文...

tailwindcss V4 警告处理, cdn.tailwindcss.com should not be used in production

用 AI 生成的网页代码,如果使用了 tailwindcss V4 的 CDN 版本,会看到浏览器控制台报了一段警告信息: cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation 奈何 AI 用 tailwindcss 生成的页面就是比用 bootstrap 的好看,不得不解决一 ...

阅读全文...

golang gin 生成网站地图文件 sitemap.xml

周末继续 Golang Gin 重构 PHP 的 Magento 电商网站。其中一个需要重构的功能是网站地图 sitemap.xml 文件的生成。 之前做的网站普遍简单,很少超过上万个产品或者文章。而电商类的服务,例如 magento 通常需要导入几十万甚至上百万的产品信息。那么就需要注意一下 sitemap.xml 的配置规范。 golang 三方库 https://github.com/sabloger/sitemap-generator 虽然 Star 数只有 40 个,但是看起来文档还挺详情,准备测试一下。 > go get github.com/sabloger/sitemap ...

阅读全文...

国庆假期处理的第二例网站服务器被刷流量,导致 Linode Server 宕机

国庆第一天,刚处理了国内的阿里云个人博客服务器被刷爆带宽。 而国庆第五天,一大早就收到海外的一个网站服务器(Linode Server)的宕机通知邮件。 早上一起床就赶紧登上了服务器,发现是网站服务器被刷流量,直接导致服务器负载过高,网站无法访问。 攻击流量特征 几乎全部的垃圾流量都是在刷一个站的博客列表页面,路径如下: /latest-blog?mdrv=<xxx.com>&start=<random_number> /latest-blog?=1&pagespeed=%27%3Fpagespeed%3D%27&start=2750 正常的 ...

阅读全文...

随机生成家庭住址及工作单位,职务等个人资料的在线工具

开发完了公司内网的人事管理系统,开始动手测试,发现里面的测试数据惨不忍睹,全是 111,222 这样的名字,员工资料里全是数字,显得系统异常粗糙😵‍💫。明天就要给人事部门演示了,这样可不行。于是我就用之前开发的 随机生成身份证号,手机号,邮箱地址的微信小程序 生成了一堆测试数据,界面里面看起来像个正式一点的人事系统了。但是,还有一部分数据没法自动生成,例如,家庭住址/户籍地址,工作单位,职务这些信息。 于是,我想干脆借此机会把这个工具再完善一下,就加上了更多的个人资料字段随机生成,效果如下: 本来想加上一些工资卡开户银行的信息想想算了,怕引起敏感词问题。同时增加了网页版本,方便在不方便登录微 ...

阅读全文...

git blame 确认代码中的屎是不是自己拉的

今天在排查一处程序 bug 时,发现一段代码写的逻辑实在乱,完全没有印象正确的逻辑应该是怎样的。 于是想查看这段代码是不是自己写的,什么时候写的,为什么这么写的。 直接在 VSCode 的 github copilot 的 Chat 窗口中问了一下: 如何通过 git 命令查看某段代码是那个提交修改的:例如: line1 line2 line3 得到的回答是,可以试试 git blame 命令。试了一下,非常好用。 git blame 示例 例如, 我想查看 models/product.go 文件中第 10 到 13 行的修改记录,可以运行: git blame -L 10,13 mode ...

阅读全文...