设为首页 收藏本站
查看: 665|回复: 0

[经验分享] Mysql备份工具xtraback全量和增量测试

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-6 13:42:47 | 显示全部楼层 |阅读模式
官方网址http://www.percona.com/docs/wiki/percona-xtrabackup:start

一,简介和环境说明
Xtrabackup是由percona开发的一个开源软件,此软件可以说是innodb热备工具ibbackup的一个开源替代
品。这个软件是由2个部分组成的:xtrabackup和innobackupex。
Xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表,支持在线热备份,不会锁表;
innobackupex - 封装了xtrabackup,同时可以备份MyISAM数据表,如果你的数据库里有innodb和
myisam存储引擎,只能使用innobackupex。
1
2
192.168.1.4 主库
192.168.1.5 从库




二、主库上面安装xtrabackup
1、RPM安装:
1
2
3
4
yum install perl-Time-HiRes*
yum install perl-DBD-MySQL -y
wget http://www.percona.com/redir/dow ... 44.rhel6.x86_64.rpm
rpm -ivh percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm



2、下载二进制源码包:
1
2
3
4
wget http://www.percona.com/redir/dow ... backup-2.1.9.tar.gz
tar -zxvf percona-xtrabackup-2.1.9.tar.gz
mv  percona-xtrabackup-2.1.9  /usr/loca/xtrabackup
cd /usr/local/xtrabackup/bin




3、使用源代码方式安装

如果你想使用源代码方式安装的话,则会发现 其安装方式有点古怪,这是因为它采用的在MySQL源代码上打补丁构建的方式。

通过源码安装的。环境变量要设置正确

比如 export PATH=$PATH:/usr/local/mysql/bin 如果mysql没有设置到PATH里会报错。

tar zxf xtrabackup-0.8.tar.gz
cd xtrabackup-0.8
./configure
make
进行到这里时,千万别惯性使然接着make install,那样就会接着安装MySQL了,正确方法是接着:
cd innobase/xtrabackup/
make
make install

查看版本号:

25266990_13450395226L23.jpg

4.备份主库

在实施备份时,需要在数据库运行的情况下在线执行,并先提前建立用于备份的路径。

1
2
3
4
5
mkdir -pv /www/backup
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --sock=/tmp/mysql.sock [--host=192.168.10.198] --password=123456 --port=3306 /www/back/ 2>/www/backup/backup.log
ps:备份完成了,会在/www/backup/目录下生成一个时间点目录,你也可以加一个--no-timestamp参数不生产这个目录,直接备份到 /www/backup/下面。

/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user root --socket=/tmp/mysql.sock --password 123456 --apply-log  /www/backup/2014-06-05_16-09-30/ &  ##preparing,undo撤销未提交的事务,重放redo log



ll /www/backup/2014-06-05_10-20-55/查看,你发现xtrabackup会把你数据库datadir下的所有数据文件都复制过来还新增了5个xtrabackup_开头的文件

相关参数说明:

/www/backup/   #备份的目录

2>/www/backup/backup.log   #将备份过程中的输出信息重定向到/www/backup/backup.log

xtrabackup_binlog_info  #记录了你做从库需要change到主库的binlog的位置和pos点

xtrabackup_checkpoints   #存放备份的起始位置和结束位置。

--stream=tar  #告诉xtrabackup,备份需要以tar的文件流方式输出。
--include='test'  #备份包含的库表,如例:意思是要备份test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:tableA & tableB,则写成:--include='test.tableA|test.tableB';
再如果test库下只有2个前缀是 table的表,你还可以写成:--include='test.table*'。

--throttle=500   #xtrabackup在备份过程中,IO操作比较多,因此需要限定一下IO操作。以免服务器压力过大.
--socket=/tmp/mysql.sock  #指定mysql.sock所在位置,以便备份进程登录mysql
--apply-log
--redo-only

5、从库安装mysql5.6

主库的mysql是编译安装的,路径/usr/local/mysql/,直接把主库的安装目录scp过来就可以用,my.cnf也scp过来,日志和datadir目录的宿主一定要是mysql,之后就可以初始化启动库了。

1
2
3
4
5
6
7
scp -r /usr/local/mysql 192.168.1.5:/usr/local/
mkdir /mydata/data -pv
chown -R mysql.mysql /mydata/data  ####datadir数据存放目录
/usr/local/mysql/my.cnf 中修改 server-id = 2
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data/ 初始化数据库
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql & 启动数据库
/usr/local/mysql/bin/mysqladmin  --sock=/tmp/mysql.sock -uroot -p123456 shutdown 停库,把datadir目录清空



6.在从库服务器(192.168.1.5)上面把主库备份文件拉到data_dir下

1
rsync -av 192.168.1.4::/www/backup/2014-06-05_10-20-55/ /mydata/data/



6、启动从库

1
2
3
4
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
cat /mydata/data/xtrabackup_binlog_info
登录到从库MySQL服务器上面
mysql> show slave status \G





三:相关知识补充如下:

完整数据备份

1
2
3
4
5
6
7
8
9
10
11
12
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| asyncdb            |
| db                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)



全量备份:

1
/usr/bin/innobackupex --defaults-file=/etc/my.cnf /www/backup/



