使用xtrabackup备份恢复innodb数据(不同机器之间)
###########################备份数据库############################
1. 直接使用二进制版本
#centOS4.6版本用这个
wget http://www.percona.com/downloads/XtraBackup/XtraBackup-0.9.5rc/RPM/rhel4/xtrabackup-0.9.5rc-35.rhel4.x86_64.rpm
#centOS5.0以上版本用这个
wget http://www.percona.com/downloads/XtraBackup/XtraBackup-0.9.5rc/RPM/rhel5/xtrabackup-0.9.5rc-50.rhel5.x86_64.rpm
2. 安装
rpm -ivh xtrabackup-0.9.5rc-35.rhel4.x86_64.rpm
3. 修改/etc/my.cnf
[mysqld]
datadir=/data/database/mysql/
不用重启数据库
4. 在A机上运行 xtrabackup , 并将输出文件打包到B机, 准备在B机上用xtrabackup还原这些数据
#### A机上备份数据 注意,增加--slave-info是为了保存主从同步信息
/usr/bin/innobackupex-1.5.1 --user=root --password='`cat /data/save/mysql_root`' --no-lock --stream=tar /tmp/ --slave-info | gzip - > backup74.tar.gz
###########################还原数据库############################
scp backup74.tar.gz 123.123.123.123:/data/database/xtra/
cd /data/database/xtra/
#### 注意解压的时候一定要加上i参数
tar xfzi backup.tar.gz
#### 日志(/data/database/xtra/ 此目录为解压后的目录)
innobackupex-1.5.1 --apply-log /data/database/xtra/
#### 数据(/data/database/xtra/ 此目录为解压后的目录)
innobackupex-1.5.1 --copy-back /data/database/xtra/
####修改权限,否则mysql无法启动
chown -R mysql:mysql .
还原数据库后要重启数据库
还原数据库最好把需要恢复的数据库关掉,恢复后启动会存在三个问题:
1.由于备份是在未锁库未停MYSQL服务的情况下进行的。所以还原出来的数据存在事务回滚。
事务回滚的同时又进行了数据库主从同步,那就会造成,记录重复。那么恢复后的数据库会报如下错误:
ERROR: 1062 Duplicate entry '257959' for key 1 080422.....
2.因为是从一台机器拉到另外一台机器上,所以主机名发生了变化,那么用以同步的relay-bin日志名称
也跟原来的不同,如果不改正过来,会发生如下错误:
100526 3:39:38 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=/data/database/mysql/ww-relay-bin' to avoid this problem.
3.同样是因为从一台机器上备份过来,所以root的密码也己经给恢复到备份源机一样。如不改正,会发生如下错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决方法如下:
vi /etc/my.cnf
relay-log=ww-relay-bin #重定义日志名称
slave-skip-errors=1007,1051,1062 #跳过错误
重启数据库。