首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
MySQL mysqldump备份实战:核心参数、自动化脚本与恢复演练
📅 2026/10/19 5:26:33
✍️ 爱科研究院
👁 阅读 3,247
1. 备份方案选型为什么先从mysqldump开始说实话我最早接手MySQL生产库的时候市面上物理备份工具已经很多但第一反应还是先用mysqldump。原因很简单它是官方自带工具不需要额外装依赖导出来的是可读的SQL文本出问题可以快速检查而且在中小数据量下一条命令就能完成一个库、多个库甚至整个实例的备份。很多新人在学习数据库备份时也把mysqldump当成第一课这个选择并没错但前提是得清楚它到底适合解决什么问题。1.1 逻辑备份与物理备份的本质区别mysqldump属于逻辑备份工具它做的事情是把表结构、数据、存储过程、触发器等内容翻译成一条条SQL语句最终保存成一个或多个文本文件。物理备份则是直接拷贝数据目录下的ibd、frm、ibdata等二进制文件比如用文件系统快照或专门的物理备份工具来做。两者的差别可以类比成整理一份文章逻辑备份是帮你把文章全文一个字一个字抄到文本里物理备份是直接复印整本纸书。抄文本的好处是只要手机能打开随时可以重新排版坏处是数据量大时抄起来慢。复印整书快但你必须拿到一台型号一致的“复印机”也就是同版本或兼容版本的数据库程序才能还原。从恢复角度看逻辑备份文件对跨版本迁移、跨平台迁移更友好。你从MySQL 5.7导出的SQL文件往往可以直接导入到MySQL 8.0实例只要语法兼容。物理备份则对版本、平台、甚至存储引擎更敏感。因此当公司做机房迁移、云上云下切换、或者搭建临时测试环境时mysqldump经常是第一选择。此外逻辑备份文件可以只恢复某张表、某部分数据而物理备份粒度和灵活性相对较低。1.2 mysqldump的适用场景与不该碰的场景以我的使用经验mysqldump适合这几类场景数据量在几十GB以内、每天做一次全量备份的小型或中型业务只导出表结构做版本对比导出单表数据用于临时修复准备一份逻辑快照用于搭建只读实例或从库从旧版本迁移到新版本时的过渡备份。它最大的优点是简单、可控、文件透明出问题不会让人一头雾水。但也要认清它的边界。当单库达到几百GB甚至TB级时mysqldump无论是备份还是恢复速度都会慢得让人焦虑而且备份文件可能占用大量磁盘空间。如果业务要求每天凌晨短时间完成全量备份应该优先考虑物理备份工具或云盘快照。另外mysqldump本身不支持真正的增量备份虽然可以配合binlog做增量恢复但整体链路复杂。另外一个常见误区是以为导出了SQL文件就等于备份成功。实际上如果从不做恢复演练备份文件的可用性始终是未知数这一点后面我会专门展开。2. mysqldump核心参数拆解从登录到一致性mysqldump本身是一条命令行工具参数很多但真正在备份脚本里常用的并不算多。与其生硬地背参数列表不如按“登录、一致性、备份对象”三条线来理清思路。我下面拆解的这些参数基本覆盖了一个规范备份脚本的必备项。2.1 连接参数与备份账号权限连接相关的参数无非是-h、-P、-u、-p分别指定主机、端口、用户、密码。单独执行时可以这样写mysqldump -h 127.0.0.1 -P 3306 -u backup_user -p mydb mydb.sql这样写会交互式输入密码适合手工操作。但自动化脚本里不能把明文密码直接放在命令行因为可能被进程列表其他人看到也会被记录到历史文件。我一般推荐通过--defaults-extra-file加载配置文件把密码放在权限受限的文件里# /etc/mysql/backup.cnf [client] host127.0.0.1 port3306 userbackup_user password你的密码然后执行chmod 600 /etc/mysql/backup.cnf mysqldump --defaults-extra-file/etc/mysql/backup.cnf --single-transaction mydb mydb.sql这样脚本里看不到明文密码文件本身又只有特定用户能读安全性好很多。除了连接方式备份账号的权限也需要专门创建不要图省事直接用root账号。一个最小可用的备份账号至少要有这些权限SELECT、SHOW VIEW、TRIGGER、LOCK TABLES、PROCESS、RELOAD。如果备份库里包含存储过程还需要额外权限如果用到--master-data记录位点RELOAD权限是必须的。创建账号的示例CREATE USER backup_userlocalhost IDENTIFIED BY 备份专用密码; GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, PROCESS, RELOAD ON *.* TO backup_userlocalhost; FLUSH PRIVILEGES;注意GRANT语句中*.*表示全局级权限因为PROCESS和RELOAD没有库级粒度。生产环境可以把这个权限范围视为备份专用权限不额外给DML权限避免账号泄露后扩大破坏面。2.2 一致性参数--single-transaction、--lock-tables、--master-data备份最怕的是备份文件里数据和表结构对不上或者备份过程中数据正在写入。mysqldump对一致性有几个关键参数我逐个说。--single-transaction是InnoDB引擎下最常用的参数。原理是执行备份时开启一个可重复读事务利用InnoDB的MVCC机制拿到一个一致性快照备份过程中的写操作不会阻塞读到的数据始终是事务开始那一刻的状态。这个参数对在线业务非常友好所以我一般默认都加。但要注意它只对事务表有效MyISAM表没有MVCC依然会经历锁表或数据不一致的风险。如果库中仍然大量使用MyISAM表--single-transaction不能完全保证一致性最好在低峰期操作或者直接改造为InnoDB。--lock-tables是另一个一致性参数默认行为是备份前锁定所有表。对MyISAM表有效但对InnoDB表会带来短暂阻塞。如果同时开了--single-transaction又用--lock-tables往往会导致备份期间业务写操作被锁住这在小团队看来很折腾。因此我的建议是纯InnoDB库使用--single-transaction不加--lock-tables如果库里有MyISAM表且没法改造就单独评估是否接受短暂锁表或者干脆使用物理备份。--master-dataMySQL 8.0中也叫--source-data用于记录备份时刻的binlog位置。常用值是2含义是把CHANGE MASTER TO语句以注释形式写入备份文件值1则直接写入可执行语句。加上这个参数后备份文件里会多出类似这样的内容-- CHANGE MASTER TO MASTER_LOG_FILEmysql-bin.000123, MASTER_LOG_POS456789;这对于搭建从库、做主从重建、以及做基于时间点的恢复非常重要。使用时要注意--master-data会触发短暂的FLUSH TABLES WITH READ LOCK在备份大表时可能有一两秒的全局锁不过通常可以接受。2.3 结构/数据/对象选择参数很多时候我们不需要每次都导出全部对象那就得用下面这些参数灵活裁剪。--databases后面跟库名表示导出多个指定库。加上它之后备份文件开头会生成CREATE DATABASE和USE语句恢复时就不需要手动建库。如果不加只导出一个库的数据时文件里直接是建表语句和INSERT语句恢复时你得先创建库再指定库名导入。比如# 不带 --databases mysqldump ... mydb mydb.sql # 带 --databases mysqldump ... --databases mydb mydb.sql两者在恢复体验上差别很明显。我写自动化脚本时更倾向于显式使用--databases这样备份文件自带库名单独拿出来给任何人恢复都不会因为漏建库而失败。--no-data表示只导出表结构--no-create-info表示只导出数据、不建表这两个参数在做结构对比或数据迁移时很好用。比如我只想确认两个环境表结构是否一致不必导出全量数据直接执行mysqldump ... --no-data --skip-comments --compact mydb mydb_schema.sql--routines、--triggers、--events分别控制存储过程与函数、触发器、事件调度器。默认情况下触发器通常会被备份但存储过程和事件不一定为了保险我的脚本里永远显式加上这三个参数。千万别等到恢复后才发现少了一批存储过程那时查起来非常头疼。--where用于按条件导出部分行。比如某个表数据量很大只想导出最近一个月mysqldump ... mydb orders --wherecreate_time 2025-01-01 orders_part.sql--ignore-table则用来跳过某些大表、临时表或日志表。比如导出业务库时排除统计表mysqldump ... --ignore-tablemydb.stat_log --databases mydb mydb_without_log.sql这种用法在“日常全量备份但不想要无用日志表”的场景下特别实用。2.4 常见备份命令组合把上面的参数组合起来我日常用得最多的几条命令大致是# 单库备份包含全部对象记录binlog位点 mysqldump --defaults-extra-file/etc/mysql/backup.cnf \ --single-transaction --quick --routines --triggers --events \ --master-data2 --set-gtid-purgedOFF \ --databases mydb | gzip mydb_$(date %F).sql.gz # 只备份表结构 mysqldump --defaults-extra-file/etc/mysql/backup.cnf \ --no-data --routines --triggers --events \ --databases mydb mydb_schema.sql # 备份所有库 mysqldump --defaults-extra-file/etc/mysql/backup.cnf \ --single-transaction --quick --routines --triggers --events \ --all-databases | gzip all_databases_$(date %F).sql.gz这里补充说明--set-gtid-purgedOFF如果实例启用了GTID导出文件默认会带上SET GLOBAL.GTID_PURGED导入到其他已开启GTID的实例时很容易因为GTID集合冲突而报错。在普通备份场景下我通常加这个参数把它关掉除非你明确需要保留GTID位置。对于只想做日常备份恢复的场景关掉更省心。3. 实战一次完整的备份与恢复流程参数看得再多不如完整跑一遍流程。我以一个常见的单库备份为例带你把备份、检查、恢复三个环节走通。3.1 单库备份与压缩落地假设我手里有一个名为sales的业务库数据量不大但有存储过程同时业务在线。我会先建好备份目录和配置文件然后执行mkdir -p /data/backup/mysql cat /etc/mysql/backup.cnf EOF [client] host127.0.0.1 port3306 userbackup_user password你的密码 EOF chmod 600 /etc/mysql/backup.cnf mysqldump --defaults-extra-file/etc/mysql/backup.cnf \ --single-transaction --quick --routines --triggers --events \ --master-data2 --set-gtid-purgedOFF \ --databases sales | gzip /data/backup/mysql/sales_$(date %F_%H%M%S).sql.gz执行过程中mysqldump会向标准错误输出大量进度信息例如“Dumping table orders”、“Writing header”等。这些信息不丢重定向到日志文件即可方便事后检查。使用管道和gzip压缩后最终文件通常是原SQL文件的五分之一到十分之一具体取决于表数据和索引情况。备份完成后不要只看一眼文件大小就完事。我会先看压缩包释放出来的内容是不是完整zgrep -q Dump completed /data/backup/mysql/sales_*.sql.gz echo OK || echo FAILmysqldump正常结束时文件末尾会有一行-- Dump completed on 2025-xx-xx xx:xx:xx这是判断备份是否完整的重要标志。如果连这个标志都没有大概率是执行中途被杀或磁盘满了。3.2 备份文件内容拆解解压备份文件后开头一般是这样的结构-- MySQL dump 10.13 Distrib 8.0.36, for Linux (x86_64) -- -- Host: 127.0.0.1 Database: sales -- ------------------------------------------------------ -- Server version 8.0.36 /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; ... CREATE DATABASE /*!32312 IF NOT EXISTS*/ sales /*!40100 DEFAULT CHARACTER SET utf8mb4 */; USE sales;继续往下是建表语句、INSERT语句、存储过程、触发器定义等。在这个过程中会发现备份文件里包含了一些session级别的设置比如SET FOREIGN_KEY_CHECKS0、SET UNIQUE_CHECKS0目的是恢复时减少约束检查、加快导入速度。了解这些结构后你就能明白为什么恢复时有时会提示外键顺序问题而通常导入工具已经帮你规避了。检查备份内容时我会顺手统计一下建表语句数量确认和生产环境一致。比如grep -c CREATE TABLE sales.sql如果生产环境有50张业务表备份文件中却只有48个CREATE TABLE那就说明备份漏了东西得赶紧检查是--ignore-table误配还是权限缺失。3.3 恢复演练解压、导入与核验恢复其实不复杂但一定要找一个测试库或测试实例来演练不要直接在生产环境验证。完整的恢复流程如下。先建一个空库CREATE DATABASE IF NOT EXISTS sales_restore DEFAULT CHARACTER SET utf8mb4;然后解压导入gzip -dc /data/backup/mysql/sales_xxx.sql.gz | mysql --defaults-extra-file/etc/mysql/backup.cnf sales_restore因为备份时用了--databases文件里带了USE sales直接导入时会出现一个坑明明指定了sales_restore却依然可能因为文件里的USE sales而导入到sales库。遇到这种情况解决办法是恢复时不指定库名而是先用编辑器或流处理把USE sales改成USE sales_restore或者使用更稳妥的恢复方式gzip -dc /data/backup/mysql/sales_xxx.sql.gz \ | sed s/^USE sales/USE sales_restore/ \ | mysql --defaults-extra-file/etc/mysql/backup.cnf恢复完成后对比原库和恢复库的表数量、行数总和。可以简单做SELECT COUNT(*) FROM sales_restore.orders;再对比原表SELECT COUNT(*) FROM sales.orders;数值一致基本可以确认恢复成功。如果还有存储过程可以看SHOW PROCEDURE STATUS;确认对象是否恢复完整。我见过太多人备份完就扔在磁盘上直到出故障才发现备份文件虽然存在但SQL尾部缺少“Dump completed”或者恢复时因为字符集问题导入乱码。所以恢复演练不是可选题而是必选题。4. 自动化定时备份脚本与crontab落地手工执行mysqldump只能算准备阶段真正让备份“省心”的是把它固化成定时任务。这里我给出一个经过多次调整后的备份脚本模板以及配置crontab时容易忽略的细节。4.1 备份脚本的健壮性设计写备份脚本时最重要的目标不是“能跑”而是“出问题时能立刻发现”。坦白说刚干活那几年我写的备份脚本只有三五行导出一个库压缩完事。后来遇到过磁盘写满、权限变更、表损坏导致导出中断才发现脚本必须具备失败检测和保存现场能力。下面是一个可直接参考的脚本#!/bin/bash # mysql_daily_backup.sh set -euo pipefail BACKUP_BASE/data/backup/mysql DATE$(date %Y%m%d_%H%M%S) KEEP_DAYS7 MYSQL_CONFIG/etc/mysql/backup.cnf LOG${BACKUP_BASE}/backup_${DATE}.log DB_LIST(sales users report) mkdir -p ${BACKUP_BASE}/${DATE} fail_exit() { echo [$(date %F %T)] backup failed: $1 ${BACKUP_BASE}/backup_fail.log # 这里可以接入钉钉、企业微信、短信等告警通知不展开 exit 1 } for db in ${DB_LIST[]}; do out_file${BACKUP_BASE}/${DATE}/${db}.sql.gz echo [$(date %F %T)] backing up ${db} ... ${LOG} mysqldump --defaults-extra-file${MYSQL_CONFIG} \ --single-transaction --quick --routines --triggers --events \ --set-gtid-purgedOFF --master-data2 --databases ${db} \ 2 ${LOG} | gzip ${out_file} dump_status(${PIPESTATUS[]}) if [ ${dump_status[0]} -ne 0 ]; then fail_exit ${db} mysqldump exit ${dump_status[0]} fi if ! zgrep -q Dump completed ${out_file}; then fail_exit ${db} dump file incomplete fi echo [$(date %F %T)] ${db} done, size $(du -h ${out_file} | cut -f1) ${LOG} done # 清理超过保留天数的备份 find ${BACKUP_BASE} -maxdepth 1 -type d -name 2* -mtime ${KEEP_DAYS} -exec rm -rf {} \; echo [$(date %F %T)] all done ${LOG}脚本里几个关键点我单独说明。set -euo pipefail是一行保险丝。-u让未定义变量直接报错-o pipefail让管道命令只要任意一段失败就整体失败避免“mysqldump已经挂了但gzip照常生成一个空文件”的情况。PIPESTATUS用于精确判断管道中mysqldump的退出码。因为管道里最后执行的是gzip如果不检查PIPESTATUS[0]只检查管道整体返回码有可能mysqldump失败但gzip成功导致误判。zgrep -q Dump completed是对压缩包的完整性检查。这个检查比单纯看文件大小靠谱得多能拦截掉“因为中途被杀而生成半截压缩文件”的悲剧。4.2 crontab定时任务配置与运行检查脚本写完后给它加执行权限chmod x /usr/local/bin/mysql_daily_backup.sh然后编辑crontabcrontab -e加上一行30 1 * * * /usr/local/bin/mysql_daily_backup.sh /data/backup/cron.log 21含义是每天凌晨1点30分执行一次。选择这个时间通常是为了避开业务高峰。不过要注意cron进程执行时的PATH非常精简可能默认不包含mysql安装目录。如果脚本里直接写mysqldump而不是绝对路径即使手工能执行cron也可能报“command not found”。解决办法有几种一是在脚本开头导出PATH二是把mysqldump的绝对路径写到脚本变量里三是在cron行里指定绝对路径。我个人习惯在脚本里加一句export PATH$PATH:/usr/local/mysql/bin:/usr/bin:/bin如果是binlog目录在MySQL软件安装目录里同样建议在crontab之前通过source /etc/profile配置好环境但这个做法比较脆弱不如在脚本里显式处理。crontab配好之后第二天的第一件事是看备份目录是否生成了当天文件日志里是否出现“all done”。不要等到月底才发现定时任务根本没跑起来。最稳的办法是在crontab里再加一行测试任务不过大多数情况下手动执行一次脚本并观察cron.log就足够。为了避免前一次备份还没结束、下一天任务又被触发最好给命令加一把锁。比如借助flock30 1 * * * /usr/bin/flock -n /tmp/mysql_backup.lock -c /usr/local/bin/mysql_daily_backup.sh /data/backup/cron.log 21-n参数会让第二个任务拿不到锁时直接退出避免两个mysqldump同时跑把数据库IO拖垮。4.3 备份保留策略与异地容灾扩展定时备份不是做得越多越好存储成本需要平衡。一般中小项目的做法是每日全量备份保留最近7天或者14天再额外保留每月第一天的备份到独立目录用于更长时间的归档。脚本里的find ... -mtime 7 -exec rm -rf {} \;正好完成按天清理你可以根据业务要求调整保留天数。如果备份文件多建议先用du -sh /data/backup/mysql/*统计空间占用避免某天磁盘被备份文件塞满。只在本机留备份是不够的服务器磁盘损坏、机房断电这类故障会把本机备份一起带走。比较简单的扩展方式是通过rsync或sftp把备份传到另一台机器或对象存储。策略可以每天全量传一次也可以在脚本执行完后用一条命令推送。比如rsync -avz --timeout60 /data/backup/mysql/ backup-node:/data/backup/mysql/同步完成后最好追加一个远端完整性标记避免因为网络断连导致远端只收到半截文件。如果敏感度较高还可以对备份文件加密后再传输用openssl或gpg都能实现。加密操作会增加脚本复杂度但数据安全性会显著提升尤其备份文件里可能包含用户手机号、邮箱等敏感字段。5. 常见问题与避坑指南备份脚本上线后真正考验人的不是正常执行而是各种突发状况。下面这些坑我基本都踩过整理成速查表和实操排查思路方便你遇到问题时能快速定位。5.1 高频报错速查表报错/现象常见原因处理思路mysqldump: Got error: 1045 Access denied备份账号缺SELECT权限或密码配置错误检查mysql.user中账号权限或检查配置文件密码mysqldump: Couldnt execute FLUSH TABLES WITH READ LOCK使用--master-data但账号缺RELOAD权限给账号授权RELOAD或去掉--master-data参数mysqldump: Error 2020: Got packet bigger than max_allowed_packet参数max_allowed_packet过小大字段导出失败在mysqldump命令或配置中调大max_allowed_packetUnknown column column_statistics新版mysqldump连接旧版MySQL驱动时的协议不兼容加--column-statistics0重试ERROR 1419 (HY000): You may not create stored function导入包含存储过程/函数binlog开启但trust function creators未开启临时设置log_bin_trust_function_creators1或给导入账号更高权限ERROR 1227 (42000): Access denied备份文件里包含SET GLOBAL.GTID_PURGED或DEFINER相关语句导入账号权限不足导出加--set-gtid-purgedOFF或使用有足够权限的账号导入Cant open file ... No space left on device备份目录所在磁盘满了清理旧备份或扩展到其他磁盘5.2 备份失败与恢复失败的实操排查一次备份失败我会按照下面的顺序排查。先看磁盘df -h确认备份目录所在分区有没有剩余空间。再看MySQL连接用mysql --defaults-extra-file/etc/mysql/backup.cnf -e SELECT 1验证账号和网络是否正常。然后是错误日志由于脚本里已经把mysqldump的stderr重定向到LOG文件直接打开日志看具体报错比瞎猜高效得多。曾经遇到过一件奇怪的事某个库备份文件大小正常也没报错但恢复时发现缺少某张表。后来排查发现mysqldump导出时该表正在被DDL操作备份瞬间表结构已经处于中间状态导致导出不完整。从那以后我得出结论备份期间尽量避免执行大规模DDL如果不得不做就错开备份窗口。另外备份完最好用zgrep CREATE TABLE数一下表数量和生产环境对比多一道保险。恢复失败的排查思路不太一样。导入是写入操作常见坑是字符集不对导致的乱码、外键顺序导致的失败、权限不足导致无法创建对象。遇到乱码时我会在导入命令中显式指定字符集mysql --defaults-extra-file/etc/mysql/backup.cnf --default-character-setutf8mb4 sales_restore backup.sql遇到外键顺序问题时确认备份文件头部有SET FOREIGN_KEY_CHECKS0;如果没有可以在导入前先手动执行SET FOREIGN_KEY_CHECKS0;导入完成后再开启。5.3 我的几个实操心得写到这里想分享几个体会。第一mysqldump备份文件必须做完整性校验。最简单的校验就是看结尾有没有“Dump completed”。我在脚本里用zgrep检查压缩包已经帮团队拦截过两次因为磁盘满导致的“半截备份”。如果没有这一步恢复时根本不知道文件是不完整的。第二不要把所有库塞进一条命令而不加区分。我曾见过有人用--all-databases备份后恢复结果把系统库的账号权限也一起覆盖导致应用连接失败。日常最稳妥的方式还是按业务库分别备份这样单个文件独立、恢复时互不影响。如果需要整机恢复可以再额外跑一次全库备份但不能替代按库备份。第三定时备份里一定要有失败告警。我见过很多团队配置了crontab就不再看日志直到几天后才发现备份一直是失败的。告警方式不用多复杂脚本里失败时发一封邮件或调一个通知接口就行重点是不让问题继续隐蔽下去。最后一句话送给每个做数据库运维的人备份的价值不在于备份文件本身而在于“能恢复”。也就是定期拿出备份文件找个干净实例做一次真实恢复演练。只有真正走通那条恢复链路你才能在事故发生时保持镇定毕竟数据库备份这关最怕的不是没备份而是备份了一堆根本用不上的文件。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/19 5:26:33
SSA-GRNN回归预测实战:麻雀搜索算法优化平滑因子详解
2026/10/19 5:26:33
MATLAB+NSGA-II+Maxwell多目标电机结构优化联合仿真实战
2026/10/19 5:21:33
符号主义黄金时代:智能体推理的源头与当代启示
2026/10/19 7:26:42
海康相机与Halcon图像桥接开发实战指南
2026/10/19 7:26:42
CMSSW 部署实战:高能物理离线软件栈的确定性构建与调试
2026/10/19 7:26:42
海康相机SDK与Halcon混合编程实战:零拷贝图像桥接方案
2026/10/19 7:26:42
联想SR650(7X06)RAID驱动注入与Linux initramfs配置指南
2026/10/19 7:26:42
artcraft:数字设计到实体手工的零基础制作流程
2026/10/19 7:21:40
单目三维重建实践指南:Python与OpenCV从棋盘格标定到点云生成
2026/10/19 0:01:13
频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现
2026/10/19 0:01:13
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道
2026/10/19 0:01:13
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统
2026/10/18 0:02:43
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/19 2:04:59
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/18 0:02:43
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/17 10:15:50
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/16 18:46:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/16 18:46:46
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)