#mysql #vb.net
Вопрос:
Как создать резервную копию базы данных базы данных mysql в VB.Net?
Ответ №1:
Вы можете использовать MySqlBackup.NET, который является альтернативой mysqldump.
Официальный сайт и документация > >https://github.com/MySqlBackupNET/MySqlBackup.Net
Примеры:
Резервное копирование базы данных MySQL
Dim conn As MySqlConnection = New MySqlConnection(constr)
Dim cmd As MySqlCommand = New MySqlCommand
cmd.Connection = conn
conn.Open
Dim mb As MySqlBackup = New MySqlBackup(cmd)
mb.ExportToFile("C:backup.sql")
conn.Close
Восстановление базы данных MySQL
Dim conn As MySqlConnection = New MySqlConnection(constr)
Dim cmd As MySqlCommand = New MySqlCommand
cmd.Connection = conn
conn.Open
Dim mb As MySqlBackup = New MySqlBackup(cmd)
mb.ImportFromFile("C:backup.sql")
conn.Close
Я являюсь одним из авторов этого проекта.
Комментарии:
1. Я продолжаю получать эту ошибку: В системе произошло необработанное исключение типа «System.IO.FileLoadException». Windows. Формы. Дополнительная информация о библиотеке dll: Не удалось загрузить файл или сборку «MySqlBackup, Версия=2.0.9.2, Культура=нейтральная, PublicKeyToken=null» или одну из ее зависимостей. Требуется сборка со строгим именем. (Исключение из результата: 0x80131044)
2. @MarkIsmail это может быть вызвано различной версией целевой платформы .NET Framework между вашим проектом и указанной библиотекой DLL.
3. @mjb Чем
Imports
вы пользуетесь? потому что там написано: Тип «MySqlBackup» не определен.4. @kiLLua >>> MySQL.Data.MySqlClient. для получения дополнительной информации вы можете посетить: github.com/MySqlBackupNET/MySqlBackup.Net
Ответ №2:
Используйте этот код. Это работает на меня.
У меня была такая проблема, а затем я нашел эту статью
«http://www.experts-exchange.com/Programming/Languages/.NET/Q_27155602.html»
Пример был на C#. Я вручную преобразовал его в vb.net и добавьте преобразование в «utf8».
Imports System.Text
Public Class Form1
Dim OutputStream As System.IO.StreamWriter
Sub OnDataReceived1(ByVal Sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs)
If e.Data IsNot Nothing Then
Dim text As String = e.Data
Dim bytes As Byte() = Encoding.Default.GetBytes(text)
text = Encoding.UTF8.GetString(bytes)
OutputStream.WriteLine(text)
End If
End Sub
Sub CreateBackup()
Dim mysqldumpPath As String = "d:mysqldump.exe"
Dim host As String = "localhost"
Dim user As String = "root"
Dim pswd As String = "Yourpwd"
Dim dbnm As String = "BaseName"
Dim cmd As String = String.Format("-h{0} -u{1} -p{2} {3}", host, user, pswd, dbnm)
Dim filePath As String = "d:backupfieName.sql"
OutputStream = New System.IO.StreamWriter(filePath, False, System.Text.Encoding.UTF8)
Dim startInfo As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo()
startInfo.FileName = mysqldumpPath
startInfo.Arguments = cmd
startInfo.RedirectStandardError = True
startInfo.RedirectStandardInput = False
startInfo.RedirectStandardOutput = True
startInfo.UseShellExecute = False
startInfo.CreateNoWindow = True
startInfo.ErrorDialog = False
Dim proc As System.Diagnostics.Process = New System.Diagnostics.Process()
proc.StartInfo = startInfo
AddHandler proc.OutputDataReceived, AddressOf OnDataReceived1
proc.Start()
proc.BeginOutputReadLine()
proc.WaitForExit()
OutputStream.Flush()
OutputStream.Close()
proc.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CreateBackup()
End Sub
End Class
Ответ №3:
вы могли бы вызвать mysqldump, но вам, возможно, потребуется запустить свой VB.NET на сервере Mysql.
Ответ №4:
Я обнаружил, что самый простой способ-это использовать mysqldump.exe который является автономным приложением.
mysqldump --host=[HOSTNAME] --user=[USER] --password=[PASSWORD] -R [DATABASE NAME] > [PATH TO BACKUP FILE]
У нас были проблемы с резервными копиями, не сохранявшими функции БД, но переключатель-R отсортировал их, поэтому я рекомендую использовать его, если вы используете хранимые процедуры или функции в своей БД.
для восстановления созданного файла используйте вместо этого команду mysql.
mysql --host=[HOSTNAME] --user=[USER] --password=[PASSWORD] [DATABASE NAME] < [PATH TO BACKUP FILE]
Ответ №5:
Вы можете прочитать данные каждой таблицы и записать их в новую базу данных.
Ответ №6:
Я бы написал сохраненный процесс, так как MySQL 5 поддерживает их, который обрабатывает всю «тяжелую» работу с данными. Затем просто создайте запланированную задачу, которая вызывает процедуру каждую «ночь». Для этого последнего компонента я настоятельно рекомендую Powershell….это потрясающе.
Ответ №7:
Это то, что я использую для резервного копирования данных в mysql. Я делаю копию mysqldump.exe и mysql.exe и сохраните его в моем LIB_PATH, после чего следующий код создаст резервную копию ваших данных. Вы можете указать свой mysqldump.exe каталог и назначьте его LIB_PATH, укажите свои учетные данные в аргументах, затем укажите свой выходной каталог, для моего установлено значение BACKUP_DIR, и я использую предварительно отформатированный Сейчас() в качестве имени файла. Код довольно прямолинеен. Удачи
Using myProcess As New Process()
Dim newfiledb As String = BACKUPDIR_PATH amp; Format(Now(), "MMM_dd_yyyy@h~mm_tt").ToString amp; "_local.sql"
Try
myProcess.StartInfo.FileName = "mysqldump.exe"
myProcess.StartInfo.WorkingDirectory = LIB_PATH
myProcess.StartInfo.Arguments = "--host=localhost --user=username --password=yourpassword yourdatabase -r " amp; newfiledb
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
myProcess.Start()
myProcess.WaitForExit()
MsgBox("Backup Created ... " amp; vbNewLine amp; newfiledb)
Catch ex As Exception
MsgBox(ex.Message, vbCritical vbOKOnly, ex.Message)
Finally
myProcess.Close()
End Try
End Using