Python 自动 dump 备份数据库各张表并存储:双击 cmd 一键执行,TaoToken 统一 Key 管理
发布时间:2026/10/2 16:28:38来源:尧图网络
1. Windows 下用 Python 逐表 dump 备份 MySQL 的真实痛点先说清楚这篇要解决什么问题你有一台 Windows 机器上面跑着 MySQL库里几十上百张表想每天或者每次改完数据把每张表单独导成一个.sql文件落盘而不是一个大 dump 全糊在一起。手动敲mysqldump一张张来表一多就废了写个 Python 脚本又得配环境、记参数、切目录每次都要开终端。这篇就是把这套流程封成「双击一个 cmd 文件就完事」的方案核心检索词就是 python、cmd、mysqldump、数据库备份、pymysql 这一串。为什么强调「逐表」而不是整库一把梭我自己的场景是库里有几张核心业务表改坏了只想回滚其中一张整库 dump 恢复起来又慢又容易误伤别的表。逐表导出后文件名就是表名出问题直接找到对应.sql单独导入定位成本几乎为零。另外逐表文件体积小丢到网盘或者移动硬盘做冷备也方便不用每次传一个几百 MB 的大文件。适合谁看会一点点 Python、在 Windows 上管 MySQL、不想装额外备份工具比如各种带界面的客户端的人。整篇不需要你懂多高深的数据库原理跟着把脚本和 cmd 抄下来、改几个路径和账号就能跑。中间会用到 pymysql 读表清单、mysqldump做实际导出、os.system调命令行最后用 cmd 批处理把「切盘符 切目录 跑 Python 暂停看结果」串起来。还有一个容易被忽略的点备份脚本本身也要能「看见结果」。很多人写完脚本双击一闪而过根本不知道成没成功。所以这篇会在 Python 里加文件大小校验cmd 里加pause让你双击后能停在窗口里看到每张表的导出状态和最终校验结论。下面从环境准备开始一步步来。2. TaoToken 统一 Key 管理给备份脚本加个「配置中心」的接入前置备份脚本本身不依赖大模型但为什么这里要提 TaoToken因为实际运维里备份只是自动化链条的一环你往往还会写别的脚本——比如备份完让模型帮你检查 SQL 文件有没有异常、生成一份变更摘要、或者把报错日志丢给模型分析。这些脚本如果每个都硬编码一套 API Key 和 Base URL管理起来就是灾难。TaoToken 在这里的角色是「统一 Key 管理 统一入口」你申请一个 Key所有脚本共用同一套接入配置换模型、换额度只改一处。TaoToken 是什么、能做什么它是一个聚合式的模型调用入口提供兼容 OpenAI 风格的 API。你拿到一个 Key 之后Base URL 指向https://taotoken.net/api就能在 Python 脚本里用标准 SDK 调不同模型。适合谁手上有一堆小脚本、每个都想接模型能力、又不想为每个脚本单独维护密钥和地址的人。对这篇的备份场景来说最典型的用法是备份完成后脚本顺手把「本次备份了哪些表、各文件多大、有没有 0 字节文件」整理成一段文本调模型生成一句人话总结写进日志。接入前你要准备的东西一个 TaoToken 账号、一个 API Key、以及确认你的 Python 环境能发 HTTPS 请求。Key 在控制台的 API Keys 页面创建创建后复制保存页面上只完整显示一次。Base URL 用https://taotoken.net/api注意这个地址不带任何查询参数直接作为 SDK 的base_url用。模型 ID 按你实际要调的填比如做文本总结就选一个对话模型。这里要提醒一句TaoToken 是正规的模型调用入口不是让你绕过什么限制的工具它的用途就是让你在自己的脚本里方便地调模型。备份脚本里接它属于「锦上添花」——核心备份逻辑完全不依赖它就算你不接脚本照样能把表 dump 出来。所以你可以先把备份跑通再考虑要不要加模型总结这一段。配置上建议单独放一个config.ini或者环境变量别把 Key 写死在备份脚本里。原因很简单备份脚本可能会被复制到别的机器、发给同事Key 跟着脚本到处跑迟早泄露。用环境变量或者独立配置文件脚本里只读不写安全得多。下面第三节会给出完整的可复制配置片段包括数据库连接、备份目录、以及可选的 TaoToken 接入参数。3. 可复制配置Python 脚本 cmd 批处理 接入片段这一节是全文的核心所有代码都可以直接抄。先给目录结构建议再给 Python 脚本最后给 cmd 和可选的 TaoToken 配置。目录结构我习惯这样放路径全用正斜杠/Windows 下 Python 里正斜杠不会触发转义问题比反斜杠省心D:/db_backup/ ├── dump.py # 主脚本 ├── dump.cmd # 双击入口 ├── config.ini # 配置含数据库账号可选 TaoToken └── output/ # 备份文件落盘目录先写config.ini把数据库连接和备份目录抽出来[mysql] host 127.0.0.1 port 3306 user root password your_password db_name your_db mysqldump_dir C:/Program Files/MySQL/MySQL Server 8.0/bin [backup] output_dir D:/db_backup/output [taotoken] enable false base_url https://taotoken.net/api api_key sk-你的Key model 你的模型ID然后是dump.py主脚本。它做四件事读配置、用 pymysql 拿表清单、逐表调 mysqldump、校验文件大小。注意mysqldump的密码参数写法-p和密码之间不要有空格否则会被当成库名import os import configparser import pymysql def load_config(pathconfig.ini): cfg configparser.ConfigParser() cfg.read(path, encodingutf-8) return cfg def get_tables(host, user, pwd, db_name, port3306): table_list [] conn pymysql.connect( hosthost, useruser, passwdpwd, dbdb_name, portport, charsetutf8 ) cursor conn.cursor(cursorpymysql.cursors.DictCursor) cursor.execute(show tables;) result cursor.fetchall() key Tables_in_ db_name for r in result: table_list.append(r[key]) cursor.close() conn.close() return table_list def dump_table(sql_dir, host, db_user, db_pwd, db_name, db_table, out_dir, port3306): os.chdir(sql_dir) out_file os.path.join(out_dir, db_table .sql) cmd ( mysqldump -h host -P str(port) -u db_user -p db_pwd --single-transaction --default-character-setutf8 db_name db_table out_file ) print(dumping table:, db_table) code os.system(cmd) if code ! 0: print( [FAIL] exit code:, code) return None size os.path.getsize(out_file) print( [OK] saved:, out_file, size, bytes) return out_file def main(): cfg load_config() host cfg.get(mysql, host) port cfg.getint(mysql, port) user cfg.get(mysql, user) pwd cfg.get(mysql, password) db_name cfg.get(mysql, db_name) sql_dir cfg.get(mysql, mysqldump_dir) out_dir cfg.get(backup, output_dir) if not os.path.exists(out_dir): os.makedirs(out_dir) tables get_tables(host, user, pwd, db_name, port) print(total tables:, len(tables)) ok, fail 0, 0 for t in tables: f dump_table(sql_dir, host, user, pwd, db_name, t, out_dir, port) if f: ok 1 else: fail 1 print(done. ok , ok, fail , fail) if __name__ __main__: main()--single-transaction这个参数很关键。如果你的表引擎是 InnoDB加上它可以在导出时不开全局读锁业务查询不受影响。不加的话备份期间别人写库可能被阻塞。这是从网上很多资料里都能查到的实践我实测下来对线上库友好很多。接着是dump.cmd双击入口。注意cd /d能同时切盘符和目录比先D:再cd更稳echo on cd /d D:\db_backup python dump.py pause如果你想让 cmd 里也能看到 Python 的实时输出别加start直接python dump.py就行start会另开窗口反而看不到。pause保证窗口不闪退你能看到最后ok N fail M那行。最后是可选的 TaoToken 接入片段放在备份完成后调用用来生成一句总结。用标准 OpenAI 兼容写法from openai import OpenAI def summarize_with_taotoken(cfg, text): if not cfg.getboolean(taotoken, enable): return client OpenAI( base_urlcfg.get(taotoken, base_url), api_keycfg.get(taotoken, api_key), ) resp client.chat.completions.create( modelcfg.get(taotoken, model), messages[{role: user, content: 用一句话总结这次备份 text}], ) return resp.choices[0].message.content三件套记牢Base URL 用https://taotoken.net/apiKey 用你控制台创建的Model ID 按实际填。这三样配齐脚本就能调通。4. 验证请求与成功结果双击运行后怎么确认备份真的成了代码写完不算完得验证。这一节讲双击dump.cmd之后你应该看到什么、怎么确认文件是完整的。双击dump.cmd窗口会先显示cd /d D:\db_backup然后跑python dump.py。正常输出大概长这样total tables: 12 dumping table: users [OK] saved: D:/db_backup/output/users.sql 20480 bytes dumping table: orders [OK] saved: D:/db_backup/output/orders.sql 153600 bytes ... done. ok 12 fail 0看到ok 12 fail 0就说明 12 张表全导成功了。如果某张表显示[FAIL] exit code: 1说明 mysqldump 报错了常见原因是密码错、表名带特殊字符、或者 mysqldump 路径不对。文件完整性校验我做了两层。第一层是脚本里的os.path.getsize每个文件导出后立刻读大小0 字节直接说明导出失败比如权限问题或者表不存在。第二层是手动抽查打开output目录随便挑一个.sql文件用记事本或 VS Code 打开看开头有没有CREATE TABLE和INSERT INTO语句。一个正常的表 dump 文件开头是建表语句后面是数据插入语句。如果只有建表没有数据可能是表本身是空的也可能是--no-data之类的参数误加了。再进一步你可以用findstr在 cmd 里快速检查所有文件是否都非空for %f in (D:\db_backup\output\*.sql) do echo %~zf %f这会列出每个文件的大小。如果全是 0那肯定是 mysqldump 没跑起来回去检查mysqldump_dir路径和密码。还有一个验证动作拿导出的单个表文件做一次恢复测试。新建一个测试库把某个.sql导进去看能不能成功mysql -h 127.0.0.1 -uroot -p你的密码 test_db D:\db_backup\output\users.sql能导入成功、表结构和数据都对说明备份文件是可用的不是坏文件。这一步很多人省掉结果真出事要恢复时才发现 dump 是坏的那就晚了。如果你开了 TaoToken 总结备份完成后还会多一行模型生成的总结比如「本次共备份 12 张表最大文件 orders.sql 约 150KB无空文件」。这行会写进日志方便你事后翻记录。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 对照这一节把你会撞到的报错集中列一下对照着改。mysqldump 报「拒绝访问」或 exit code 1最常见是mysqldump_dir路径写错或者路径里有空格没处理好。C:/Program Files/MySQL/...这种带空格的路径在os.system里最好用引号包起来或者干脆把 mysqldump 所在目录加进系统 PATH脚本里直接写mysqldump。另外-p和密码之间绝对不能有空格-p yourpass会被解析成「密码为空 库名 yourpass」。pymysql 连接报 1045 Access denied账号密码错或者该账号没有从当前主机连接的权限。检查config.ini里的 user/password以及 MySQL 里这个用户的 host 是不是%或localhost。TaoToken 调用报 401Key 错了或者没带上。检查api_key是不是完整复制、有没有多余空格。401 基本都是认证问题跟模型 ID 无关。报 local proxy failed / connection refused说明你的脚本在尝试走一个本地代理端口但那个端口没服务。检查环境变量里有没有HTTP_PROXY、HTTPS_PROXY被设成了本地地址有的话清掉让请求直连https://taotoken.net/api。报 reading choices 相关错误比如NoneType object has no attribute choices或 KeyError: choices说明返回体里没有choices字段通常是请求本身失败了但你没检查异常。在调用外面包一层 try把resp整个打印出来看真实返回多半是模型 ID 写错或者额度问题。OAuth 相关报错如果你用的是某些需要 OAuth 授权的客户端比如 Claude Code 这类报 OAuth 失败通常是授权流程没走完或者 token 过期。这类客户端接入时同样要配全三件套Base URL、Key、Model ID。以 Claude Code 为例它的配置里 Base URL 填https://taotoken.net/apiKey 填你的 TaoToken Key模型按需选。如果它走的是settings.json或环境变量确认字段名没写错别把base_url写成baseUrl。备份文件是 0 字节但没报错os.system返回 0 不代表导出成功有些情况下 mysqldump 会把错误写到 stderr 但退出码仍是 0。所以脚本里加了getsize校验0 字节就当失败处理。如果发现某张表总是 0 字节单独手动跑一次 mysqldump 看报什么。cmd 双击闪退没加pause或者 Python 不在 PATH 里导致python命令找不到直接退出。先确认命令行里能跑python --version再加pause。6. 把备份接进你的自动化链条从手动双击到定时任务脚本能双击跑通之后下一步自然是让它自动跑。Windows 自带「任务计划程序」可以设定每天固定时间执行dump.cmd。配置时注意两点一是「起始于」要填D:\db_backup否则脚本里的相对路径config.ini找不到二是程序填cmd.exe参数填/c D:\db_backup\dump.cmd。如果你想让备份完自动调模型生成摘要并推到某个地方就在dump.py的main()末尾接上第 3 节的summarize_with_taotoken把ok/fail和文件列表拼成文本传进去。TaoToken 的 Key 统一放在config.ini里以后你写别的运维脚本也读同一个文件不用到处复制 Key。长期跑编码类、Agent 类任务的话可以了解下 Coding Plan它适合需要持续调用模型的场景比按次零散调用更省心。想先验证模型效果直接去模型对话页面试几句就行。Key 的创建和管理都在 API Keys 页面接入细节看接入文档。最后留个我踩过的坑备份目录别放在系统盘也别放在 MySQL 数据目录里面。放数据目录里万一哪天清理数据目录容易误删放系统盘C 盘满了会影响系统。单独找个数据盘比如D:/db_backup/output再定期把这个目录同步到移动硬盘或网盘才算完整。脚本本身不复杂难的是坚持跑、并且每次跑完你都能确认它是好的——这也是为什么校验和pause不能省。
网站建设高端定制企业官网