Резервное копирование базы данных базы данных mysql в VB.Net

#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