[root@001 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
[root@001 ~]# yum list | grep percona
[root@001 ~]# yum install percona-xtrabackup-24 -y # 卸载命令:yum remove percona-xtrabackup
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[root@001 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/tarball/percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz
[root@001 ~]# tar xf percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz -C /usr/local/
[root@001 ~]# mv /usr/local/percona-xtrabackup-2.4.8-Linux-x86_64/ /usr/local/xtrabackup
[root@001 local]# echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
[root@001 local]# source /etc/profile
[root@001 ~]# yum install numactl -y #安装依赖
----全量备份
备份数据存放在/data/backup/下面,innobackupex会自动创建一个文件夹+当前系统的时间戳
创建测试数据库,表
mysql> create database test;
mysql> use test;
mysql> create table t1;
mysql> create table t1(id int auto_increment primary key);
mysql> insert into t1 values(null);
mysql> insert into t1 values(null);
mysql> insert into t1 values(null);
数据库备份
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/var/lib/mysql/mysql.sock /data/backup/full
full日期下的文件各文件说明:
(1) backup-my.cnf —— 备份命令用到的配置选项信息;
(2) ibdata1 —— 备份的表空间文件;
(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;
(5) xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
6) xtrabackup_logfile —— 备份的重做日志文件。
二、数据库恢复
1、测试
关闭数据库,更改datadir目录
[mysql@rh64 ~]$ service mysql stop
Shutting down MySQL (Percona Server)...[ OK ]
rm: cannot remove `/var/lock/subsys/mysql': Permission denied
[root@rh64 ~]# mv /var/lib/mysql /var/lib/mysql.bak
[root@rh64 ~]# cd /var/lib/mysql.bak
[root@rh64 mysql.bak]# ls
auto.cnf ibdata2 ib_logfile1 mysql prod RPM_UPGRADE_HISTORY test
ibdata1 ib_logfile0 ib_logfile101 performance_schema rh64.pid RPM_UPGRADE_MARKER-LAST
创建新的datadir:
[root@rh64 mysql.bak]# mkdir /var/lib/mysql
数据库恢复:备注xx--xx是备份的日期,恢复目录一定为空
[root@rh64 backup]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/full/xx--xx--xx
......
151028 14:35:22 [01] Copying ./performance_schema/events_waits_history.frm to /data/mysql/backup/full/performance_schema/events_waits_history.frm
151028 14:35:22 [01] ...done
151028 14:35:22 [01] Copying ./performance_schema/host_cache.frm to /data/mysql/backup/full/performance_schema/host_cache.frm
151028 14:35:22 [01] ...done
151028 14:35:22 [01] Copying ./performance
......
151028 14:41:53 [01] ...done
151028 14:41:53 [01] Copying ./performance_schema/events_stages_history_long.frm to /var/lib/mysql/performance_schema/events_stages_history_long.frm
151028 14:41:53 [01] ...done
151028 14:41:53 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info
151028 14:41:53 [01] ...done
151028 14:41:54 completed OK!
修改数据文件夹权限
chown -R mysql.mysql /var/lib/mysql
chmod 755 -R /var/lib/mysql
systemctl start mysqld
问题一这时候我是远程登录阿里云的,mysql -u root -p输入正确的密码也可能登录不进报错28000
解决方法用mysql无密码进入或者初始mysql -u -root 不用密码直接登录
登录后,两行密码设置再设置一下密码会报错已经设置,没关系不用理会,退出重新就可以密码登录了
set password for 'root'@'localhost' =password('123456');
set password for 'root'@'%' =password('123456');
第二行因为我是远程连接阿里云服务器的创建远程用户名如下:
--------------------------------------------------------------------------------------------------------------------
【把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户。
mysql> grant all privileges on *.* to root@'%'identified by 'password';
如果是新用户而不是root,则要先新建用户
mysql>create user 'username'@'%' identified by 'password';
mysql>flush privileges;更新MySQL数据】
-----------------------------------------------------------------------------------------------------------------------------------
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --use-memory=4G --apply-log /data/2017-08-05_11-44-06/ #第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录就准备就绪
170805 16:49:32 completed OK! #成功
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2017-08-05_11-33-06/ #第2步是copy-back,即把备份文件拷贝至原数据目录下。注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备
170805 16:49:32 completed OK! #成功
增量备份
在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份是基于上一次的增量备份,以此类推。
全备份放在/data/backup/full,增量备份放在/data/backup/incremental
先来全量备份
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock /data/backup/full
为了测试效果,我们在t1表中插入数据
mysql> insert into t1 values(null);
再来增量备份
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/full/2017-08-05_11-59-39/ --parallel=2
我们看看增量备份的大小以及文件内容
在test种创建t2,并插入数据然后创建增量备份2
mysql> use test;
mysql> create table t2(name varchar(20));
mysql> insert into t2 values('will');
mysql> insert into t2 values('tom');
mysql> insert into t2 values('jim');
创建增量备份2(这次是基于上次的增量备份)
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/incremental/2017-08-05_12-13-27/ --parallel=2
增量备份恢复
增量备份的恢复大体为3个步骤
*恢复完全备份
*恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数)
*对整体的完全备份进行恢复,回滚那些未提交的数据
恢复完全备份(注意这里一定要加--redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)
[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39
将增量备份1应用到完全备份
[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-04-59
将增量备份2应用到完全备份(注意恢复最后一个增量备份时需要去掉--redo-only参数,回滚xtrabackup日志中那些还未提交的数据)
[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-13-27
把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据:
[root@001 ~]# innobackupex --apply-log /data/backup/full/2014-04-07_23-37-20/
把恢复完的备份复制到数据库目录文件中,赋权,然后启动mysql数据库,检测数据正确性
[root@001 ~]# systemctl start mysqld
[root@001 ~]# mv /var/lib/mysql /var/lib/mysql.bak
[root@001 ~]# mkdir /var/lib/mysql
[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/full/2017-08-05_11-59-39/
chown -R mysql.mysql /var/lib/mysql
chmod 755 -R /var/lib/mysql
systemctl start mysqld