本文写得很简单,仅仅包括全库备份、全库准备、全库恢复3个步骤。如果要详细的备份,如打包、远程备份等,建议之后阅读这篇文章http://blog.csdn.net/yongsheng0550/article/details/6682162,然后再阅读官方手册。
介绍一下环境:CentOS 6.3,Percona XtraBackup 2.2.6,MySQL 5.5。
1. 准备工作
首先,请先装好MySQL和XtraBackup,不要凭脑袋瓜子空想。
2. 创建一个备份专用用户
从技术角度考虑,root用户很合适,但是从安全角度考虑,最好还是有个专门的用户,只给最低权限。、
XtraBackup要的权限不多,有RELOAD, LOCK TABLES, REPLICATION CLIENT3个就行。LOCK TABLES是备份MyISAM表时用的。
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
FLUSH PRIVILEGES;
3. 备份数据库
innobackupex --user=bkpuser --password=s3cret /usr/programs/backup/
cp /etc/my.cnf /usr/programs/backup/
这里是全库备份,指定用户名、密码和备份文件保存的位置执行即可。
注意:后面的cp是备份my.cnf。这个文件对XtraBackup和MySQL都非常重要,但是XtraBackup并不备份,所以需要手动备份一下。此外,恢复时也会需要my.cnf文件中的datadir参数,所以这里需要提前备份该文件,并检查是否有datadir参数。如果没有该文件,可以从/usr/share/mysql/下面的各种my-*.cnf选一个适合自己硬件的,并增加datadir参数。(默认可以把datadir指向/var/lib/mysql目录,即datadir=/var/lib/mysql)
4. 停止数据库服务
service mysql stop
5. 备份准备工作
innobackupex --apply-log /usr/programs/backup/2014-12-03_09-46-46/
这个2014-12-03的文件夹是备份时自动生成的。由于是热备份,有可能在备份时还有没执行完的事务,在这里需要“准备”来完成这些事务。要了解更详细的内容可以自行搜索XtraBackup的原理。
6. 删除数据库物理文件
rm /var/lib/mysql/* -rf
XtraBackup其实就是把这些文件都拷回来,所以要把所有的文件都删了,不然恢复时会报错。 千万注意:只能删除/var/lib/mysql文件夹下面的所有文件,而这个mysql文件夹绝对不能删,如果删了,你的恢复肯定没戏,启动MySQL时绝对给你报错“ERROR! The server quit without updating PID file”。(个人以为这个错误是因为SELinux引起的,可以修改SELinux的配置:chcon -R -t mysqld_db_t /var/lib/mysql/)
7. 恢复
innobackupex --copy-back /usr/programs/backup/2014-12-03_09-46-46/
这里可能会出现找不到datadir的错误(如下),此时需要把备份的my.cnf恢复到初始位置,并且my.cnf中要包含datadir这个变量值。默认my.cnf在/etc/目录下,datadir=/var/lib/mysql。
innobackupex: got a fatal error with the following stacktrace: at /usr/bin/innobackupex line 4478
main::get_option('datadir') called at /usr/bin/innobackupex line 2433
main::copy_back(0) called at /usr/bin/innobackupex line 1561
innobackupex: Error: no 'datadir' option in group 'mysqld' in server configuration file '' at /usr/bin/innobackupex line 4478.
8. 文件授权
chown -R mysql:mysql /var/lib/mysql/
重新拷贝的文件需要授权,不然MySQL同样不能启动,也会报“ERROR! The server quit without updating PID file”的错误。
9. 启动MySQL
service mysql start