mysql在线备份恢复--Xtrabackup
2019独角兽企业重金招聘Python工程师标准>>>
Xtrabackup
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
Xtrabackup介绍
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
- xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
- innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
Xtrabackup功能
- 在线(热)备份整个库的InnoDB、 XtraDB表
在xtrabackup的上一次整库备份基础上做增量备份(innodb only) 以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)
- MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下:
- 首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。
- 在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。
- 首先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。
- 因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。
Xtrabackup备份原理
- XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。
- InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:
- XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走。为什么要急着复制走呢? 因为transactions log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。
- 在prepare过程中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery。
1.下载&安装
yum安装
配置源
#vim /etc/yum.repos.d/percona.repo
[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 1
添加key
#cd /etc/pki/rpm-gpg
#wget http://www.percona.com/downloads/RPM-GPG-KEY-percona
yum安装xtrabackup
[root@server ~]# yum list |grep percona
Percona-SQL-50-debuginfo.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-client-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-devel-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-server-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-shared-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-shared-compat.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-test-50.i686 5.0.92-b23.85.rhel5 percona
Percona-Server-51-debuginfo.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-51-debuginfo.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-55-debuginfo.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-client-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-client-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-client-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-devel-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-devel-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-devel-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-server-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-server-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-server-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-shared-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-shared-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-shared-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-shared-compat.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-shared-compat.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-test-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-test-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-test-55.i686 5.5.20-rel24.1.217.rhel5 percona
percona-toolkit.noarch 2.0.3-1 percona
xtrabackup.i386 1.6.5-328.rhel5 percona
xtrabackup-debuginfo.i386 1.6.5-328.rhel5 percona
#yum install xtrabackup
rpm安装
安装依赖包
$ yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel
下载包&安装
#wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6.5/RPM/rhel6/x86_64/xtrabackup-1.6.5-328.rhel6.x86_64.rpm
#rpm xtrabackup-1.6.5-328.rhel6.x86_64.rpm
2,使用
Usage: [./xtrabackup [DEFAULTS OPTION] —backup | ./xtrabackup [DEFAULTS OPTION] —prepare] [OPTIONS]
Default options are read from the following files in this order: /etc/my.cnf, /opt/mysql-5.0.xx/etc/my.cnf, ~/.my.cnf
参数说明:
--defaults-file= 读my.cnf的位置,在DB服务器上有多实例时很有用,未指定将读/etc/my.cnf~(如要备份DB 3307的数据库,要单独指定3307的 my.cnf文件)
--datadir= 数据存放目录,和my.cnf中要相一致~ (必须,但实际上一般不用特别指定,因为会从my.cnf中去读取~)
--target-dir= 存放备份文件的目录,要使用绝对路径~ 若此目录开始不存在,则--backup选项会建立此目录~
--backup 备份InnoDB/XTraDB表空间,存放*.ibd及备份的log文件(xtrabackup_logfile)到 --target-dir目录~
--stats 统计分析innodb表存储信息,eg. xtrabackup --stats --defaults-file=/data/scrips/mysql_3306.cnf
--prepare 返原innodb前要执行,prepare命令~ eg. xtrabackup --prepare --defaults-file=`pwd`/mysql_3306.cnf --throttle=2000 --target-dir=`pwd`/dbbak
--print-param 主要用于innobackupex脚本copyback操作时, 打印出目标mysqld的参数~
--use-memory= 用于--prepare 或 --stats,在prepare相当于innodb_buffer_pool_size 作用~ eg.xtrabackup --use-memory=1G --stat
--export --prepare操作时,导入其它数据库使用。在使用'ALTER TABLE … IMPORT TABLESPACE' 命令时,输出干净的.ibd files 或 .exp 文件.
--suspend-at-end 在backup操作时用于同步(synchronizing)
--log-stream --backup操作时,输出xtrabackup_logfile内容,innobackupex --stream 就使用此选项~
--incremental-lsn= 用于--backup. Copy only .ibd pages newer than specified LSN 'high:low'
--incremental-basedir= 用于增量备份backup~只拷贝比目标目录中更新的.ibd 文件~
--incremental-dir=name= 用于增量prepare,
--tables= innodb数据库使用file-per-table模式时,可用此选项备份部分表~也可用于stat操作时~
--throttle= 用于限制每秒中磁盘的读写操作~ 在线备份时非常有用~
--create-ib-logfile 用于--prepare时生成ib-logfile~ 注意:当前版本未实现,还是要re–prepare^_^
--tmpdir= 存放temporary files的路径~
3、innobackupex工具
(1)备份操作(下列是几个例子)
####备份employess数据库(普通备份)#### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=employees /root/backup 1> process_log 2>&1 & 注意:将数据库employees备份到目录/root/backup/XXXX下 [root@SQL1 ~]# ls -l /root/backup total 4 drwxr-xr-x 3 root root 4096 Apr 13 14:16 2010-04-13_14-14-43 ####备份给定的数据库列表中的数据库中(普通备份)#### [root@SQL1 ~]# cat backup_db_name school employees [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=/root/backup_db_name /root/backup 1> process_log 2>&1 & 或者 [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=“school employees” /root/backup 1> process_log 2>&1 & ####备份employess数据库中的employess表(普通备份)#### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases="employees.employees" /root/backup 1> process_log 2>&1 & ####备份所有的数据库,并打包(tar方式)##### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --stream=tar /root/backup 1> /root/backup/all_databases.tar 2> process_log & ####备份所有的数据库并压缩,并打包压缩(tar+gzip方式)#### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --stream=tar /root/backup 2> process_log | gzip > /root/backup/all_databases.tar.gz & |
注意:首先要先创建备份目录:/root/backup,--databases=[ db_name.tb_name | db_name ],如果不使用--databases参数的话,那么将备份所有的数据库
(2)恢复操作
(步骤:先apply log,再copy back,最后再chown -R mysql:mysql datadir)
####(普通备份)的还原操作###### [root@SQL1 ~]# ls -l /root/backup/2010-04-13_15-02-37/ total 223484 -rw-r--r-- 1 root root 348 Apr 13 15:02 backup-my.cnf drwxr-xr-x 2 root root 4096 Apr 13 15:03 employees -rw-r--r-- 1 root root 228589568 Apr 13 15:03 ibdata1 -rw-r--r-- 1 root root 0 Apr 13 15:03 mysql-stderr -rw-r--r-- 1 root root 379 Apr 13 15:03 mysql-stdout -rw-r--r-- 1 root root 1 Apr 13 15:03 xtrabackup_binlog_info -rw-r--r-- 1 root root 60 Apr 13 15:03 xtrabackup_checkpoints -rw-r--r-- 1 root root 2048 Apr 13 15:02 xtrabackup_logfile -rw-r--r-- 1 root root 53 Apr 13 15:03 xtrabackup_slave_info [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/2010-04-13_15-02-37 [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/2010-04-13_15-02-37 [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup* ####(tar方式备份)的还原操作###### [root@SQL1 ~]# mkdir /root/backup/db [root@SQL1 ~]# tar -ixvf all_databases.tar -C /root/backup/db(先解压,注意必须跟-i参数) [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/db [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/db [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup [root@SQL1 ~]# rm -rf /root/backup/db ####(tar+gzip方式备份)的还原操作###### [root@SQL1 ~]# mkdir /root/backup/db [root@SQL1 ~]# tar -izxvf all_databases.tar.gz -C /root/backup/db(先解压,注意必须跟-i参数) [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/db [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/db [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup [root@SQL1 ~]# rm -rf /root/backup/db |
转载于:https://my.oschina.net/duxuefeng/blog/49148
mysql在线备份恢复--Xtrabackup相关推荐
- mysql物理备份工具Xtrabackup安装配置
mysql物理备份工具Xtrabackup安装配置 1 Xtrabackup工具介绍 Xtrabackup是一个对InnoDB做物理数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业 ...
- 2.5.1 MySQL数据库备份恢复基础讲解
MySQL数据库备份恢复基础 MySQL常见的故障类型 对于用户来说,数据库中保存的数据通常至关重要,所以要采取各种手段来防止各种可能的数据损失和数据故障. DBA主要任务就是维持数据库的高可靠性运行 ...
- MySQL的备份恢复
mysql的备份恢复 知识要点 1.备份方式 2.mysqldump 3.如何进行备份恢复 4.xtrabackup 5.物理备份原理 6.如何进行物理备份 备份的目的 做灾难恢复:对损坏的数据进 ...
- mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...
扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库 innobackupex ...
- mysql用户管理,常用sql语句,mysql数据库备份恢复
2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...
- 13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复
扩展 : SQL语句教程 http://www.runoob.com/sql/sql-tutorial.html 什么是事务?事务的特性有哪些? http://blog.csdn.net/yenang ...
- 52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)
MySQL创建用户以及授权 默认用户是root用户,不可能所有人员都用root用户,创建用户防止误删除,因为mysql里边有多个库每个库里有很多表,所以需要给单独的用户做一些授权我只需要它对某一个数据 ...
- MySQL用户管理、常用SQL语句、MySQL数据库备份恢复
mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...
- 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复
mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...
最新文章
- 关于软件开发你真正需要知道的几个事情
- 令人迷惑的ATT的jmp:直接跳转和间接跳转 [转]
- js遍历追加html子样式,前端基本功:JS(十一)动画封装(CSS样式获取、JSON遍历)...
- 服务器拉取openssl文件,使用openssl从服务器获取证书
- ArcObject开发,“异常在 ESRI.ArcGIS.Version.dll”错误
- 对I2C总线协议的一些理解
- 三、K8s常见操作命令
- 软考数据库系统工程师教材改版啦
- 修改XP登陆界面教程
- 新手与GitHub——菜鸟教程
- limesurvey php5.2,功能强大的PHP开源问卷调查系统 LimeSurvey 有中文语言包-win7中文语言包...
- matlab全局变量和局部变量和子函数
- O2O(online to offline)营销模式
- 一招教你解决Rational rose画时序图(Sequence diagram)时找不到参与者(Actor)的尴尬现场
- 两个小米路由器mini无线桥接
- 安卓初学者笔记(四):用白话讲明白Activity是什么
- 为什么要进行傅立叶变换?如何用Matlab实现快速傅立叶变换?
- 格里高利历java_Java 日历笔记
- windows10宽带连接无法打开移动热点wifi
- 新号连续3条视频破百万,这位唱rap的语文老师如何引爆全网