mysql5.6基于percona-xtrabackup进行全量及增量备份

mysql5.6基于percona-xtrabackup进行全量及增量备份

一、命令参数
命令功能
xtrabackup主程序
innobackupex在以前是一个perl脚本,会调用xtrabackup这个二进制工具,从xtrabackup 2.3开始,该工具使用C语言进行了重写,当前它是xtabackup二进制工具的一个软连接,但是实际的使用方法却不同,并且在以后的版本中会删除该工具。
xbcrypt加密备份集
xbstream是xtrabackup的流数据功能,通过流数据功能,可将备份内容打包并传给管道后的压缩工具进行压缩;
1、innobackupex命令
参数含义
–compress该选项表示压缩innodb数据文件的备份。
–compress-threads该选项表示并行压缩worker线程的数量。
–compress-chunk-size该选项表示每个压缩线程worker buffer的大小,单位是字节,默认是64K。
–encrypt该选项表示通过ENCRYPTION_ALGORITHM的算法加密innodb数据文件的备份. 目前支持的算法有ASE128,AES192,AES256。
–encrypt-threads该选项表示并行加密的worker线程数量。
–encrypt-chunk-size该选项表示每个加密线程worker buffer的大小,单位是字节,默认是64K。
–encrypt-key该选项使用合适长度加密key,因为会记录到命令行,所以不推荐使用。
–encryption-key-file该选项表示文件必须是一个简单二进制或者文本文件,加密key可通过以下命令行命令生成
–include该选项表示使用正则表达式匹配表的名字[db.tb],要求为其指定匹配要备份的表的完整名称,即databasename.tablename。
–user该选项表示备份账号。
–password该选项表示备份的密码。
–port该选项表示备份数据库的端口。
–host该选项表示备份数据库的地址。
–databases该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开; 如 “xtra_test dba_test”,同时,在指定某数据库时,也可以只指定其中的某张表。如
–tables-file该选项表示指定含有表列表的文件,格式为database.table,该选项直接传给–tables-file。
–socket该选项表示mysql.sock所在位置,以便备份进程登录mysql。
–no-timestamp该选项可以表示不要创建一个时间戳目录来存储备份,指定到自己想要的备份文件夹。
–ibbackup该选项指定了使用哪个xtrabackup二进制程序。 IBBACKUP-BINARY是运行percona xtrabackup的命令。 这个选项适用于xtrbackup二进制不在你是搜索和工作目录, 如果指定了该选项,innoabackupex自动决定用的二进制程序。
–slave-info该选项表示对slave进行备份的时候使用,打印出master的名字和binlog pos, 同样将这些信息以change master的命令写入xtrabackup_slave_info文件。 可以通过基于这份备份启动一个从库。
–safe-slave-backup该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程启动或者关闭知道没有打开的临时表。 如果slave_open_temp_tables在–safe-slave-backup-timeount(默认300秒)秒之后不为0,从库sql线程会在备份完成的时候重启。
–rsync该选项表示通过rsync工具优化本地传输。 当指定这个选项,innobackupex使用rsync拷贝非Innodb文件而替换cp, 当有很多DB和表的时候会快很多,不能–stream一起使用。
–kill-long-queries-timeout该选项表示从开始执行FLUSH TABLES WITH READ LOCK到kill掉阻塞它的这些查询之间等待的秒数。 默认值为0,不会kill任何查询,使用这个选项xtrabackup需要有Process和super权限。
–kill-long-query-type该选项表示kill的类型,默认是all,可选select。
–ftwrl-wait-threshold该选项表示检测到长查询,单位是秒,表示长查询的阈值。
–ftwrl-wait-query-type该选项表示获得全局锁之前允许那种查询完成,默认是ALL,可选update。
–galera-info该选项表示生成了包含创建备份时候本地节点状态的文件xtrabackup_galera_info文件, 该选项只适用于备份PXC。
–stream该选项表示流式备份的格式,backup完成之后以指定格式到STDOUT,目前只支持tar和xbstream。
–defaults-file该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选项的位置。
–defaults-extra-file该选项指定了在标准defaults-file之前从哪个额外的文件读取MySQL配置,必须在命令行的第一个选项的位置。 一般用于存备份用户的用户名和密码的配置文件。
----defaults-group该选项表示从配置文件读取的组,innobakcupex多个实例部署时使用。
–no-lock该选项表示关闭FTWRL的表锁,只有在所有表都是Innodb表并且不关心backup的binlog pos点,如果有任何DDL语句正在执行或者非InnoDB正在更新时(包括mysql库下的表),都不应该使用这个选项,后果是导致备份数据不一致,如果考虑备份因为获得锁失败,可以考虑–safe-slave-backup立刻停止复制线程。
–tmpdir该选项表示指定–stream的时候,指定临时文件存在哪里,在streaming和拷贝到远程server之前,事务日志首先存在临时文件里。在 使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话 xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数–tmpdir指定目录来解决这个问题。
–history该选项表示percona server 的备份历史记录在percona_schema.xtrabackup_history表。
–incremental该选项表示创建一个增量备份,需要指定–incremental-basedir。
–incremental-basedir该选项表示接受了一个字符串参数指定含有full backup的目录为增量备份的base目录,与–incremental同时使用。
–incremental-dir该选项表示增量备份的目录。
–incremental-force-scan该选项表示创建一份增量备份时,强制扫描所有增量备份中的数据页。
–incremental-lsn该选项表示指定增量备份的LSN,与–incremental选项一起使用。
–incremental-history-name该选项表示存储在PERCONA_SCHEMA.xtrabackup_history基于增量备份的历史记录的名字。Percona Xtrabackup搜索历史表查找最近(innodb_to_lsn)成功备份并且将to_lsn值作为增量备份启动出事lsn.与innobackupex–incremental-history-uuid互斥。如果没有检测到有效的lsn,xtrabackup会返回error。
–incremental-history-uuid该选项表示存储在percona_schema.xtrabackup_history基于增量备份的特定历史记录的UUID。
–close-files该选项表示关闭不再访问的文件句柄,当xtrabackup打开表空间通常并不关闭文件句柄目的是正确的处理DDL操作。如果表空间数量巨大,这是一种可以关闭不再访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能。
–compact该选项表示创建一份没有辅助索引的紧凑的备份。
–throttle该选项表示每秒IO操作的次数,只作用于bakcup阶段有效。apply-log和–copy-back不生效不要一起用。
2、xtrabackup命令
参数含义
–apply-log-onlyprepare备份的时候只执行redo阶段,用于增量备份。
–backup创建备份并且放入–target-dir目录中
–close-files不保持文件打开状态,xtrabackup打开表空间的时候通常不会关闭文件句柄,目的是为了正确处理DDL操作。如果表空间数量非常巨大并且不适合任何限制,一旦文件不在被访问的时候这个选项可以关闭文件句柄.打开这个选项会产生不一致的备份。
–compact创建一份没有辅助索引的紧凑备份
–compress压缩所有输出数据,包括事务日志文件和元数据文件,通过指定的压缩算法,目前唯一支持的算法是quicklz.结果文件是qpress归档格式,每个xtrabackup创建的*.qp文件都可以通过qpress程序提取或者解压缩
–compress-chunk-size=#压缩线程工作buffer的字节大小,默认是64K
–compress-threads=#xtrabackup进行并行数据压缩时的worker线程的数量,该选项默认值是1,并行压缩(‘compress-threads’)可以和并行文件拷贝(‘parallel’)一起使用。例如:'–parallel=4 --compress --compress-threads=2’会创建4个IO线程读取数据并通过管道传送给2个压缩线程。
–create-ib-logfile这个选项目前还没有实现,目前创建Innodb事务日志,你还是需要prepare两次。
–datadir=DIRECTORYbackup的源目录,mysql实例的数据目录。从my.cnf中读取,或者命令行指定。
–defaults-extra-file=[MY.CNF]在global files文件之后读取,必须在命令行的第一选项位置指定。
–defaults-file=[MY.CNF]唯一从给定文件读取默认选项,必须是个真实文件,必须在命令行第一个选项位置指定。
–defaults-group=GROUP-NAME从配置文件读取的组,innobakcupex多个实例部署时使用。
–export为导出的表创建必要的文件
–extra-lsndir=DIRECTORY(for --bakcup):在指定目录创建一份xtrabakcup_checkpoints文件的额外的备份。
–incremental-basedir=DIRECTORY创建一份增量备份时,这个目录是增量别分的一份包含了full bakcup的Base数据集。
–incremental-dir=DIRECTORYprepare增量备份的时候,增量备份在DIRECTORY结合full backup创建出一份新的full backup。
–incremental-force-scan创建一份增量备份时,强制扫描所有增在备份中的数据页即使完全改变的page bitmap数据可用。
–incremetal-lsn=LSN创建增量备份的时候指定lsn。
–innodb-log-arch-dir指定包含归档日志的目录。只能和xtrabackup --prepare选项一起使用。
–innodb-miscellaneous从My.cnf文件读取的一组Innodb选项。以便xtrabackup以同样的配置启动内置的Innodb。通常不需要显示指定。
–log-copy-interval=#这个选项指定了log拷贝线程check的时间间隔(默认1秒)。
–log-streamxtrabakcup不拷贝数据文件,将事务日志内容重定向到标准输出直到–suspend-at-end文件被删除。这个选项自动开启–suspend-at-end。
–no-defaults不从任何选项文件中读取任何默认选项,必须在命令行第一个选项。
–databases=#指定了需要备份的数据库和表。
–database-file=#指定包含数据库和表的文件格式为databasename1.tablename1为一个元素,一个元素一行。
–parallel=#指定备份时拷贝多个数据文件并发的进程数,默认值为1。
–preparextrabackup在一份通过–backup生成的备份执行还原操作,以便准备使用。
–print-default打印程序参数列表并退出,必须放在命令行首位。
–print-param使xtrabackup打印参数用来将数据文件拷贝到datadir并还原它们。
–rebuild_indexes在apply事务日志之后重建innodb辅助索引,只有和–prepare一起才生效。
–rebuild_threads=#在紧凑备份重建辅助索引的线程数,只有和–prepare和rebuild-index一起才生效。
–statsxtrabakcup扫描指定数据文件并打印出索引统计。
–stream=name将所有备份文件以指定格式流向标准输出,目前支持的格式有xbstream和tar。
–suspend-at-end使xtrabackup在–target-dir目录中生成xtrabakcup_suspended文件。在拷贝数据文件之后xtrabackup不是退出而是继续拷贝日志文件并且等待知道xtrabakcup_suspended文件被删除。这项可以使xtrabackup和其他程序协同工作。
–tables=name正则表达式匹配database.tablename。备份匹配的表。
–tables-file=name指定文件,一个表名一行。
–target-dir=DIRECTORY指定backup的目的地,如果目录不存在,xtrabakcup会创建。如果目录存在且为空则成功。不会覆盖已存在的文件。
–throttle=#指定每秒操作读写对的数量。
–tmpdir=name当使用–print-param指定的时候打印出正确的tmpdir参数。
–to-archived-lsn=LSN指定prepare备份时apply事务日志的LSN,只能和xtarbackup --prepare选项一起用。
–user-memory = #通过–prepare prepare备份时候分配多大内存,目的像innodb_buffer_pool_size。默认值100M如果你有足够大的内存。1-2G是推荐值,支持各种单位(1MB,1M,1GB,1G)。
–version打印xtrabackup版本并退出。
–xbstream支持同时压缩和流式化。需要客服传统归档tar,cpio和其他不允许动态streaming生成的文件的限制,例如动态压缩文件,xbstream超越其他传统流式/归档格式的的优点是,并发stream多个文件并且更紧凑的数据存储(所以可以和–parallel选项选项一起使用xbstream格式进行streaming)。

