博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用xtrabackup备份数据库
阅读量:6274 次
发布时间:2019-06-22

本文共 4889 字,大约阅读时间需要 16 分钟。

hot3.png

使用xtrabackup备份数据库

提供一个参考文档:

mysqldump对于导出几个G的数据库或几个表,还是不错的,速度并不慢。一旦数据量达到几十上百G,无论是对原库的压力还是导出的性能,mysqldump就力不从心了。Percona-Xtrabackup备份工具,是实现MySQL在线热备工作的不二选择,可进行全量、增量、单表备份和还原。xtrabackup命令只支持InnoDB和XtraDB存储引擎的数据库非阻塞地备份,而innobackupex通过perl封装了一层xtrabackup,对MyISAM的备份通过加表读锁的方式实现。

在CentOS7上这样安装percona-xtrabackup

安装yum源rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm  yum install -y percona-xtrabackup-24 //yum安装2.4版本

用xtrabackup做全量备份的命令是:

innobackupex --defaults-file=/etc/my.cnf  --host=10.100.100.100  --port=3333 \--user=bakuser --password=your_pass  /data/backup/mysql--socket=/var/lib/mysql/mysql.sock

说明:

在执行该备份操作之前,需要先创建一个用户bakuser(用户名自定义),并授予reload, lock tables, replication client, process, super等权限。备份数据将会放到/data/backup/mysql目录里面,自动生成一个以当前日期、时间为名字的目录,例如2018-10-15_03_00_01。

增量备份:

innobackupex --host=10.100.100.100  --port=3333 --user=bakuser --password=your_pass \ --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/last-backup-file

说明:

--incremental :表示本次备份是一个增量备份(若针对的上次备份为一个全量备份,这里也可以认为是个差量备份)--incremental-basedir:指定本次增量备份针对的哪一个备份(可以是上个增量,也可以是上个全量)增量备份可以一环扣一环,比如可以周一做一个全量备份,然后周二做周一的增量,周三做周二的增量。。。

恢复:

1)全量备份的恢复

预备恢复:innobackupex --apply-log /PATH/TO/BACKUP/dir-quan --user-memroy=2G停止MySQL/MariaDB,将datadir目录里面的数据清空(或者挪走)恢复:innobackupex --defaults-file=/etc/my.cnf  --copy-back  /PATH/TO/BACKUP/dir-quan改权限:chown -R mysql:mysql /PATH/TO/datadir启动MySQL/MariaDB

说明:

--apply-log:指定全备文件路径--use-memory=N:指定恢复数据时,使用内存大小,默认为100M,若备份数据量大且有足够的空闲内存时,    可以用来指定大小的内存来工作,单位可以使用G,M....。--defaults-file: 指定配置文件路径,通过配置文件它会找到datadir在哪里

2)增量备份的恢复

停止服务删除dataidir里面的数据准备全量:innobackupex --apply-log --redo-only  /PATH/TO/全量备份目录准备增量1:innobackupex --apply-log --redo-only  /PATH/TO/全量备份目录 --incremental-dir=/PATH/TO/第一次增量备份目录准备增量2:innobackupex --apply-log --redo-only /PATH/TO/全量备份目录  --incremental-dir=/PATH/TO/第二次增量备份目录......准备最后一个增量:innobackupex --apply-log /PATH/TO/全量备份目录  --incremental-dir=/PATH/TO/最后一次增量备份目录再次准备全量:innobackupex --apply-log   /PATH/TO/全量备份目录   #(这次不用加--redo-only了)

恢复:

innobackupex --copy-back /PATH/TO/全量备份目录改权限:chown -R mysql:mysql /PATH/TO/datadir启动MySQL/MariaDB

说明:

--redo-only:表示进行准备(应用日志)工作时,只进行redo操作,只会重做已提交但未应用的事务,不会回滚未提交的事务。原因是后面还有个增量备份,未提交的可能在后面增量备份时进行提交。需要注意的是,最后一个增量备份不需要加这个选型。

MariaDB新版本(10.3.x+)的备份和恢复

MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。原因可能是MariaDB10.3以上版本的redo日志格式和之前不同了。解决方案是,使用mariabackup,它是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份。这个工具是基于Percona的XtraBackup(版本2.3.8)的解决方案:

全量备份:

mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21

测试:

[root@wangzb01 ~]# mkdir /data/backup[root@wangzb01 ~]# mariabackup --backup --user=root --password=mysql --target-dir /data/backup/2019-03-19[root@wangzb01 ~]# cd /data/backup/[root@wangzb01 backup]# ls 2019-03-19/aria_log.00000001  bbs             ibdata1      performance_schema      xtrabackup_infoaria_log_control   blog            ib_logfile0  test                    zabbixbackup-my.cnf      ib_buffer_pool  mysql        xtrabackup_checkpoints  zrlog

全量恢复:

停止数据库清空datadirmariabackup --prepare --target-dir /data/backup/2019-02-21/ mariabackup --copy-back --target-dir /data/backup/2019-02-21/改属主、属组启动

测试:

[root@wangzb01 ~]# /etc/init.d/mysqld stop    //恢复之前先停止服务[root@wangzb01 ~]# mv /data/mysql /data/mysql_bak   //改名[root@wangzb01 ~]# du -sh /data/mysql/255M	/data/mysql/[root@wangzb01 ~]# mariabackup --prepare --target-dir /data/backup/2019-03-19/[root@wangzb01 ~]# echo $?   //查看命令是否执行成功[root@wangzb01 ~]# mariabackup --copy-back --target-dir /data/backup/2019-03-19/        //会在/data/下自动创建mysql目录[root@wangzb01 ~]# echo $?[root@wangzb01 ~]# du -sh /data/mysql147M	/data/mysql[root@wangzb01 mysql]# chown -R mysql:mysql /data/mysql[root@wangzb01 mysql]# /etc/init.d/mysqld start[root@wangzb01 ~]# du -sh /data/mysql/255M	/data/mysql/

增量备份:

mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21第一个增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-02-21_inc1 --incremental-basedir /data/backup/2019-02-21第二个增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-02-21_inc2 --incremental-basedir /data/backup/2019-02-21_inc1

增量恢复:

先准备全备mariabackup --prepare --target-dir /data/backup/2019-02-21 --apply-log-only准备第一个增量:cd /data/backupmariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc1 --apply-log-only准备第二个增量:mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc2 --apply-log-only恢复:mariabackup --copy-back  --target-dir ./2019-02-21

备份脚本

#!/bin/bash bakdir=/data/backupd=`date +%F`for db in bbs blog db2do    mysqldump -uroot -paminglinux $db > $bakdir/$db\_$d.sqldonecd $bakdirgzip *_$d.sqlfind ./ -name "*.gz" -mtime +30 |xargs rm

转载于:https://my.oschina.net/u/3954059/blog/3024837

你可能感兴趣的文章
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
算法与数据结构1800题 图
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
浅析DNS解析过程
查看>>
使用prometheus + grafana + pushgateway搭建监控可视化系统
查看>>
计算机网络不完全整理(上)--春招实习
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>
把你的devtools从webpack里删除
查看>>
Git 常用操作和流程
查看>>