You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter中用Python逐个导出MySQL数据库表

解决Jupyter中执行mysqldump导出MySQL表的问题

你的代码存在几个关键问题,导致导出失败或权限报错,以下是修正方案:

问题分析

  1. 路径转义错误:Windows路径中的反斜杠\在Python字符串中是转义字符,G:\Databasebackup\dbmain会被解析为无效路径,系统找不到目标目录。
  2. 特殊字符解析问题:密码中的$是Shell的特殊变量符号,直接在命令字符串中会被Shell解析,导致密码不正确,触发Access Denied。
  3. 未等待命令执行&错误捕获:subprocess.Popen是非阻塞调用,会立刻返回"Done"但实际命令可能还在执行或已失败,且没有捕获错误输出,无法排查问题。

修正后的代码方案

方案1:使用Shell模式但修复路径与特殊字符

用原始字符串处理路径,同时将密码用单引号包裹避免Shell解析$,并改用subprocess.run等待命令执行、捕获错误:

import subprocess

tablename = "templedger"
# 用原始字符串r""避免路径转义,密码用单引号包裹防止$被解析
dump_cmd = r'mysqldump -u user1 -p\'B57$52\' db_main %s > G:\Databasebackup\dbmain\%s.sql' % (tablename, tablename)

try:
    # 等待命令执行完成,捕获输出
    result = subprocess.run(dump_cmd, shell=True, check=True, capture_output=True, text=True)
    print("导出成功")
except subprocess.CalledProcessError as e:
    print(f"导出失败,错误信息:{e.stderr}")

方案2:不使用Shell模式(更安全,推荐)

将命令拆分为参数列表,避免Shell解析特殊字符,同时处理路径:

import subprocess
import os

tablename = "templedger"
output_path = os.path.join(r"G:\Databasebackup\dbmain", f"{tablename}.sql")

# 拆分命令为列表,避免Shell解析特殊字符
cmd_args = [
    "mysqldump",
    "-u", "user1",
    "-pB57$52",  # 这里$不会被解析,因为没有Shell介入
    "db_main",
    tablename
]

try:
    # 打开输出文件,将mysqldump的输出写入
    with open(output_path, "w", encoding="utf-8") as f:
        subprocess.run(cmd_args, check=True, stdout=f, stderr=subprocess.PIPE, text=True)
    print(f"表 {tablename} 已成功导出到 {output_path}")
except subprocess.CalledProcessError as e:
    print(f"导出失败,错误信息:{e.stderr}")
except IOError as e:
    print(f"文件写入错误:{e}")

额外检查项

  • 确认user1账号拥有db_main数据库的SELECT和LOCK TABLES权限(mysqldump必需),可通过MySQL命令行执行:
    GRANT SELECT, LOCK TABLES ON db_main.* TO 'user1'@'%';
    FLUSH PRIVILEGES;
    
  • 确认Jupyter运行的用户对G:\Databasebackup\dbmain目录有写入权限,可以手动在该目录创建文件测试。
  • 若依然报写入错误22,检查路径是否存在,是否有特殊字符(比如空格),若有需用引号包裹路径。

内容的提问来源于stack exchange,提问作者Stumbling Through Data Science

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:50:15