mysql备份热备工具

xtrabackup是一个开源的MySQL热备份工具,可以实现不加锁备份。它可以备份InnoDB,XtraDB以及MyISAM。在http://www.percona.com/docs/wiki/percona-xtrabackup:start可以下载到最新的安装文件。ubuntu下的安装的方法见http://uguptablog.blogspot.com/2010/01/intalling-xtrabackup-10-on-ubuntu-910.html

安装完之后会得到2个可执行文件innobackupex-1.5.1和xtrabakup,你可以拷贝到/usr/local/bin下面。xtrabakup只能备份InnoDB和XtraDB,而innobackupex-1.5.1是对xtrabackup的一个封装,可以用来备份MyISAM,但是不直接支持增量备份,xtraback直接支持增量备份。

1.innobackupex的使用
我们先创建两个数据库,一个test数据是已经有的,里面创建一个innodb表stu。然后创建一个myisam_test数据库,里面是一个mysiam类型的表color。

 

1 mysql> select from stu;
2 +------+------+
3 | id   | name |
4 +------+------+
5 |    1 | a    |
6 |    2 | b    |
7 |    3 | c    |
8 |    4 | d    |
9 +------+------+
10 rows in set (0.00 sec)
11  
12 mysql> select from color;
13 +------+-------+
14 | id   | name  |
15 +------+-------+
16 |    1 | red   |
17 |    2 | green |
18 +------+-------+
19 rows in set (0.00 sec)

现在我们来备份这两个数据库。操作的语句如下:

 

1 thwu@ubuntu:~/programs/mysql/bin$ innobackupex-1.5.1 --defaults-file=/home/thwu/programs/mysql/my.cnf --no-lock --user=root --port=8099 --password="xxxx" --databases="test myisam_test"/home/thwu/backup/innobackupex/ 2>/home/thwu/backup/innobackupex/backup1.log
2  
3 xtrabackup  Ver undefined Rev undefined for5.0.84 pc-linux-gnu (i686)
4 Copying /home/thwu/programs/mysql-5.1.48/var/ibdata1
5  to /home/thwu/backup/innobackupex/2010-11-10_16-57-29/ibdata1
6  ...done
7 Copying ./test/innodb_monitor.ibd
8  to /home/thwu/backup/innobackupex/2010-11-10_16-57-29/test/innodb_monitor.ibd
9  ...done
10 Copying ./test/stu.ibd
11  to /home/thwu/backup/innobackupex/2010-11-10_16-57-29/test/stu.ibd
12  ...done
13 xtrabackup: The latest check point (forincremental): '0:44243'
14 xtrabackup: Stopping log copying thread.
15 xtrabackup: Transaction log of lsn (0 44243) to (0 44032) was copied.

上面提示备份过程,记录下bin-log的位置,以后恢复的时候就会从这个位置开始重做,以至完全恢复。下面是备份生成的文件:

 

1 thwu@ubuntu:~/backup/innobackupex$ ls
2 2010-11-10_16-57-29  backup1.log
3 thwu@ubuntu:~/backup/innobackupex$ cd 2010-11-10_16-57-29/
4 thwu@ubuntu:~/backup/innobackupex/2010-11-10_16-57-29$ ls
5 backup-my.cnf  ibdata1  myisam_test  mysql-stderr  mysql-stdout  test xtrabackup_checkpoints  xtrabackup_logfile

备份后又插入几条数据:

 

1 insert into stu values (5, 'e'), (6, 'f');
2 insert into color values (3, 'blue'), (4,'white');

现在模拟恢复过程:

 

1 mysql> drop database myisam_test;
2 mysql> drop database test;
1 ./shutdown_mysql.sh
2 rm ibdata1
3 rm ib_logfile*
4 ./start_mysql.sh
5  
6 #为恢复做准备,产生新的日志文件
7 innobackupex-1.5.1 --apply-log --defaults-file=/home/thwu/programs/mysql/my.cnf --no-lock --user=root --port=8099 --password="xxxx"/home/thwu/backup/innobackupex/2010-11-10_16-57-29
8 #拷贝日志数据文件回原来的位置
9 innobackupex-1.5.1 --copy-back --defaults-file=/home/thwu/programs/mysql/my.cnf --no-lock --user=root --port=8099 --password="xxxx"/home/thwu/backup/innobackupex/2010-11-10_16-57-29
10  
11 ./shutdown_mysql.sh
12 #根据需要改mysql数据文件目录的权限
13 ./start_mysql.sh

现在就恢复到了备份的那一时刻,注意恢复的过程要启动MySQL。要想恢复到现在,还需要根据前面的bin-log的位置对后面的内容进行重做,这个和逻辑备份是一样的,请参考http://www.sugarsfree.org/?p=254,像我们这种使用drop属于误操作,需要根据位置进行恢复,跳过误操作的语句。
不然恢复的时候又重做了drop,刚恢复好的又被删除了。

压缩备份:
压缩备份其实就是将备份的数据进行压缩,恢复的时候先tar izxvf解压一下再恢复,后面就一样了。命令为:

 

1 innobackupex-1.5.1 --defaults-file=/home/thwu/programs/mysql/my.cnf --no-lock --user=root --port=8099 --password="xxxx" --databases="test myisam_test" --stream=tar /home/thwu/backup/innobackupex/ 2>/home/thwu/backup/innobackupex/backup2.log |gzip > /home/thwu/backup/innobackupex/2010_11_16.tar.gz
posted @   jamin  阅读(721)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示