当前位置: 首页 > Linux

xtrabackup全量备份增量差异恢复数据自动化备份脚本

时间:2023-04-06 07:19:38 Linux

installxtrabackupwget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo#configureepel源yum-yinstallperlperl-devellibaiolibaio-develperl-Time-HiResperl-DBD-MySQL#安装Xtrabackup软件所需的基础环境包wgethttps://www.percona.com/downloads/XtraBackup/PerconaXtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpmls-lpercona-xtrabackup-24-2.4.4-1.el6.x86_64.rpmyum-y安装percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpmls-l`whichxtrabackupinnobackupex`配置二进制日志mkdir/var/bin-log/binlog-pchown-Rmysql.mysql/var/bin-log/binlogegrep-v"#|^$"/etc/my.cnf在/etc/my.cnf#mysql5.6之前和log之后添加两行log-bin=/var/bin-log/binlog/bin.log-binlog_binexpire_logs_days=7binlog_format=mixedmax_binlog_size=100mbinlog_cache_size=4mmax_binlog_cache_size=512mservicemysqldrestartfullbackupXtrabackup命令,专门用于InnoDB、XtraDB等事务引擎的数据库热备份。它不能用于备份其他类型的引擎数据,例如myIsam。它的主要特点是在备份数据时完全不需要锁表。Innobackupex命令是一个用perl脚本重新打包上述Xtrabackup命令的工具。除了用于InnoDB和XtraDB引擎外,还可以备份MyISAM和多引擎混合使用场景。它的主要特点是备份事务引擎数据,而不是锁定表,可以备份非事务引擎数据,但需要锁定表。mkdir/application/mysql/data-p#创建备份目录innobackupex--defaults-file=/etc/my.cnf--user=root--password=123456--socket=/var/lib/mysql/mysql.sock--no-timestamp/application/mysql/data/full#fullbackupcd/application/mysql/data/fullls-l最终结果如下:totalusage18472drwxr-x---2rootroot12288March2202:153ideapc-rw-r-----1rootroot417March2202:15backup-my.cnf#配置文件backup-rw-r-----1rootroot18874368March2202:14ibdata1#共享表空间备份drwxr-x---2rootroot4096March2202:14mysqldrwxr-x---2rootroot4096March2202:14test-rw-r-----1rootroot15March2202:15xtrabackup_binlog_info-rw-r-----1rootroot113March2202:15xtrabackup_checkpoints#checkpoints信息(复制会根据文件对应的LSN号,会大于给定的LSN号)page数据【增量数据】备份,因为需要比较全量备份的LSN号,所以第一次增量备份是基于全量备份,之后的每次增量备份都是基于最后一次增量备份的备份。)-rw-r-----1rootroot556Mar2202:15xtrabackup_info#xtrabackupinfo-rw-r-----1rootroot2560Mar2202:15xtrabackup_logfile#xtrabackuplogfileincrement先备份从xtrabackup_binlog_info文件中查找并记录最后一个LSN,将InnoDBredolog从LSN复制到Xtrabackup_logfile,然后开始复制所有数据files.ibd,复制完所有数据后停止复制logfile。增量备份和全量备份的过程基本类似,不同的是第二步只复制InnoDB中变化的页面数据,而不是所有物理文件的增量备份....#Omitaddingdatainnobackupex--defaults-file=/etc/my.cnf--user=root--password=123456--socket=/var/lib/mysql/mysql.sock--no-timestamp--incremental-basedir=/application/mysql/data/full--incremental/application/mysql/data/one_inc#第一次增量备份是基于全量备份目录.......#继续修改数据innobackupex--defaults-file=/etc/my.cnf--user=root--password=123456--socket=/var/lib/mysql/mysql.sock--no-timestamp--parallel=3--incremental-basedir=/application/mysql/data/one_inc--incremental/application/mysql/data/two_inc#第二次增量备份是在第一次增量备份目录差异备份的基础上进行的。它与增量备份的不同之处在于它每次都建立在完全备份的基础上。所以在还原的时候,只要将还原点和完整备份合并即可。.....#省略添加数据innobackupex--defaults-file=/etc/my.cnf--user=root--password=123456--socket=/var/lib/mysql/mysql.sock--no-timestamp--incremental-basedir=/application/mysql/data/full--incremental/application/mysql/data/one_inc#第一次增量备份基于全量备份目录........#Continue修改数据innobackupex--defaults-file=/etc/my.cnf--user=root--password=123456--socket=/var/lib/mysql/mysql.sock--no-timestamp--parallel=3--incremental-basedir=/application/mysql/data/full--incremental/application/mysql/data/two_inc#第二次增量备份根据全量备份目录数据库的故障分析和数据库故障drop的原因databasecp-a/var/bin-log/binlog/*/application/mysql/logs#删除binlog增量文件,防止二次损坏updateiptables-Iinput-ptcp--dport3306!-sLocalIp-jDROP#非本机Ip禁止访问数据库cp-a/var/bin-log/binlog/*/application/mysql/logs#移除binlog增量文件,防止二次损坏恢复数据。第一次增量数据,然后第二次,第三次...非最后合并的增量数据必须加--read-only参数,只应用redolog恢复数据,不执行undoreturn翻转未提交的数据。等到最后一次增量备份合并完成后,再进行Undolog回滚数据。如果是增量备份:合并全量备份和增量备份innobackupex--apply-log--redo-only/application/mysql/data/full/#应用redolog恢复全量备份数据innobackupex--apply-log--redo-only--incremental-dir=/application/mysql/data/one_inc/application/mysql/data/full/#合并第一个增量数据到全量备份数据目录innobackupex--apply-log--redo-only--incremental-dir=/application/mysql/data/two_inc/application/mysql/data/full/#将第二次增量数据合并到全量备份数据目录innobackupex--apply-log/application/mysql/data/full/#Cancel--redo-only目的是应用Undolog回滚数据。为最终的数据恢复做准备。如果是差异备份:将全量备份和差异备份合并。只需合并您想要的点。innobackupex--apply-log--redo-only/application/mysql/data/full/#应用redolog恢复全量备份数据innobackupex--apply-log--redo-only--incremental-dir=/application/mysql/data/two_inc/application/mysql/data/full/#我要恢复到第二次。将第二次增量数据合并到全量备份数据目录下即可innobackupex--apply-log/application/mysql/data/full/#Cancel--redo-only目的是应用Undolog回滚数据。为最终的数据恢复做准备。开始恢复binlog日志数据cat/application/mysql/data/two_inc/xtrabackup_binlog_info#查看上次增量/差异的binlog位置信息。这个位置信息后面的binlog就是我们需要的。之前的数据已经在xtrabackup的全量和增量中可用。如果结果为bin.000001486,则增量数据从bin.000001文件的位置点486开始恢复。ll/var/bin-log/binlog/bin.*#出现问题后看binlog,添加这条命令的结果是bin.000002,bin.000003...把bin.000001和下面的文件allweneedtorestorecd/var/bin-log/binlogmysqlbinlog-dtestbin.000001bin.000002bin.000003--start-position=486-rbin.sql#使用mysqlbinlog分析二进制数据并导入到Insql文件,在**-d后添加数据库**,在-r后添加要写入的sql文件----------如果是dropgrep-wdropbin.sql#过滤掉这个词dropLinesed-i'/dropdatabasetest/d'bin.sql#删除掉落数据库的测试语句grep-wdropbin.sql----------正式恢复数据服务mysqldstopsss-lnt|grep3306cd/application/mysqlmkdir-p/application/mysql/data_ori1mv/var/lib/mysql/*/application/mysql/data_ori1cd/var/lib/mysqlrm-rf*#原始数据库数据文件应该是空的mv/application/mysql/data/full/*/var/lib/mysql/#full已恢复一次,不能二次使用。chown-Rmysql.mysql/var/lib/mysqlservicemysqldrestartcd/var/bin-log/binlogmysqltest