二、备份

简介:

  • https://docs.percona.com/percona-xtrabackup/2.4/index.html
1:安装
  • centos

    yum install -y perl rsync perl-Data-Dumper
    wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.5/binary/redhat/7/x86_64/percona-xtrabackup-2.3.5-1.el7.x86_64.rpm
    yum clean all 
    yum repolist
    yum localinstall percona-xtrabackup-2.3.5-1.el7.x86_64.rpm
    
  • ubuntu

    wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
    dpkg -i percona-release_0.1-6.bionic_all.deb
    apt-get update
    apt-get install percona-xtrabackup
    source /etc/profile
    
2:创建mysql备份用户
create user 'xtrabackup'@'%' identified by 'YzBlZDhhM2U5Y2M';
GRANT reload,LOCK TABLES,process,replication client ON *.* TO 'xtrabackup'@'%';
flush privileges;
3、执行全备
  • 准备一个全库备份,备份目录会自动根据当前日期创建,如/root/innobackup/2022-10-12_15-34-31,如果不想它创建子目录, 添加参数 --no-timestamp
innobackupex --defaults-file=/etc/my.cnf --host=111.111.0.62 --port=3307 --user=xtrabackup --password=YzBlZDhhM2U5Y2M --no-timestamp --backup /root/innobackup/$(date +%Y%m%d-%H%M%S)
  • 不指定默认配置文件,指定sock文件
