2016-08-03 29 views
1

私のMYSQL DBをサーバからバックアップするアプリケーションを構築しました。データベースは以前よりも大きくなりました。私の視点からは何度かエラーが発生します:MySQLのバックアップでタイムアウトが期限切れになった - C#

メッセージ:タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。 Full:MySql.Data.MySqlClient.MySqlException(0x80004005):タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。 ---> System.TimeoutException:IO操作のタイムアウト MySql.Data.MySqlClient.TimedStream.StopTimer() MySql.Data.MySqlClient.TimedStream.Read(Byte []バッファ、Int32オフセット、Int32カウント)で at (ストリームストリーム、Byte []バッファ、Int32オフセット、Int32カウント) at MySql.Data.MySqlClient.MySqlStream.ReadFully MySql.Data.MySqlClient.Driver.FetchDataRowでMySql.Data.MySqlClient.NativeDriver.FetchDataRow(のInt32 STATEMENTID、のInt32列)でMySql.Data.MySqlClient.MySqlStream.ReadPacketで.MySqlClient.MySqlStream.LoadPacket() () (Int32 statementId、Int32 columns) at MySql.Data.MySqlClient.ResultSet.GetNextRow()MySql.Data.MySqlClientでMySql.Data.MySqlClient.ExceptionInterceptor.Throw(例外例外) でMySql.Data.MySqlClient.ResultSet.NextRow(たCommandBehavior挙動) MySql.Data.MySqlClient.MySqlDataReader.Readで() でMySql.Data.MySqlClient.MySqlBackup.Export_RowsData(文字列tableNameのでMySql.Data.MySqlClient.MySqlDataReader.Readで.MySqlConnection.Throw MySql.Data.MySqlClient.MySqlConnection.HandleTimeoutOrThreadAbortに(例外EX) (例外EX) () 、文字列selectSQL)MySql.Data.MySqlClient.MySqlBackup.ExportStartでMySql.Data.MySqlClient.MySqlBackup.Export_Rows(文字列tableNameの文字列selectSQL)MySql.Data.MySqlClient.MySqlBackup.Export_TableRowsで で() ()$at MySql.Data.MySqlClient.MySqlBackup.ExportToFile(文字列ファイルパス) at MYSQL_Auto_Backup.Form1.Backup()(c:\ Users \ Belal \ Documents \ Visual Studio 2012 \ Projects \ MYSQL自動バックアップ\ MYSQL自動バックアップ\ Form1)。 CS:ライン132

コード:

// Backup... 
      DateTime Time = DateTime.Now; 
      year = Time.Year; 
      month = Time.Month; 
      day = Time.Day; 
      hour = Time.Hour; 
      minute = Time.Minute; 
      second = Time.Second; 
      millisecond = Time.Millisecond; 

      //Save file to Path with the current date as a filename 
      string path; 
      path = txb_Path.Text + year + "-" + month + "-" + day + "--" + hour + "-" + minute + "-" + second + ".sql"; 
      file = path; 
      using (MySqlConnection conn = new MySqlConnection(connectionString)) 
      { 
       using (MySqlCommand cmd = new MySqlCommand()) 
       { 
        using (MySqlBackup mb = new MySqlBackup(cmd)) 
        { 
         cmd.Connection = conn; 
         conn.Open(); 
         mb.ExportToFile(file); 
         conn.Close(); 
        } 
       } 
      } 

答えて

1

あなたは "CommandTimeoutの" プロパティでタイムアウトを変更することができます。

他にも(データベースの管理ツールなどから)バックアップを実行する方法はたくさんあります。例えば、下記を参照のこと。
https://dev.mysql.com/doc/mysql-enterprise-backup/3.11/en/meb-scheduled-backups.html

もう1つのマイナーポイント。次の行のために:あなたがやっているよう

string path; 
path = txb_Path.Text + year + "-" + month + "-" + day + "--" + hour + "-" + minute + "-" + second + ".sql"; 
file = path; 

なぜ何か

file = String.Format("{0}{1}-{2}-3--{4}-{5}...", txb_Path.Text, year, month...); 

のような文字列の連結を行いませ.NETの文字列は不変であるため、.NETで、実際にはかなり高価です。

+0

mb.Command.CommandTimeout = int.MaxValue;を追加しました。 –

関連する問題