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

MySQL的数据备份非常重要。
有两种方法,一种叫mysqldump,另一种叫XtraBackup。

mysqldump适用于数据库不大,只有几十、几百GB,或者用于开发、测试环境的情况。
操作也很简单,直接在命令行输入命令即可。
例如,如果要备份所有数据库,请键入 mysqldump -u root -p --all-databases > all_databases_backup.sql。
这会将所有数据库备份到 all_databases_backup.sql 文件。
如果要备份指定数据库,例如mydatabase,请键入mysqldump -u root -p mydatabase > mydatabase_backup.sql。
这会将 mydatabase 数据库备份到 mydatabase_backup.sql 文件。
如果要备份特定表,例如 mydatabase 中的 users 和 products 表,请键入 mysqldump -u root -p mydatabase users products > mydatabase_tables_backup.sql。
这会将用户和产品表备份到 mydatabase_tables_backup.sql 文件。
InnoDB表一致性备份,为了避免表锁定,可以输入mysqldump -u root -p --single-transaction --master-data=2 mydatabase > mydatabase_innodb_backup.sql。
恢复时,只需运行mysql -u root -p < mydatabase>
这东西的优点就是好办。
生成的文件是文本文件,清晰可见且可跨平台传输。
缺点是当数据库较大时,备份和恢复会很慢,而且mysqldump可能会锁表(MyISAM表),生成的SQL文件会较大。

XtraBackup 非常适合那些拥有大量数据(例如数 TB)或每天 2 4 小时营业并需要热备份的企业。
操作步骤如下。
对于完整备份,只需键入 xtrabackup --backup --target-dir=/data/backups/full_backup_$(date +%F)。
然后,要准备备份,请键入 xtrabackup --prepare --target-dir=/data/backups/full_backup_$(date +%F)。
要恢复数据,请键入 cp -r /data/backups/full_backup_YYYY-MM-DD//var/lib/mysql/chown -R mysql:mysql /var/lib/mysql/。

这样做的优点是热备份、速度快、文件系统级复制效率高。
缺点是需要安装额外的工具,并且在恢复期间需要设置过程。

增量备份和时间点恢复的核心依赖于MySQL二进制日志(binlog)来记录所有修改操作,通过全量备份+binlog的应用实现时间点恢复。
操作步骤如下。
确保binlog已打开并在MySQL配置文件中设置:log_bin=mysql-bin binlog_format=ROW。
XtraBackup增量备份,基于全量备份的增量备份:xtrabackup --backup --target-dir=/data/backups/incremental_backup_$(date +%F) --incremental-basedir=/data/backups/full_backup_YYYY-MM-DD。
准备增量备份:xtrabackup --prepare --target-dir=/data/backups/incremental_backup_$(date +%F) --incremental-dir=/data/backups/full_backup_YYYY-MM-DD。
时间点恢复:恢复全量备份后,在目标时间点使用binlog:mysqlbinlog --start-datetime="2 02 3 -1 0-2 6 1 0:00:00" --stop-datetime="2 02 3 -1 0-2 6 1 0:3 0:00" mysql-bin.000000 mysql-bin.000000 mysql -u root -p。
或者按位置恢复:mysqlbinlog --stop-position=1 2 3 4 5 6 mysql-bin.000001 | mysql -u root -p。

注意:数据一致性,恢复前请确保备份数据一致,如XtraBackup准备过程。
Binlog管理,定期清理过期的binlog,避免磁盘空间耗尽。
定期恢复测试验证备份的可恢复性,防止发生灾难时备份失败发生 工具的选择,mysqldump非常适合灵活且小规模的场景。
XtraBackup非常适合大规模和高可用性场景。

在linux下 如何使用mysqldump进行mysql的完全备份? 要完整命令 记得是完全备份不是某个库。。

使用mysqldump导入数据库简单来说就是使用shell命令导出MySQL数据。
例如:
外壳 mysqldump 数据库 > 备份文件.sql
这会将整个数据库导出到 SQL 文件。
如果只想导出部分表,则按照表名:
shell mysqldump 数据库表1 表2 > 备份文件.sql
对于特定选项,请运行 mysqldump --help。

备份示例:
shell mysqldump --opt 数据库 > 备份文件.sql
这将以最快的速度导出数据库。

恢复数据,首先创建数据库:
shell mysql 管理创建 target_db_name
然后输入数据:
shell mysql target_db_name < 备份文件.sql
对于计划备份,您可以使用脚本,例如 dbbackup。
该脚本每天进行备份,并且仅保留最近五天的备份。

要设置计划任务,请使用 crontab:
shell crontab -e
添加一行,例如每天0:1 0执行:
shell 0 1 0 /root/dbbackup
这样,数据库就得到定期备份。