XtraBackup使用手册
2015-11-12 14:47
225 查看
XtraBackup使用手册
[TOC]##XtraBackup安装
yum安装方法:
rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
##XtraBackup备份预备工作
xtrabackup需要连接到数据库和datadir操作权限。
xtrabackup或者innobackupex在使用过程中设计到2类用户权限:
系统用户,用来调用innobackupex或者xtrabackup
数据库用户,数据库内使用的用户
###连接到服务
innobackupex或者xtrabackup通过–user和–password连接到数据库服务
innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/
###其他连接选项
| Option |Description|
|------------|-----------|
|--port|The port to use when connecting to the database server with TCP/IP|
|--socket|The socket to use when connecting to the local database|
|--host|The host to use when connecting to the database server with TCP/IP|
##全备和全备还原
###使用innobackupex创建全备
####创建全备
innobackupex --user=DBUSER --password=DBUSERPASS /niub/xtrabackup/base/
会输出一下信息:
innobackupex: Backup created in directory '/niub/xtrabackup/base/2015-11-04_14-24-43' innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 1946 innobackupex: completed OK!
从信息中会发现备份被创建在
/niub/xtrabackup/base/2015-11-04_14-24-43
其他选项:
--no-timestamp,指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹。
--default-file,指定配置文件,用来配置innobackupex的选线。
####预备备份
创建完备份之后数据被没有马上可以被还原,需要回滚未提交事务,前滚提交事务,让数据库文件保持一致性。
innobackupex使用—apply-log来做预备备份
innobackupex --apply-log /path/to/BACKUP-DIR
成功则会输出:
111225 1:01:57 InnoDB: Shutdown completed; log sequence number 1609228 111225 01:01:57 innobackupex: completed OK!
成功后,备份可以被用来还原数据库了。
###使用innobackupex还原全备
使用innobackupex –copy-back来还原备份
innobackupex --copy-back /path/to/BACKUP-DIR
注:
datadir必须是为空的,
innobackupex –copy-back不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到
datadir
还原脚本:
#!/bin/bash db_data=/niub/mysqldata base_dir=/niub/xtrabackup/base/2015-11-04_14-24-43 service mysql stop rm -rf $db_data/* innobackupex --copy-back $base_dir chown -R mysql:mysql $db_data/* service mysql start
##增量备份和还原
增量备份呢是为了减少空间使用和备份的时间。
增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。
增量备份会复制指定LSN之后的所有数据页。
###创建增量备份
####创建全备
在创建增量备份之前需要一个全备,不然增量备份是没有意义的。
innobackupex --user=DBUSER --password=DBUSERPASS /niub/xtrabackup/base/
这样就会在
/niub/xtrabackup/base/下创建一个时间戳文件夹,如
/niub/xtrabackup/base/2015-11-04_14-24-43,然后文件夹内是备份文件。
检查备份文件夹下的
xtrabackup-checkpoints,会有一下信息:
backup_type = full-backuped from_lsn =0 to_lsn =1291135
####增量备份
然后使用
—incremental创建增量备份
innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password --incremental $INCREMENTAL_DIR --incremental-basedir=$BASEDIR
$BASEDIR指向之前的全备目录,如:
/niub/xtrabackup/base/2015-11-04_14-24-43
$INCREMENTAL_DIR为增备目录,如:
/niub/xtrabackup/incremental
然后查看增备目录下的
xtrabackup-checkpoints:
backup_type = incremental from_lsn =1291135 to_lsn =1352113
确保全备目录下的
xtrabackup-checkpoints
to_lsn与增备中的
from_ls相等
###还原增量备份
在全备上,使用—redo-only只做已提交事务,不回滚未提交事务
innobackupex --apply-log --redo-only $BASE-DIR
会出现以下结果:
innobackupex: completed OK!
####应用增量备份
innobackupex --apply-log --redo-only $BASE-DIR --incremental-dir= $INCREMENTAL_DIR
####回滚未提交事务
当应用完所有增量备份的时候,就需要回滚所有为完成事务。
innobackupex --apply-log $BASE-DIR
####还原增量备份
还原增量备份其实和还原全备一样
使用
innobackupex –copy-back来还原备份
innobackupex --copy-back /path/to/BACKUP-DIR
注:
datadir必须是为空的,
innobackupex –copy-back不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到
datadir
还原脚本
#!/bin/bash db_data=/niub/mysqldata base_dir=/niub/xtrabackup/base/2015-11-04_14-24-43 service mysql stop rm -rf $db_data/* innobackupex --copy-back $base_dir chown -R mysql:mysql $db_data/* service mysql start
###全备和增备脚本
#!/bin/bash user="root" password=PASSWORD base_dir='/niub/mysql_xtrabackup' mysql_date=`date +%Y%m%d` old_date=`date -d "5 day ago" +%Y%m%d` if [ -f /root/scripts/mysql_xtrabackup_status ];then last_base_date=`head -1 /root/scripts/mysql_xtrabackup_status | awk '{print $2}'` if [ "$last_base_date" == "$old_date" ];then rm -rf ${base_dir}/base/* innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password ${base_dir}/base echo "mysql_xtrabackup_base $mysql_date" > /root/scripts/mysql_xtrabackup_status echo "`date` -- mysql base create" >> /root/scripts/mysql_xtrabackup.log else if [ ! -d ${base_dir}/increment/${mysql_date} ];then mkdir -p ${base_dir}/increment/${mysql_date} fi base_name=`ls ${base_dir}/base` innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password --incremental-basedir=${base_dir}/base/${base_name} --incremental ${base_dir}/increment/${mysql_date}/ echo "`date` -- mysql increment" >> /root/scripts/mysql_xtrabackup.log fi else echo "mysql_xtrabackup_base $mysql_date" > /root/scripts/mysql_xtrabackup_status rm -rf ${base_dir}/base/* innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password ${base_dir}/base echo "`date` -- mysql base create" >> /root/scripts/mysql_xtrabackup.log fi detlet_time=`date +%H%M` if [ "$detlet_time" == "0130" ];then rm -rf ${base_dir}/increment/${old_date}
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复