mysql之使用exec.Command在Go中使用Mysql脚本

lhb25 阅读:273 2025-06-02 22:19:02 评论:0

我正在尝试执行MySQL查询,该查询将输出作为CSV文件提供给指定目录。

func executeCommand(){ 
    cmd := exec.Command("/usr/local/mysql/bin/mysql", "-e", "-hlocalhost", "-P3131", "-uroot", "-pmyPassword", "dbName",  "> /path/to/output/folder/fileName.csv") 
    var out bytes.Buffer 
    var stderr bytes.Buffer 
    cmd.Stdout = &out 
    cmd.Stderr = &stderr 
    err = cmd.Run() 
    if err != nil { 
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) 
    } 
    fmt.Println("Result: " + out.String()) 
} 

我收到以下错误:

退出状态1:mysql:[警告]在命令行上使用密码
界面可能不安全。

当我删除输出目录路径时,则没有错误。
但是我需要将生成的输出文件输出到指定目录。

我也尝试用 >替换 source,但是没有运气。
另外,当我在Terminal上运行它时,它可以按预期工作,但是我无法通过Go复制它们。

/ usr / local / mysql / bin / mysql -e“从tableName选择*” -u根-p -h本地主机-P 3131 dbName> /path/to/output/folder/fileName.csv

我尝试在SO上搜索,但找不到任何相关内容。
任何帮助,将不胜感激。

请您参考如下方法:

>是用于输出重定向的shell元字符。当您在外壳中运行命令时,外壳会预先准备好命令并通过输入/输出重定向执行特殊操作。它不会将重定向元字符传递给程序。但是,当您使用exec.Command()时,您仅提供要传递给命令的参数。

如果要保存命令的输出,则需要使用cmd.Stdout缓冲区。

另请参阅How to execute Mysql Script in golang using exec.Command


标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号