将在/www/backup/  目录下产生一个按当前日期时间命令的目录,如 2014-06-05_16-09-30,在恢复时,注意要先关闭服务器,并且将 datadir 的目录先清空,在恢复数据后一定需要重置该目录的权限。

模拟故障,具体操作如下:

mysqladmin -u root password 123456

/usr/local/mysql/bin/mysqladmin  -u root -p shutdown

mv /mydata/data  /tmp/

mkdir /mydata/data

应用全量备份:

1
2
3
4
5
6
7
8
9
innobackupex --apply-log /www/backup/ 2014-06-05_17-58-50/  
或者  
innobackupex --copy-back /www/backup/ 2014-06-05_17-58-50/
ln -s /usr/local/mysql/share/english  /mydata/data/mysql/english  #恢复初始目录树,否则无法启动
chown -R mysql.mysql /mydata/data
/usr/local/mysql/bin/mysqld_safe  --user=mysql &
登录MySQL数据库查看
mysql> show databases;
ll /mydata/data



提示,可以在备份时直接压缩以节约磁盘空间:

1
2
mkdir -pv /www/backup/compress
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /www/backup/ | gzip > /www/backup/compress/mysql_backup.tar.gz



不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件。

1
2
3
4
5
tar zxvfi /www/backup/compress/mysql_backup.tar.gz

innobackupex --apply-log /www/backup/compress

innobackupex --copy-back /www/backup/compress



(2)Innobackupex针对某个库增量备份:

增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备了。

全量备份:

1
2
mkdir -pv /www/backup/full
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --databases="jss" /www/backup/full/



登录到数据库,创建几个新的对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> use jss;
Database changed
mysql> create table ja(id int);
Query OK, 0 rows affected (0.29 sec)
mysql> insert into ja values (1);
Query OK, 1 row affected (0.04 sec)
mysql> show tables;
+---------------+
| Tables_in_jss |
+---------------+
| ja            |
+---------------+
1 row in set (0.00 sec)



完整备份目录上做第一次增量备份

1
2
mkdir -pv /www/backup/inc
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --database="jss" --incremental --incremental-basedir=/www/backup/full/2014-06-05_18-36-06/ /www/backup/inc/



如果默认存储引擎是基于MyISAM,那么增量备份时备份的文件分别是.frm、.MYD、.MYI。

如果默认存储引擎是基于InnoDB,那么增量备份时备份的只会是.frm文件.

在 /www/backup/inc/下会产生增量文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[iyunv@test01 ~]# cd /www/backup/inc/2014-06-05_18-45-02/
[iyunv@test01 2014-06-05_18-45-02]# ll
总用量 736
-rw-r--r-- 1 root root    357 6月   5 18:45 backup-my.cnf
-rw-r----- 1 root root 720896 6月   5 18:45 ibdata1.delta
-rw-r----- 1 root root     44 6月   5 18:45 ibdata1.meta
drwx------ 2 root root   4096 6月   5 18:45 jss
drwx------ 2 root root   4096 6月   5 18:45 mysql
-rw-r--r-- 1 root root     13 6月   5 18:45 xtrabackup_binary
-rw-r--r-- 1 root root     23 6月   5 18:45 xtrabackup_binlog_info
-rw-r----- 1 root root     93 6月   5 18:45 xtrabackup_checkpoints
-rw-r----- 1 root root   2560 6月   5 18:45 xtrabackup_logfile
[iyunv@test01 2014-06-05_18-45-02]# cd jss/
[iyunv@test01 jss]# ll
总用量 100
-rw-r----- 1 root root    65 6月   5 18:45 db.opt
-rw-r----- 1 root root  8556 6月   5 18:45 ja.frm
-rw-r----- 1 root root 81920 6月   5 18:45 ja.ibd.delta
-rw-r----- 1 root root    44 6月   5 18:45 ja.ibd.meta



注意:此过程仅影响XtraDB或基于InnoDB的表.其他带不同存储引擎的表会在增量备份出现时被完全复制

模拟故障

rm -rf  /mydata/data/jss

mkdir /mydata/data/jss

将完整备份中的数据恢复到数据库中

1
2
rm -rf /mydata/data/jss/
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --user=root --password=123456 --databases="jss" --apply-log /www/backup/full/2014-06-05_18-36-06/



第一个增量备份应用到完整备份

1
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --user=root --password=123456 --apply-log /www/backup/full/2014-06-05_18-36-06/ --incremental-dir=/www/backup/inc/2014-06-05_18-45-02/



在完整备份目录/www/backup/full/下会看到一个新增文件:

经过分析,原来是在prepare时,XtraBackup并没有将增量备份集中,属于新建对象的.frm文件复制到完整备份集目录,因此在执行copy-back时,这部分文件自然也就没有复制回数据文件路径。只有手动还原到datadir。

拷贝到datadir目录下

cp -rp  /www/backup/full/2014-06-05_19-47-48jss   /mydata/data/jss/

进入datadir查看文件:

ls /mydata/data

chown -R mysql.mysql /mydata/data

重启mysql

/usr/local/mysql/bin/mysqld_safe  --user=mysql &

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-20311-1-1.html 上篇帖子: 浅谈mysql配置优化和sql语句优化 下篇帖子: mysql库和表的基本操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表