基于xtrabackup备份MySQL

很久没有写博了,恍然间今天已经是2012年的最后一天,就让此博文纪念2012吧!

   前些天接手了两台基于MySQL5.0的互为主从复制架构,OS是CentoS5.3,引擎主要是innoDB,当然问题很多,主从库的数据不一致,时常自动来回切换,还有最可恶的一点,就是主库时不时的会hang住,备份主要采用的是mysqldump。那么处理问题的思路就有必要整理一下了,我目前做的主要是两个方面:

一、保证主从复制的一致性,优化相关参数,增加主从一致性的监控,这里不详细介绍。

二、增加使用xtrabackup进行备份,下面对此介绍一下。

Xtrabackup 是percona公司(mysqlperformanceblog)的开源项目,目的是实现类似innodb官方的热备份工具InnoDB Hot Backup的功能,可以帮助我们对MySQL InnoDB类型的数据库表进行在线热备份。

Xtrabackup中包含两个工具:
* xtrabackup – 用于热备份innodb, xtradb表的工具,不能备份其他表;
* innobackupex – 对xtrabackup封装的perl脚本,提供了myisam表备份的能力;

目前最新版本已经是2.0.4,下载地址是http://www.percona.com/software/percona-xtrabackup,有RPM版本的,直接下载安装即可,更多内容还请参考官方手册。

那么安装完成后,会生成以下命令,通过此命令可以实现本文的目的

[root@vegaga_db1 ~]# which innobackupex
/usr/bin/innobackupex

以下是备份脚本,备份目录是/backupdir/,需要提前建立该目录,备份产生的日志文件输出到/backupdir/backup.log

       
       
       
       
    •  
  
  
  
  
  1. #!/bin/sh 
  2. ## A sample shell script to perform full backups  
  3. ## Usage:/path/shellname 
  4. ## Author:花狐  
  5. ## Mail:[email protected] 
  6. ## QQ:804586747    WEIBO:http://weibo.com/careersh 
  7. ## --------------------------------------------------------- 
  8.  
  9. USER=huahu 
  10. PASSWORD=12345678 
  11. time=`date +"%y-%m-%d-%H-%M"`  
  12. date >> /backupdir/backup.log 
  13.  
  14. #First begin Full Backups 
  15.  
  16. echo "begin backup--------------------------------" >> /backupdir/backup.log 
  17.     /usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=$USER --password=$PASSWORD   --slave-info /backupdir 2>>/backupdir/backup.log  
  18. echo "end backup----------------------------------" >> /backupdir/backup.log 
  19.  
  20. #second begin compress 
  21. echo "Begin compress------------------------------" >> /backupdir/backup.log 
  22.     archivename=`find /backupdir/ -maxdepth 1 -type d | awk -F'/' 'NR==2{printf $3}'` 
  23. echo "The archive time is: $archivename" >> /backupdir/backup.log 
  24.     tarname=master$archivename.tar.gz 
  25. echo "The tar name is: $tarname" >> /backupdir/backup.log 
  26.     /bin/tar -zcvf /backupdir/$tarname /backupdir/$archivename >> /backupdir/backup.log 2>&1 
  27.  
  28. #Three Delete Document 
  29. file=/backupdir/$tarname 
  30. if [[ -e $file ]] 
  31.     then 
  32.         echo "The $tarname file exists.begin to perform delete action"   >> /backupdir/backup.log 
  33.         /bin/rm -rf /backupdir/$archivename 
  34.     else 
  35.         echo "The file is not exists." >> /backupdir/backup.log 
  36.     fi 
  37.  
  38. date >> /backupdir/backup.log 
  39. mail -s "backup report" "[email protected]< /backupdir/backup.log 
  40. exit 0 

