xtrabackup备份分为两种
全量备份
1.备份数据
要创建备份,请xtrabackup使用xtrabackup --backup option. 您还需要指定一个xtrabackup --target-dir选项,即备份的存储位置,如果InnoDB数据或日志文件未存储在同一目录中,您可能还需要指定它们的位置。如果目标目录不存在,xtrabackup 将创建它。如果该目录确实存在并且为空,则 xtrabackup 将成功。xtrabackup 不会覆盖现有文件,它将失败并出现操作系统错误 17, file exists.
bash
xtrabackup --backup --user=root --password --parallel=3 --target-dir=/data/mysqlbackups/
参数解析
bash
--socket= 选项表示mysql.sock所在位置,以便备份进程登录mysql
--user= 用于备份的账号
--password= 用于备份账号的密码
--parallel= 此参数用于开启多个子进程并发备份多个数据文件
--target-dir= 备份文件保存的位置
--backup 表示执行备份操作
备份成功显示结果如下
bash
160906 10:19:17 Finished backing up non-InnoDB tables and files
160906 10:19:17 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): '62988944'
xtrabackup: Stopping log copying thread.
.160906 10:19:18 >> log scanned up to (137343534)
160906 10:19:18 Executing UNLOCK TABLES
160906 10:19:18 All tables unlocked
160906 10:19:18 Backup created in directory '/data/backups/'
160906 10:19:18 [00] Writing backup-my.cnf
160906 10:19:18 [00] ...done
160906 10:19:18 [00] Writing xtrabackup_info
160906 10:19:18 [00] ...done
xtrabackup: Transaction log of lsn (26970807) to (137343534) was copied.
160906 10:19:18 completed OK!
2.恢复数据
进入MySQL的data目录执行下面代码
bash
xtrabackup --copy-back --target-dir=/data/mysqlbackups/
显示 completed OK!则恢复成功
4.修改文件权限为MySQL用户
如果你安装MySQL没有指定用户,忽略这一步
bash
chown -R mysql:mysql /opt/mysql5.6.46/data/
3.重启MySQL
bash
systemctl restart mysqld
如果启动报错查看MySQL进程是否还在运行
bash
ps aux | grep mysql
如果有杀死进程,重启即可
增量备份
增量备份时,每一次增量备份都需要以上一次的备份为基础,之后再将增量备份运用到第一次全备之上,从而完成备份。
1.准备全量备份
bash
xtrabackup --backup --user=root --password --parallel=3 --target-dir=/data/backup/init
2.准备增量备份
每一次增量数据库随便添加内容,以便观察数据变化
bash
xtrabackup --backup --user=root --password --parallel=3 --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/init
xtrabackup --backup --user=root --password --parallel=3 --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1
xtrabackup --backup --user=root --password --parallel=3 --target-dir=/data/backup/inc3 --incremental-basedir=/data/backup/inc2
3.准备备份(个人喜欢叫做合并备份)
bash
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/init
xtrabackup --prepare --apply-log-only --parallel=3 --target-dir=/data/backup/init --incremental-basedir=/data/backup/inc1
xtrabackup --prepare --apply-log-only --parallel=3 --target-dir=/data/backup/init --incremental-basedir=/data/backup/inc2
注意:只有最后一次备份不加--apply-log-only
bash
xtrabackup --prepare --parallel=3 --target-dir=/data/backup/init --incremental-basedir=/data/backup/inc3
参数解析:
--prepare
: 这个参数用于执行备份后的准备操作,准备数据库文件以供后续的恢复。
--apply-log-only
: 这个参数用于仅应用日志操作,通常在复制/备份链中使用。它不会执行完整的准备操作,只是应用备份文件中的事务日志,以便将备份链连接起来。
对备份文件执行日志应用,以确保事务的一致性。
为恢复做一些准备,如创建一些必要的文件和目录。
4.恢复备份(步骤如全量备份)
bash
xtrabackup --copy-back --target-dir=/data/backup/init