Mysql 使用mysqldump进行备份与还原

方案

Mysql提供了多种备份还原的方案,详见7.2 Database Backup Methods
简单来说,
1.Mysql企业版热备份
2.mysqldump
3.拷贝表文件
4.使用sql语句生成文件备份
此方法不支持数据结构的变更
5.启用二进制日志进行增量备份(默认启动)
6.使用从站进行备份

mysqldump的使用

注意这里讲的是Mysql 8.x的语法
先找到mysqldump.exemysql.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也可以输出为txtcsvxml等格式
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

posted @ 2020-06-22 14:46  Lulus  阅读(1703)  评论(0编辑  收藏  举报