xtrabackup 备份及介绍
1. 介绍
-
Xtrabackup 是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)
-
Xtrabackup是一个开源的免费的热备份工具,在Xtrabakcup包中主要有Xtrabackup和innobakcupex两个工具。其中Xtrabackup只能备份InnoDB和XtraDB两种引擎;Innobackup则是封装了Xtrabakcup,同时增加了备份MylSAM引擎功能。
-
Xtrabakcup备份时不能备份表结构、触发器等等,也不能智能区分.idb数据库文件。另外innobakcup还不能完全支持增量备份,需要和Xtrabakcup结合起来实现全备的功能
2. xtrabackup的网址 下载与安装
1. 安装
[root@129a ~]# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
2.测试存储库,确保现在可以从存储库中获得包:
yum list | grep percona
3.启用存储库:percona-release enable-only tools release
4.通过运行安装Percona XtraBackup:
yum -y install percona-xtrabackup-24
Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。
常用选项:
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--databases 指定数据库
--incremental 创建增量备份
--incremental-basedir 指定包含完全备份的目录
--incremental-dir 指定包含增量备份的目录
--apply-log 对备份进行预处理操作
--redo-only 不回滚未提交事务
--copy-back 恢复备份目录
--defaults-file #指定MySQL配置文件 ,如果不指定–defaults-file,默认值为/etc/my.cnf
--user=root #备份操作用户名,一般都是root用户
/mnt/backup/ #备份路径
--socket=/tmp/mysql.sock #指定mysql.sock登录(可通过innobackupex --help查看)
--parallel=2 --throttle=200 #并行个数,根据主机配置选择合适的,默认是1个,多个可以加快备份速度。
2>/mnt/backup/bak.log #备份日志,将备份过程中的输出信息重定向到bak.log
--apply-log #在备份目录下生成一个xtrabackup_logfile事务日志文件, 此外,创建新的事务日志。 InnoDB配置从文件“backup-my.cnf”中读取。
--redo-only #全备数据后对DB有增量更改,则必须执行此操作,在准备基本完全备份和合并除最后一个之外的所有增量备份时,应使用此选项
[root@129a ~]# xb
xbcloud xbcloud_osenv xbcrypt xbstream
xbcloud和xbcloud_osenv是xtrabackup新的高级特性:云备份;
xbcrypt也是新的特性,加密备份集;
xbstream是xtrabackup的流数据功能,通过流数据功能,可将备份内容打包并传给管道后的压缩工具进行压缩;
xtrabackup是主程序;
3. 备份
3.1 全备
--backup:表⽰该操作为备份操作
--target-dir:指定备份⽂件的路径
--user:备份的⽤户
--password:该⽤户的密码
--socket:指定socket启动⽂件路径
创建目录
[root@129a ~]# mkdir -p /data/db_backup
[root@129a ~]# innobackupex --defaults-file=/etc/my.cnf --user=root -prun123456 --databases="db_zone_9033 db_zone_9034" --parallel=2 --throttle=200 /data/db_backup/xtrabackup --socket=/tmp/mysql.sock
查看数据
[root@129a ~]# ls /data/db_backup/
xtrabackup
[root@129a ~]# cd /data/db_backup/xtrabackup/
[root@129a xtrabackup]# ls
2022-07-03_23-02-51
[root@129a xtrabackup]# cd 2022-07-03_23-02-51/
[root@129a 2022-07-03_23-02-51]# ls
backup-my.cnf ibdata1 xtrabackup_info
ib_buffer_pool xtrabackup_checkpoints xtrabackup_logfile
[root@129a 2022-07-03_23-02-51]#
配置文件注释:
(1) backup-my.cnf —— 备份命令用到的配置选项信息;
(2) ibdata1 —— 备份的表空间文件;
(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;
(5) xtrabackup_logfile —— 备份的重做日志文件。
(6) xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
3.2 xtrabackup_checkpoints 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息:
[root@129a 2022-07-03_23-02-51]# cat xtrabackup_checkpoints
backup_type = full-backuped//可以看出是全备份
from_lsn = 0 //记录了LSN,日志偏移量
to_lsn = 2749995
last_lsn = 2750004 //LSN号
compact = 0
recover_binlog_info = 0
flushed_lsn = 2750004
[root@129a 2022-07-03_23-02-51]#
3.3 backup-my.cnf 备份命令用到的配置选项信息:
[root@129a 2022-07-03_23-02-51]# cat backup-my.cnf
# This MySQL options file was generated by innobackupex.
# The MySQL server
[mysqld]
innodb_checksum_algorithm=crc32
innodb_log_checksum_algorithm=strict_crc32
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=50331648
innodb_fast_checksum=false
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_directory=./
innodb_undo_tablespaces=0
server_id=0
redo_log_version=1
server_uuid=ba4c1f54-fad5-11ec-8d88-000c29ce9c21
master_key_id=0
[root@129a 2022-07-03_23-02-51]#
3.4xtrabackup_info,记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息
[root@129a 2022-07-03_23-02-51]# cat xtrabackup_info
uuid = 3692a19f-fae1-11ec-9f23-000c29ce9c21
name =
tool_name = innobackupex
tool_command = --defaults-file=/etc/my.cnf --user=root -p... --databases=db_zone_9033 db_zone_9034 --parallel=2 --throttle=200 /data/db_backup/xtrabackup --socket=/tmp/mysql.sock
tool_version = 2.4.26
ibbackup_version = 2.4.26
server_version = 5.7.37
start_time = 2022-07-03 23:02:51
end_time = 2022-07-03 23:02:53
lock_time = 1
binlog_pos =
innodb_from_lsn = 0
innodb_to_lsn = 2749995
partial = Y
incremental = N
format = file
compact = N
compressed = N
encrypted = N
[root@129a 2022-07-03_23-02-51]#
4. 恢复
4.1 全量备份后,执行全量恢复
- 关闭数据库并移除数据文件,创建新的数据库目录
[root@129a ~]# systemctl stop mysqld
[root@129a ~]#
[root@129a ~]# mv /opt/data/ /opt/mysql_bak/
[root@129a ~]# mkdir -p /opt/data
[root@129a ~]#
- 在全备目录上重放已提交的事务:
[root@129a ~]# innobackupex --defaults-file=/etc/my.cnf --user=root -prun123456 --socket=/tmp/mysql.sock --apply-log --redo-only /data/db_backup/xtrabackup/2022-07-03_23-02-51/
- .用全备的数据文件来恢复数据
[root@129a ~]# innobackupex --defaults-file=/etc/my.cnf --user=root -prun123456 --socket=/tmp/mysql.sock --datadir=/opt/data --copy-back /data/db_backup/xtrabackup/2022-07-03_23-02-51/
[root@129a ~]# cd /opt/data/
[root@129a data]# ls
ib_buffer_pool xtrabackup_info
ibdata1 xtrabackup_master_key_id
[root@129a data]#
- 全备数据恢复后,授权数据库文件,并启动MySQL
[root@129a ~]# systemctl status mysqld.service
● mysqld.service - mysql server daemon
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2022-07-03 23:27:17 CST; 20s ago
Process: 525516 ExecStop=/usr/local/mysql/support-files/mysqld stop (code=exited, status=0/SUCCESS)
Process: 558278 ExecStart=/usr/local/mysql/support-files/mysqld start (code=exited, status=1/FAILURE)
Main PID: 123118 (code=exited, status=0/SUCCESS)
Jul 03 23:27:14 129a.example.com systemd[1]: Starting mysql server daemon...
Jul 03 23:27:17 129a.example.com mysqld[558278]: Starting MySQL... ERROR! The server quit without updating PID file (/opt/data/mysq>
Jul 03 23:27:17 129a.example.com systemd[1]: mysqld.service: Control process exited, code=exited status=1
Jul 03 23:27:17 129a.example.com systemd[1]: mysqld.service: Failed with result 'exit-code'.
Jul 03 23:27:17 129a.example.com systemd[1]: Failed to start mysql server daemon.
[root@129a ~]# which exit-code
/usr/bin/which: no exit-code in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@129a ~]#