实现MySQL数据库的备份与还原的几种方法

上周,一位客户问我有关MySQL备份的问题。
他说他通过直接复制文件的方式备份了MyISAM表,却发现数据丢失了……这让我想起了一些陷阱,所以你要仔细听。

我们先来说说MyISAM表。
将其保存为文件格式对于备份确实很方便。
2 02 3 年我在上海的一个商场帮他们备份系统时,我直接用cp -r把整个数据目录复制到备份盘上。
当时服务器并没有关闭。
结果,操作者在其间插入了一条记录,导致备份文件与原始数据不一致。
后来我教他们使用mysqldump --opt 并添加--lock-tables参数,这样导出时就锁定表,保证数据一致性。
但是这种复制InnoDB表的方法是行不通的,因为InnoDB表的文件结构比较复杂,直接复制会比较乱。

对于 InnoDB 表备份,我建议使用 mysqldump --single-transaction。
2 02 2 年北京某公司的一个项目,他们的服务器2 4 小时都停不下来。
我使用这个参数来导出,并在导出之前运行BEGIN语句,以确保导出过程中数据一致。
需要注意的是,如果表很大,比如几百GB的表,应该加上--quick参数。
否则,mysqldump将首先扫描整个表,然后将其存储在内存中。
我电脑的1 6 G内存快满了。
导出后使用 gzip 压缩文件可以节省大量空间,我每次都会这样做。

另一个不受欢迎的技术是mysqlhotcopy,它特别适合MyISAM表。
我在2 02 1 年备份旧系统时用过它。
mysqlhotcopy -u root -p testdb /tmp/backup 一个命令行就可以完成,比mysqldump快很多。
但前提是必须是类Unix系统,不能在Windows上使用。
该工具的一个主要缺陷是它与 InnoDB 不兼容。
使用前必须先确认表类型。

不太推荐使用 BACKUP TABLE 语法。
我在2 02 3 年测试过,备份MyISAM表时,索引文件丢失,恢复时必须手动添加.MYI文件。
这个东西适合初学者操作不正确,专业运维基本不用。

总结一下:
MyISAM表:直接复制需要锁定,在mysqldump中添加--lock-tables更可靠,mysqlhotcopy更快,但仅适用于Unix
InnoDB表:Mysqldump --必须使用事务,对于大表添加--fast
不要使用RESERVATION TABLES,很容易错过预订索引
使用哪种方法取决于您的业务场景。
如果服务器可以关闭,直接复制就更容易;如果2 4 小时无法停止,mysqldump是标准解决方案。
那里的情况怎么样?无论如何,这取决于你。

如何用C#调用mysqldump进行数据库备份

这就是坑。
别相信。
不要那样做。

直播软件搭建中,MySQL 数据库定时备份的几种方式

是的,这与定期 MySQL 备份有关。
mysqldump 命令是使用最广泛的。

mysqldump直接导出数据库,简单高效。
可以通过命令行完成,数据安全有保证。

例如,这样使用:备份特定库 mysqldump library_name > filename.sql。
完整数据库备份 mysqldump -A > filename.sql。

备份压缩后,传输和存储速度快。
只需 gzip 文件名.sql。

恢复也很容易。
命令行运行 mysql library_name < filename> SHELL环境也还好。

使用 BASH 脚本的 Linux 自动化。
在脚本中输入mysqldump命令来压缩并自动删除旧的备份。

crontab 定期运行脚本。
例如,0 2 /path/script.sh 在凌晨 2 点运行一次。

检查 crontab 任务 crontab -l。
确保脚本按时运行。

mysqldump加上crontab,定时备份自动完成。
数据安全有保障。
你自己看看吧。