那么细心的同学该问了,innobackupex不是提供了一个参数 --stream=tar吗,可以实现打包压缩的功能,是的,的确是有这么个参数,但是呢,我在测试过程中遇见一个问题,如果使用该参数的话,那么,会出现以下问题:

 

  
  
  
  
  1. Sun Dec 23 01:20:01 CST 2012 
  2. begin backup-------------------------------- 
  3.  
  4. InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy 
  5. and Percona Inc 2009-2012.  All Rights Reserved. 
  6.  
  7. This software is published under 
  8. the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. 
  9.  
  10. 121223 01:20:01  innobackupex: Starting mysql with options:  --defaults-file='/etc/my.cnf' --password=xxxxxxxx --user='admin' --unbuffered -- 
  11. 121223 01:20:01  innobackupex: Connected to database with mysql child process (pid=29288
  12. 121223 01:20:07  innobackupex: Connection to database server closed 
  13. IMPORTANT: Please check that the backup run completes successfully. 
  14.            At the end of a successful backup run innobackupex 
  15.            prints "completed OK!". 
  16.  
  17. innobackupex: Using mysql  Ver 14.14 Distrib 5.5.10, for Linux (x86_64) using readline 5.1 
  18. innobackupex: Using mysql server version Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. 
  19.  
  20. innobackupex: Created backup directory /backupdir 
  21. 121223 01:20:07  innobackupex: Starting mysql with options:  --defaults-file='/etc/my.cnf' --password=xxxxxxxx --user='admin' --unbuffered -- 
  22. 121223 01:20:07  innobackupex: Connected to database with mysql child process (pid=29326
  23. 121223 01:20:09  innobackupex: Connection to database server closed 
  24.  
  25. 121223 01:20:09  innobackupex: Starting ibbackup with command: xtrabackup_55  --defaults-file="/etc/my.cnf"  --defaults-group="mysqld" --backup --suspend-at-end --target-dir=/tmp --stream=tar 
  26. innobackupex: Waiting for ibbackup (pid=29345) to suspend 
  27. innobackupex: Suspend file '/tmp/xtrabackup_suspended' 
  28.  
  29. xtrabackup_55 version 2.0.4 for Percona Server 5.5.16 Linux (x86_64) (revision id: 484) 
  30. xtrabackup: uses posix_fadvise(). 
  31. xtrabackup: cd to /var/lib/mysql 
  32. xtrabackup: Target instance is assumed as followings. 
  33. xtrabackup:   innodb_data_home_dir = ./ 
  34. xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend 
  35. xtrabackup:   innodb_log_group_home_dir = ./ 
  36. xtrabackup:   innodb_log_files_in_group = 2 
  37. xtrabackup:   innodb_log_file_size = 5242880 
  38. >> log scanned up to (4450580261) 
  39. [01] Streaming ./ibdata1 
  40. >> log scanned up to (4450580261) 
  41. >> log scanned up to (4450580261) 
  42. >> log scanned up to (4450581296) 
  43. >> log scanned up to (4450581296) 
  44. >> log scanned up to (4450581296) 
  45. >> log scanned up to (4450581296) 
  46. >> log scanned up to (4450583001) 
  47. >> log scanned up to (4450584282) 
  48. >> log scanned up to (4450586172) 
  49. >> log scanned up to (4450586994) 
  50. [01]        ...done 
  51.  
  52. 121223 01:21:05  innobackupex: Continuing after ibbackup has suspended 
  53. 121223 01:21:05  innobackupex: Starting mysql with options:  --defaults-file='/etc/my.cnf' --password=xxxxxxxx --user='admin' --unbuffered -- 
  54. 121223 01:21:05  innobackupex: Connected to database with mysql child process (pid=29455
  55. >> log scanned up to (4450586994) 
  56. 121223 01:21:07  innobackupex: Starting to lock all tables... 
  57. >> log scanned up to (4450587838) 
  58. >> log scanned up to (4450587838) 
  59. >> log scanned up to (4450587838) 
  60. >> log scanned up to (4450587848) 
  61. >> log scanned up to (4450587848) 
  62. >> log scanned up to (4450587848) 
  63. >> log scanned up to (4450587848) 
  64. >> log scanned up to (4450587848) 
  65. >> log scanned up to (4450587848) 
  66. >> log scanned up to (4450587848) 
  67. >> log scanned up to (4450587848) 
  68. >> log scanned up to (4450587848) 
  69. >> log scanned up to (4450587848) 
  70. >> log scanned up to (4450587848) 
  71. >> log scanned up to (4450587848) 
  72. >> log scanned up to (4450587848) 
  73. >> log scanned up to (4450587848) 
  74. >> log scanned up to (4450587848) 
  75. >> log scanned up to (4450587848) 
  76. >> log scanned up to (4450587848) 
  77. >> log scanned up to (4450587848) 

会一直这么log scanned up to (4450587848)下去,直到你手动停在,所以才会采用这种应对方法,如果哪位仁兄有更好的方法,还望指点一下,关于这个问题,以下文章描述的很细致,可以参考:http://www.mysqlops.com/2011/05/16/xtrabackup_mysql_hang.html那么会在backupdir目录下才生成以备份启动时间命名的目录,脚本的最后一部分就是实现打包压缩,删除目录保留压缩包的功能。 先写到这里,后续继续改进!

你可能感兴趣的:(基于xtrabackup备份MySQL)