xtrabackup 是MYSQL的一个备份软件
cd /usr/local wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.1.5/binary/Linux/x86_64/percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz
cd /usr/local tar zxvf percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz
cp /usr/local/percona-xtrabackup-2.1.5-Linux-x86_64/bin/* /usr/bin/
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --databases='test' --slave-info /usr/local/注意此时会在"/usr/local"目录下生成一个根据当前时间产生的文件夹(比如"2016-03-21_13-17-34")存放备份数据,在第五步还原数据的时候,需要将此目录下的数据全部拷贝过去 cp 2016-03-21_13-17-34/* /root/test_dir/2013-01-04_15-08-06/
注意点2:若命令报错"Can't locate Time/HiRes.pm in @INC",则执行命令:yum -y install perl-Time-HiRes
5.还原
/etc/init.d/mysqld stop(2)整理(preparing)部分备份
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --apply-log --export /root/test_dir/2013-01-04_15-08-06/
cp -rf /root/test_dir/2013-01-04_15-08-06/* /usr/local/mysql/data/
chown -R mysql:mysql /usr/local/mysql(5)启动数据库
/etc/init.d/mysqld start特别说明:
innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_file=/etc/my.cnf;mysql_read_default_group=xtrabackup' as 'root' (using password: YES). innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /usr/bin/innobackupex line
则按如下步骤进行操作:
wget percona.com/get/percona-toolkit.tar.gz wget percona.com/get/percona-toolkit.rpm
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL3: 安装Percona Toolkit
rpm -Uvh percona-toolkit-2.2.1-2.noarch.rpmOK,就这么简单,安装完毕。
---> Package perl-DBD-MySQL.x86_64 0:3.0007-2.el5 set to be updated --> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15)(64bit) for package: perl-DBD-MySQL --> Processing Dependency: libmysqlclient.so.15()(64bit) for package: perl-DBD-MySQL --> Running transaction check ---> Package mysql.x86_64 0:5.0.95-5.el5_9 set to be updated --> Processing Conflict: mysql conflicts MySQL --> Finished Dependency Resolution mysql-5.0.95-5.el5_9.x86_64 from updates has depsolving problems --> mysql conflicts with MySQL-server Error: mysql conflicts with MySQL-server由于我安装的是5.5.xx的MySQL版本,而系统自带的是5.0xx版本的,而libmysqlclient.so.15是由5.0版本提供的,所以就出错了。如果你的系统是centos6.X系列的,MySQL自带的为5.1以上,可能不会出现这个问题了。解决方案如下:
rpm -Uvh MySQL-shared-compat-5.5.31-1.rhel5.x86_64.rpmMySQL-shared-compat为客户端的libraries ,向下兼容。
在yum install perl-DBD-MySQL就没有问题了。
原理:
在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
Xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。
上面就是xtrabackup的备份过程。接下来是准备(prepare)过程。在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了。
以上的过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。
备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。
Xtrabackup和innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。