4种备份恢复的方式
- mysqldump
- mysqlbackup
- mysqlhotcopy
- xtrabackup/innobackupex
mysqldump
在日常工作中,我们会经常使用mysqldump
的命令来创建SQL格式的转储文件来备份数据库,或者我们把数据导出后做数据迁移,主备搭建等操作。mysqldump
是一个逻辑备份工具,复制原始的数据库对象定义和表数据产生一组可执行的SQL语句。默认情况下生成insert语句,也能生成其他分隔符的输出或XML格式的文件。
使用方法:
shell> mysqldump [arguments] > filename.sql
备份所有的数据库
shell > mysqldump --all-databases > all_databases.sql
#不包含系统自带的库INFORMATION_SCHEMA,performance_schema,sys
备份指定数据库
shell > mysqldump --databases db1 db2 db3 > db.sql
# 如果只包含一个数据库,可以省略 --databases 直接使用mysqldump db1 > db1.sql
#区别:不加 --databases的话,数据库转储输出不包含创建数据库的语句和use语句,所以可以直接导入到其他名字的数据库里。
备份指定表
mysqldump --user[username] --password=[password] [databases name] [table name] > table_name.sql
几个重要的参数
mysqlbackup
mysqlbackup是Oracle公司提供的针对企业的备份软件,全称MySQL Enterprise Backup,是一个收费软件。
全量备份
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/ backup
解释一下参数:
databases 要备份的数据库
with-timestamp 产生一个当前时间的备份目录。mysqlbackup这个工具要求一个空目录才能做备份。所以这个会常用。
backup-dir 备份的目录 。
compress:压缩备份 这个提供了多种压缩方法和压缩级别。1--9,压缩比依次递增。
backup 是备份的方式, 一共有如下几种方式
Backup operations: backup, backup-and-apply-log, backup-to-image
Update operations: apply-log, apply-incremental-backup
Restore operations: copy-back, copy-back-and-apply-log
Validation operation: validate
Single-file backup operations: image-to-backup-dir, backup-dir-to-image, list-image, extract
其实,在大多数情况下,单个文件备份,使用backup-to-image命令创建,性能优于backup。buckup这个命令只执行一个完整的备份过程的初始阶段。需要通过再次运行mysqlbackup运用apply-log 命令,使备份一致。
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/2017-04-28_12-49-35/ apply-log
当然你可以直接用backup-and-apply-log 不过这个时候的备份将不能用于增量了。
增量备份
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/ --incremental --incremental-base=dir:/u01/backup/2017-04-28_12-49-35 --incremental-backup-dir=/u01/backup/incremental backup
这个是基于上次的备份做的备份,当然也可以基于某一个log position之后做。
--incremental:代表增量备份;
--incremental-base:上次全备的目录;
--incremental-backup-dir:增量备份的保存的目录
backup-to-image
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/ --backup-image=all.mbi backup-to-image
备份之后可以很清楚的发现这个比backup要节省很多空间,把所有的文件都以二进制的方式放在了all.mbi这个文件里,可以使用list-image来查看具体内容。
mysqlhotcopy
mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能用于备份MyISAM存储引擎和ARCHIVE引擎,并且是一个服务器命令,只能运行在数据库目录所在的机器上.与mysqldump备份不同,mysqldump属于逻辑备份,备份时是执行的sql语句.使用mysqlhotcopy命令前需要要安装相应的软件依赖包.
备份一个库
mysqlhotcopy db_name [/path/to/new_directory]
备份一张表
mysqlhotcopy db_name./table_name/ /path/to/new_directory
xtrabackup/innobackupex
Percona XtraBackup是一款基于MySQL的热备份的开源实用程序,它可以备份5.1到5.7版本上InnoDB,XtraDB,MyISAM存储引擎的表, Xtrabackup有两个主要的工具:xtrabackup、innobackupex 。
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁。
首先我们先来简单的了解一下xtrabackup是怎么工作的。xtrabackup基于innodb的crash-recovery(实例恢复)功能,先copy innodb的物理文件(这个时候数据的一致性是无法满足的),然后进行基于redo log进行恢复,达到数据的一致性。
全备
xtrabackup --backup --target-dir=/data/backup/base
增量备份
当我们做过全量备份以后会在目录下产生xtrabackup_checkpoints的文件 这里面记录了lsn和备份方式,我们可以基于这次的全量做增量的备份。
$cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base
这个时候xtrabackup也是去打开了xtrabackup_checkpoints文件进行上一次备份的信息查看。这个时候去查看增量备份的xtrabackup_checkpoints也记录了这些信息。
$cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1676085
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
这也意味着你可以在增量的备份上继续增量的备份。
同样的,xtrabackup也支持压缩(--compress)、加密(--encrypt)、并行(--parallel)等操作,但是和mysqlbackup不同的是这个没有同时的备份binlog,而mysqlbackup是备份了binlog的。