方案
Mysql提供了多種備份還原的方案,詳見7.2 Database Backup Methods
簡單來說,
1.Mysql企業版熱備份
2.mysqldump
3.拷貝表文件
4.使用sql語句生成文件備份
此方法不支持數據結構的變更
5.啟用二進制日志進行增量備份(默認啟動)
6.使用從站進行備份
mysqldump的使用
注意這里講的是Mysql 8.x的語法
先找到mysqldump.exe
和mysql.exe
的Bin目錄
在MySQL Server
目錄下面有,比如C:\Program Files\MySQL\MySQL Server 8.0\bin
,在MySQL Workbench
目錄下也有,如C:\Program Files\MySQL\MySQL Workbench 8.0 CE
然后cmd
或者powershell
備份
mysqldump -h 數據庫ip -u 用戶名 -p --single-transaction --quick --lock-tables=false 數據庫名稱 表名 > 數據備份位置.sql
然后會要求輸入密碼,輸入密碼后,備份成功
選項:
--single-transaction:在從服務器中轉儲數據之前發出BEGIN SQL語句。
--quick:強制逐行轉儲表。 這為具有較少RAM和或大型數據庫的系統(在其中將表存儲在內存中可能會帶來問題)提供了更高的安全性。
--lock-tables = false:不為備份會話鎖定表。
還原
mysql -h 數據庫ip -u 用戶名 -p 數據庫名稱 < 數據還原文件位置.sql
再次輸入密碼
參考鏈接
Use mysqldump to Back Up MySQL or MariaDB
Using mysqldump for Backups
mysqldump 選項
注意
1.mysqldump支持連接遠程數據庫並進行備份、還原操作
需要注意的是,遠程的備份和還原文件,是寫入&讀取當前客戶端所在的系統文件,而不是服務器的文件
2.mysqldump也可以輸出為txt
、csv
、xml
等格式
3.密碼的問題
(1)可以配置.my.cnf
來解決
[mysqldump]
host=localhost
user=mysqluser
password=secret
(2)每次命令時輸入
mysqldump -u [user name] -p[password] [database name] > [dump file]
mysqldump -h x.x.x.x -u userName -ppassword databaseName tableName --single-transaction --quick --lock-tables=false> xxx.sql
-p[password]
中間沒有空格
4.>箭頭的問題
可以去掉箭頭
mysqldump -h 數據庫ip -u 用戶名 -p密碼 數據庫 數據表 -r 備份文件位置.sql
參考資料
How to perform a mysqldump without a password prompt?
關於MYSQLDUMP命令密碼的輸入問題
mysqldump and restore with special characters. øæåØÆÅ
在C#中使用mysqldump
FileStream StreamDB = new FileStream("dbData.sql", FileMode.Create, FileAccess.Write);
using (StreamWriter SW = new StreamWriter(StreamDB))
{
ProcessStartInfo proc = new ProcessStartInfo();
string cmd = " --host=localhost --user=root --password=pass dbData";
proc.FileName = "C:\\Program Files\\MySQL\\MySQL Server5.0\\bin\\mysqldump.exe";
proc.RedirectStandardInput = false;
proc.RedirectStandardOutput = true;
proc.UseShellExecute = false;
proc.WindowStyle = ProcessWindowStyle.Minimized;
proc.Arguments = cmd;
proc.CreateNoWindow = true;
Process p = Process.Start(proc);
SW.Write(p.StandardOutput.ReadToEnd());
p.WaitForExit();
p.Close();
SW.Close();
StreamDB.Close();
}
來自Re: Problems trying to run mysqldump from c#
或者有現成的庫MySqlBackup.Net,說明文檔在這里
↑親測有效,強烈推薦,不過現在好像沒有更新了~
使用MySqlBackup.Net需要注意如果數據量較大,可能出現操作超時的問題:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
需要將Command的CommandTimeout
設置大一些
參考資料
Connect C# to MySQL
Backup and Restore a MySQL Database in C#.NET