innobackupex  --no-defaults --socket=/data/mysql/data/mysql.sock --host=111.111.0.62 --port=3307 --user=xtrabackup --password=YzBlZDhhM2U5Y2M --no-timestamp --backup /root/innobackup/$(date +%Y%m%d-%H%M%S)
  • 压缩备份
innobackupex --defaults-file=/etc/my.cnf --host=111.111.0.62 --port=3307 --user=xtrabackup --password=YzBlZDhhM2U5Y2M --stream=tar |gzip -> /root/innobackup/test-mysql56-backups-$(date +%Y%m%d-%H%M%S).tar.gz
4、增量备份
4.1基于全备进行增量备份
innobackupex --defaults-file=/etc/my.cnf --host=111.111.0.62 --port=3307 --user=xtrabackup --password=YzBlZDhhM2U5Y2M --no-timestamp --incremental /root/innobackup/$(date +%Y%m%d-%H%M%S) --incremental-basedir=/root/innobackup/20221012-162709
4.2基于上一个增量备份进行增量备份
innobackupex --defaults-file=/etc/my.cnf --host=111.111.0.62 --port=3307 --user=xtrabackup --password=YzBlZDhhM2U5Y2M --no-timestamp --incremental /root/innobackup/$(date +%Y%m%d-%H%M%S) --incremental-basedir=/root/innobackup/$(ls -lt /root/innobackup/|grep -E '^d'|head -1|awk '{print $NF}')

