我不确定这是否应该在SuperUser中发布,因为我们在Workbench中使用内置的迁移向导,如果应该移动这个问题,请告诉我.
目标
我们目前正在将数据库从一个服务器迁移到另一个服务器,并且由于MySQL Workbench具有一个称为迁移向导的内置函数,我们认为我们会以快乐的方式迁移它.我们有16种不同的数据库模式需要以不同的大小进行迁移(最小为3 MB,最大为76 GB).
问题
我们开始尝试迁移其中一个中型到大型的,位于14.7 GB并且开始很好但是在它成功迁移了一半的表之后我们得到错误"MySQL服务器已经消失".在确保连接稳定并将其与电缆连接后(可能是无线信号丢失了?)并确保了完全权限并使用root用户进行迁移,我们仍然得到"服务器已经消失"错误.
然后我们尝试使用较小的数据库工作正常,因此我们认为这可能是一个超时问题.我们尝试删除超时设置但我们仍然会为较大的数据库获得相同的错误.真正的踢球者是我们目前正在经历的.
当我们在150 MB数据库上尝试此操作时,迁移向导会正确完成迁移,而不会出现任何错误或警告.出于好奇,我运行了以下代码
SELECT table_name AS "Table",
round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
FROM information_schema.TABLES
WHERE table_schema = "TableName"
ORDER BY "Table";
Run Code Online (Sandbox Code Playgroud)
确保表格大小正确.令我们惊讶的是,源数据库中的表总和为150 MB,但目标数据库中的总和为94 MB.
问题
除了超时和特权之外,为什么我们得到"服务器已经消失"错误还有什么其他原因呢?为什么迁移向导会说迁移成功而没有警告或错误,但实际上只有大约60%的数据被迁移?迁移向导不可信,还是不应该信任的表大小查询?我们是否完全错误,即您是否建议另一种更稳定的迁移数据库方式?
如果需要,我很乐意提供更多信息.
编辑:
MySQL版本:5.1.41(Ubuntu)
我们还检查了每个模式中每个表中的行数,虽然大多数都是正确的,但有些错误.这是数据不一致发挥作用的地方.在150 MB/94 MB示例中,有25个表.在这25个表中,23个是正确的,2个不是.在源代码中,其中一个表有257万行,但其中只有150万行最终出现在目标表中.
编辑2:
再次运行相同的查询现在给了我150个中的94个,150个中的8个,150个中的24个,现在是第四次迁移整个数据库.我猜这个问题位于其他地方,但不能为我的生活找出原因.迁移150 MB数据花了92分钟.推断这将给我大约一个月的时间来迁移75 GB的数据库 - 这显然是不对的.
我在我的VBA代码中循环几个图表时遇到了问题.我99.7%肯定这是一个非常容易和快速的解决方案,但我的大脑今天不工作.
我希望代码循环遍历ActiveSheet上的每个图表,并且对于图表包含的每个数据系列,我希望它添加系列的最后一个值.在我的例子中,我有9个图表,每个图表有3个系列(必然会改变,有些有2个,但我离题了).
我有以下代码
Sub AddLastValue()
Dim myChartObject As ChartObject
Dim myChart As Chart
Dim mySrs As Series
Dim myPts As Points
With ActiveSheet
For Each myChartObject In .ChartObjects
For Each myChart In .Chart
For Each mySrs In .SeriesCollection
Set myPts = .Points
myPts(myPts.Count).ApplyDataLabels Type:=xlShowValue
Next
Next
Next
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
如果我删除循环代码,只是做一个
Set myPts = ActiveSheet.ChartObjects(1).Chart. _
SeriesCollection(1).Points
myPts(myPts.Count).ApplyDataLabels type:=xlShowValue
Run Code Online (Sandbox Code Playgroud)
然后它适用于特定的图表和系列,所以我很肯定这是我正在弄乱的循环.
有人能告诉我在哪里弄乱了循环代码吗?
这可能更像是"PowerShell如何处理变量和管道"而不是特定的程序问题,但由于它看起来像是奇怪的行为(对我来说),我以为我会在这里发布它.
我在使用PowerShell将变量导出到CSV时遇到了一些困难,发现这个Stack问题对我有很大帮助.然而,当摆弄输出时,我得到了两个不同的结果,这取决于我调用Export-CSV函数的方式.
我有一个自定义的PS对象,看起来大致如下:
Account Partner ProjectName ProjectPhase
1 A Test Start
2 B Test2 Start
3 A Test4 End
4 C Test3 Middle
....
Run Code Online (Sandbox Code Playgroud)
当我使用以下行时,它正确输出CSV文件:
$csvBody | Export-Csv -Path "$targetPath\$fileName" -Encoding Unicode -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
但是,当我使用以下行时,它不会:
Export-Csv -InputObject $csvBody -Path "$targetPath\$fileName" -Encoding Unicode -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
在这种情况下,输出如下所示:Count,"Length","LongLength","Rank","SyncRoot","IsReadOnly","IsFixedSize","IsSynchronized"263,"263","263"," 1" , "System.Object的[]", "假", "真", "假"
我从其他Stack帖子中了解到输出成为$ csvBody的属性,这是一个数组.我的问题是,为什么会发生这种情况时,我没有管道对象以出口为CSV,但它不会发生时,我正在使用的管道?
从这篇文章中我了解到我可以使用 [Regex]::Escape() 来转义字符串变量中所有常见的转义字符。问题是我将使用包含 & 字符的路径,然后在 URL 中使用该路径进行 RestAPI 调用,并且该转义方法不会转义 & 字符。
当路径包含 & 时,API 会将其解释为 URL 中的运算符并且无法正确解析:
$MyPath = "\\Server\Share\Something & Something Else"
$MyURL= "http://localhost/Address/to/APIResource/"
Invoke-RestMethod -Method Get -Uri ("$MyURL" + "?path=$MyPath") -UseDefaultCredentials
Run Code Online (Sandbox Code Playgroud)
?path=$MyPath 是问题所在,因为 $MyPath 包含 & 因此不起作用。如何转义 $MyPath 中的 & 字符以使其与 RestAPI 一起使用?
这篇堆栈文章和这篇文章看起来都很相似,但我在那里找不到我的解决方案。我在理解 reg 导出与 reg 导入行为之间的差异时遇到问题。
在 powershell 内运行 reg export 时,它返回“操作成功完成”,但 reg import 会抛出一个终止错误,提示“操作成功完成”。即使抛出错误,注册表文件也会正确导入。一个例子:
PS C:\Windows\System32> reg export HKLM\Software\MySoftware C:\Scripts\MyFile.reg
The operation completed successfully.
PS C:\Windows\System32> reg import C:\Scripts\MyFile.reg
reg : The operation completed successfully.
At line:1 char:1
+ reg import C:\Scripts\MyFile.reg
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (The operation completed successfully.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
Microsoft 的 reg import 命令文档指出,返回码为 0 表示成功,1 表示失败。为什么 Powershell 将成功作为 reg 导出的常规成功消息返回,但将其作为 reg 导入的终止错误抛出?
我以管理员身份运行 Powershell,登录用户是服务器上的本地管理员。如有任何帮助,我们将不胜感激。
我找到了几个示例,展示了如何获取、设置和创建注册表项及其属性和值。我需要查找注册表项属性的属性类型(双字、字符串、多字符串等)
如果我这样做,Get-ItemProperty我可以获取属性的值,如下所示:
PS C:\> Get-ItemProperty "HKLM:\SOFTWARE\MySoftware\MyKey\" -Name MyProperty
MyProperty : MyValue
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\MySoftware\MyKey\
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\MySoftware
PSChildName : MyValue
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Run Code Online (Sandbox Code Playgroud)
但是,这并没有告诉我 MyProperty 的值是字符串、双字型、多字符串还是其他任何形式。我发现获取该信息的唯一方法是将其通过管道传输到Get-Member,因为定义告诉我它是什么类型:
PS C:\> Get-ItemProperty "HKLM:\SOFTWARE\MySoftware\MyKey\" -Name MyProperty | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
PSChildName NoteProperty string PSChildName=MyKey
PSDrive NoteProperty PSDriveInfo PSDrive=HKLM
PSParentPath NoteProperty string PSParentPath=Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\MySoftware
PSPath NoteProperty …Run Code Online (Sandbox Code Playgroud)