percona-xtrabackup物理备份mysql
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
[root@xiaochen ~]# yum -y install percona-xtrabackup-24
[root@xiaochen ~]# rpm -ql percona-xtrabackup-24 |grep bin
/usr/bin/innobackupex 支持myisam、innodb
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
xtrabackup 能备份innodb库;innobackupex能备份别的表,但是不支持增量备份
准备需要备份的库和表
mysql> create database xtradb;
mysql> use xtradb
mysql> create table sam(id int,name char(10)) engine=myisam;
mysql> insert into sam values(1,'alice');
mysql> create table inno(id int,name char(10));
mysql> insert into inno values(1,'jack');
注意:mysql 需要对备份目录有rwx的权限
[root@localhost backup]# chown mysql.mysql /backup/
如果不使用root帐号需要对相应帐号授予相应权限
mysql> create user 'xtra'@'localhost' identified by '123';
mysql> grant reload,lock tables,replication client on *.* to xtra;
reload和lock tables权限为了执行flush tables with read lock的操作
replication client权限是为了获取bin log日志的位置
root帐号默认具备相应权限
mysql> select * from mysql.user\G
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --host=localhost --socket=/tmp/mysql.sock /backup/
[root@localhost ~]# innobackupex --databases='zhsq_shunyi' --user=root --password=123 /home/backup/
[root@localhost ~]# ls /backup/2016-12-01_17-33-29/
xtrabackup相关的文件的作用:
(1)xtrabackup_checkpoints——备份类型(如完全或者增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息
每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info——mysql 服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志时间的位置。
(3)xtrabackup_info——xtrabackup工具在备份时记录的使用工具及数据库信息
(4)backup-my.cnf——备份命令用到的配置选项信息
(5)xtrabackup_logfile——xtrabackup记录innodb事务日志的信息,二进制文件,不能直接看
模拟数据库发生变化
mysql> insert into inno values(2,'shrek');
mysql> insert into inno values(3,'seker');
mysql> insert into inno values(4,'zorro');
[root@localhost ~]# cat /backup/2016-12-01_17-33-29/xtrabackup_binlog_info
master.000002 1359
增量备份二进制日志
[root@localhost 2016-12-01_17-33-29]# mysqlbinlog --start-position=1359 /backup/master.000002 > /backup/2016-12-01_17-33-29/`date +%F`.sql
[root@localhost 2016-12-01_17-33-29]# vim /backup/2016-12-01_17-33-29/`date +%F`.sql
[root@mysql ~]# rm -rf /mydata/data/*
[root@mysql ~]# rm -rf /backup/master.*
[root@localhost ~]# killall -9 mysqld
在备份完成后数据尚且不能用于恢复操作,因为备份的数据中可能包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态,使用的日志就是它本身的日志xtrabackup_logfile。
[root@localhost ~]# innobackupex --apply-log /backup/2016-12-01_17-33-29/
在实现“准备”的过程中,innobackupex 通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成的速度
innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器datadir目录中来执行恢复过程。innobackupex通过/etc/my.cnf来获取datadir相关信息,但是它不会覆盖掉data中已存在的文件,所以data目录必须为空
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
log_bin=/backup/master
log_bin_index=/backup/master
datadir=/mydata/data
innodb_file_per_table=1
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
[root@localhost ~]# innobackupex --copy-back /backup/2016-12-01_17-33-29/
[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql/data/
[root@localhost ~]# service mysqld start
为了防止还原时产生大量的二进制日志,在还原时可以临时关闭二进制日志后再还原
mysql> set sql_log_bin=0;
mysql> source /backup/2016.../2016-12-01.sql
mysql> select * from inno;
安装xtrabackup
[root@xiaochen ~]# yum -y install percona-xtrabackup-24
[root@xiaochen ~]# rpm -ql percona-xtrabackup-24 |grep bin
/usr/bin/innobackupex 支持myisam、innodb
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
xtrabackup 能备份innodb库;innobackupex能备份别的表,但是不支持增量备份
准备需要备份的库和表
mysql> create database xtradb;
mysql> use xtradb
mysql> create table sam(id int,name char(10)) engine=myisam;
mysql> insert into sam values(1,'alice');
mysql> create table inno(id int,name char(10));
mysql> insert into inno values(1,'jack');
注意:mysql 需要对备份目录有rwx的权限
[root@localhost backup]# chown mysql.mysql /backup/
如果不使用root帐号需要对相应帐号授予相应权限
mysql> create user 'xtra'@'localhost' identified by '123';
mysql> grant reload,lock tables,replication client on *.* to xtra;
reload和lock tables权限为了执行flush tables with read lock的操作
replication client权限是为了获取bin log日志的位置
root帐号默认具备相应权限
mysql> select * from mysql.user\G
备份恢复实例:
==完整备份==
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 --host=localhost --socket=/tmp/mysql.sock /backup/
[root@localhost ~]# innobackupex --databases='zhsq_shunyi' --user=root --password=123 /home/backup/
[root@localhost ~]# ls /backup/2016-12-01_17-33-29/
xtrabackup相关的文件的作用:
(1)xtrabackup_checkpoints——备份类型(如完全或者增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息
每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info——mysql 服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志时间的位置。
(3)xtrabackup_info——xtrabackup工具在备份时记录的使用工具及数据库信息
(4)backup-my.cnf——备份命令用到的配置选项信息
(5)xtrabackup_logfile——xtrabackup记录innodb事务日志的信息,二进制文件,不能直接看
==增量备份==
模拟数据库发生变化
mysql> insert into inno values(2,'shrek');
mysql> insert into inno values(3,'seker');
mysql> insert into inno values(4,'zorro');
[root@localhost ~]# cat /backup/2016-12-01_17-33-29/xtrabackup_binlog_info
master.000002 1359
增量备份二进制日志
[root@localhost 2016-12-01_17-33-29]# mysqlbinlog --start-position=1359 /backup/master.000002 > /backup/2016-12-01_17-33-29/`date +%F`.sql
[root@localhost 2016-12-01_17-33-29]# vim /backup/2016-12-01_17-33-29/`date +%F`.sql
==模拟数据全部丢失==
[root@mysql ~]# rm -rf /mydata/data/*
[root@mysql ~]# rm -rf /backup/master.*
[root@localhost ~]# killall -9 mysqld
==准备完全备份==
在备份完成后数据尚且不能用于恢复操作,因为备份的数据中可能包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态,使用的日志就是它本身的日志xtrabackup_logfile。
[root@localhost ~]# innobackupex --apply-log /backup/2016-12-01_17-33-29/
在实现“准备”的过程中,innobackupex 通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成的速度
==恢复完全备份==
innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器datadir目录中来执行恢复过程。innobackupex通过/etc/my.cnf来获取datadir相关信息,但是它不会覆盖掉data中已存在的文件,所以data目录必须为空
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
log_bin=/backup/master
log_bin_index=/backup/master
datadir=/mydata/data
innodb_file_per_table=1
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
[root@localhost ~]# innobackupex --copy-back /backup/2016-12-01_17-33-29/
[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql/data/
[root@localhost ~]# service mysqld start
==还原增量备份==
为了防止还原时产生大量的二进制日志,在还原时可以临时关闭二进制日志后再还原
mysql> set sql_log_bin=0;
mysql> source /backup/2016.../2016-12-01.sql
mysql> select * from inno;