mysql - 使用 Powershell 针对 MySQL 运行 SQL 脚本

标签 mysql powershell

我有一个 Powershell 脚本,每晚使用 mysqldump 备份我的 MySQL 数据库。这一切都很好,但我想扩展脚本以从生产数据库 (db2) 的备份更新报告数据库 (db1)。我已经编写了以下测试脚本,但它不起作用。我感觉问题是将 sql 文件读取到 CommandText,但我不确定如何调试。

[system.reflection.assembly]::LoadWithPartialName("MySql.Data")    
$mysql_server = "localhost"
$mysql_user = "root"
$mysql_password = "password"
write-host "Create coonection to db1"
# Connect to MySQL database 'db1'

$cn = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection
$cn.ConnectionString = "SERVER=$mysql_server;DATABASE=db1;UID=$mysql_user;PWD=$mysql_password"
$cn.Open()
write-host "Running backup script against db1"
# Run Update Script MySQL 
$cm = New-Object -TypeName MySql.Data.MySqlClient.MySqlCommand
$sql = Get-Content C:\db2.sql
$cm.Connection = $cn
$cm.CommandText = $sql
$cm.ExecuteReader()
write-host "Closing Connection"
$cn.Close()

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

这一行:

$sql = Get-Content C:\db2.sql 

返回一个字符串数组。当它被分配给需要字符串的东西时,PowerShell 将使用 $OFS(输出字段分隔符)变量的内容将字符串数组连接成一个字符串。如果未设置此变量,则默认分隔符为单个空格。试试这个,看看它是否有效:

$sql = Get-Content C:\db2.sql 
...
$OFS = "`r`n"
$cm.CommandText = "$sql"

或者,如果您使用的是 PowerShell 2.0:

$sql = (Get-Content C:\db2.sql) -join "`r`n"

关于mysql - 使用 Powershell 针对 MySQL 运行 SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680665/

相关文章:

MySQL:如何重组此代码以消除添加和删除中间列

mysql - 按 2 列分组

powershell - 将值从 powershell 传递到 TFS 构建工作流程

powershell - 如何在PowerShell中计算对象数量?

object - 如何从数组向 PowerShell 对象添加属性

mysql - 新手需要查询帮助(MYSQL)

MySQL FULLTEXT 搜索只返回完全匹配

mysql - 如何从表中获得前三名

powershell - 在数组创建期间调用函数以导出包含 Zip 文件的文件夹的内容

azure - 将 Powershell 脚本中的值返回到 Azure DevOps 任务