三、恢复

1、全量备份的重做日志redo log 进行提交
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /root/innobackup/2022-10-12_15-34-31/
2、然后逐一对增量备份的事务日志进行合并到全量备份里
增量备份1:
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /root/innobackup/2022-10-12_15-34-31/ --incremental-dir=/root/innobackup/2022-10-12_15-36-08/
增量备份2:
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /root/innobackup/2022-10-12_15-34-31/ --incremental-dir=/root/innobackup/2022-10-12_15-47-19/
增量备份3:
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /root/innobackup/2022-10-12_15-34-31/ --incremental-dir=/root/innobackup/2022-10-12_15-48-13/
3、对已经合并重做日志redo log的全库 回滚未提交的事件
innobackupex --defaults-file=/etc/my.cnf --apply-log  /root/innobackup/2022-10-12_15-34-31/
4、修改mysql配置文件
  • /root/innobackup/2022-10-12_15-34-31/backup-my.cnf
[mysqld]
innodb_checksum_algorithm=innodb
#innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=524288000
#innodb_fast_checksum=false
innodb_page_size=16384
#innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0
#rds_encrypt_data=false
#innodb_encrypt_algorithm=aes_128_ecb
#新增跳过授权,root无密码登录
skip-grant-tables
5、修改属组属主
#注意:root目录不行 ,需要修改数据目录位置,否则没有权限启动mysql,会报错
chown -R mysql.mysql /root/innobackup/2022-10-12_15-34-31
6、安装相同版本数据库
  • yum安装
bash -c 'cat > /etc/yum.repos.d/mysql.repo <<EOF
[MySQL-Community-5.6]
name=MySQL Community 5.6
baseurl=https://mirrors.ustc.edu.cn/mysql-repo/yum/mysql-5.6-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOF' && \
yum clean all 
yum install mysql mysql-server
7、启动mysql
mysqld_safe --defaults-file=/root/innobackup/2022-10-12_15-34-31/backup-my.cnf --user=mysql --datadir=/root/innobackup/2022-10-12_15-34-31/
8、登录验证数据(无密码)
mysql -uroot -p
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答你的问题。对于使用Percona XtraBackup工具来实现MySQL增量备份的脚本,您可以参考以下代码: #!/bin/bash # MySQL credentials user="username" password="password" host="localhost" db_name="database_name" # Backup directory backup_path="/path/to/backup/folder" # Timestamp (sortable AND readable) timestamp=$(date +%Y-%m-%d_%H-%M-%S) # Full backup file name full_backup_name="$db_name-$timestamp-full-backup.sql" # Incremental backup file name incremental_backup_name="$db_name-$timestamp-incremental-backup.sql" # Log file log_file="$backup_path/backup.log" # Number of days to keep daily backups backup_retention=7 # Create backup folder mkdir -p $backup_path # Remove backups older than retention period find $backup_path/* -mtime +$backup_retention -exec rm {} \; # Lock tables to get consistent backup mysql --user=$user --password=$password --host=$host --execute="FLUSH TABLES WITH READ LOCK;" # Full backup echo "Starting full backup..." xtrabackup --backup --user=$user --password=$password --host=$host --target-dir=$backup_path --no-lock --parallel=4 --extra-lsndir=$backup_path --backup-and-apply-log-only > $log_file 2>&1 echo "Full backup complete: $full_backup_name" # Unlock tables to restore normal operation mysql --user=$user --password=$password --host=$host --execute="UNLOCK TABLES;" # Sleep to ensure that next backup is incremental sleep 10 # Incremental backup echo "Starting incremental backup..." xtrabackup --backup --user=$user --password=$password --host=$host --target-dir=$backup_path --no-lock --parallel=4 --extra-lsndir=$backup_path --backup-and-apply-log-only --incremental-basedir=$backup_path > $log_file 2>&1 echo "Incremental backup complete: $incremental_backup_name" # Unlock tables to restore normal operation mysql --user=$user --password=$password --host=$host --execute="UNLOCK TABLES;" # Compress backups echo "Compressing backups..." gzip -9 $backup_path/*.sql echo "Compression complete." # Done! echo "All backups complete."

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值