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

说实话,MySQL备份取决于你用的是MyISAM还是InnoDB。
当我在老公司时,所有数据库都是MyISAM。
然后,备份就不是很简单了——复制文件就可以了。

记得有一次半夜,用户数量突然猛增,数据库文件膨胀到几百MB。
我手一抖,直接用cp -r把整个数据库目录复制到了备份盘。
结果第二天上线的时候发现大量数据丢失了。
我当时有一种想哭的感觉。
后来我了解到,当它们备份时,首先必须添加板和命令板,以便桌子不会移动。
这个教训太深刻了——直接复制文件必须在低高峰时间系统中进行,而且最好关闭整个站点。
不然就像你说的,你复制的时候服务器就改变了数据,备份文件就变成无用的纸了。

如果是InnoDB,那么麻烦就来了。
这些文件都被压缩成一个大文件 ibdata1 .txt。
你想直接模仿他们吗?我尝试了,但是一半数据丢失了,一半索引不匹配。
之后我改用了mysqldump,这是SQL级别的备份。
它将表转换为 SQL 脚本,然后在恢复期间重新运行表创建和插入操作。

有几个 mysqldump 模块。
例如,--hex-blob,我有一个 Windows 服务器客户端。
我保存了给定的图像并将其直接转换回文本。
当我导入到Linux服务器上时,全是乱码。
后来我添加了该模块并将其保存为十六进制,这很完美。
它也是单事务,非常适合InnoDB,因为它不关闭表,直接在事务中导出数据。
我有一个项目使用它来导入数百GB的数据。
客户端电脑直接连接PPT,但服务器端不连接。

最快的说法是mysqlhotcopy。
随即,我拿起了电信社区计划。
这用于调用数百个 MyISAM 文件并在 Solaris 系统上运行它们。
切换到Linux后,发现这个脚本直接崩溃了。
我用 rsync 重置并重建 shell 脚本。
为什么要快?它只是模仿直接文件并自动将其关闭。
但问题是它只支持MyISAM,InnoDB无法触及。
最近发现几个新项目需要跨平台备份,所以现在大多使用mysqldump。
这是一个非常有趣的任务。
阿里云是一个想要回归OSS的客户。
我立即运行脚本连接远程IP,发现公网传输速度太慢。
最后,我使用 Docker 挂载卷。
通过mysqldump导出的文件存储在本地,然后通过内网传输到OSS,效率更高。

最后备份要看具体情况。
抄权很简单,但很危险; mysqldump 非常安全,但速度慢; mysqlhotcopy是一个技巧,但是条件很苛刻。
由于数据量不大,我有时会手动使用BACKUP TABLE来避免覆盖。
我不为此运行 InnoDB。
我记得数据大概是1 0个左右,不过我建议你查一下公开的文档。

mysql如何备份整个数据库

老实说,使用mysqldump备份数据库分为三步:导出、存储和完成。

首先使用命令 mysqldump -u 用户名 -p 数据库名 > .sql 备份文件。
比如我们去年跑这个项目的时候,要备份mydb库,输入mysqldump -uroot -pmydb > /home/backups/mydb.sql,结构和数据秒级就能完成。
出口过程需要多长时间?去年,mydb 有 3 000 个表,导入它们大约需要十分钟,所以不要着急。

还有一点,备份之后,不要傻乎乎地放在电脑桌面上。
如果系统崩溃,你将失去一切。
保存在NAS或阿里云等地方更安全。
去年我们把它保存到了oss,现在还是我们刚刚备份的那个。
还有另一个重要的细节。
如果你忘记了数据库密码,可以使用 mysqldump -u 用户名 -p '密码' 数据库名 > ...,但是说实话,这非常困难,所以你最好记住它。

一开始我以为直接复制文件就可以了,后来发现是错误的。
mysqldump导出SQL语句。
我可以使用 mysql -u 用户名 -p 数据库名称 <备份文件.sql 来恢复它。
很多人没有注意到这一点。
等等,还有一件事。
如果数据库特别大,可以添加--single-transaction参数,并使用InnoDB引擎库来避免表锁。
我去年在一个项目中尝试过,效率比较高。

建议尝试一下计划任务+远程备份的组合,绝对可以省心。

MySQL如何备份与恢复数据库(全量与增量备份方法详解)

mysqldump适合中小型数据库备份,XtraBackup适合大型数据库热备份,binlog用于增量恢复。
这是一个洞。
不要只依赖mysqldump,也不要忽视XtraBackup的准备级别。
定期测试恢复,确保业务不中断。