【原创】MySQL 生产环境备份还原

公司需要对生产环境的数据库进行备份,我接下了这份任务。

1. 首先谷歌了以下大家的备份方法

  许多都使用到了Xtrabackup这个工具,超大型的公司可能有其他的的备份方法,这个工具对于中小型公司,甚至是大公司都可以满足需求。

  xtrabackup中备份通常需要压缩软件来减少磁盘占用容量,同时使用xbstream流。

  注: 在测试还原备份时候,使用compact参数的备份不能还原,就算能还原,mysqld启动之后一会就当机,所以大家不要为了一些容量就使用这个参数。切记!

2. 备份策略

  有人建议中小公司的备份策略为:每天全备+rsync bin-log,大公司周日全备+周一到周六增备+rsync bin-log(增备策略有俩种:每次都基于全备或者每次都基于上一次的增备,如果上一次增备没有则基于全备)

  显然第一种方案比较简单,但占用磁盘比较大;第二种占用磁盘小,但操作比较复杂,还原的时候更是。

  本人在小公司,但有一份大公司的心,所以采用周日全备,周一到周六增备的备份策略,增备备份每次使用全备进行增备,这样可以减少还原时操作的复杂度。

3. 备份语句:

  全备:

MYSQL_CMD=" --host=localhost --user=backup --password=xxxxxxx --port=3306 "
innobackupex --defaults-file=/etc/my.cnf --use-memory=2G $MYSQL_CMD --extra-lsndir=${THIS_FULLBACKUP_DIR} --stream=xbstream ${FULLBACKUP_DIR} 2>> $TMPLOG |
lbzip2 -kv -n 6 > ${THIS_COMPRESS_FULLBACKUP_FILEPATH} 2>> $TMPLOG

  增备:

$INNOBACKUPEXFULL --defaults-file=$MY_CNF --use-memory=2G $MYSQL_CMD --incremental-basedir=${THIS_INCRBASEDIR} --extra-lsndir=${THIS_INCRBACKUP_DIR} --incremental --stream=xbstream ${INCRBACKUP_DIR} 2>> $TMPLOG | 
lbzip2 -kv -n 6 > ${THIS_COMPRESS_INCRBACKUP_FILEPATH} 2>> $TMPLOG

  

  压缩工具使用的是lbzip2,这需要安装。

4. 还原步骤

  1. 停服

  2. 将服务器原始数据文件先移出来出来,清空数据库的数据目录

  3. 将备份的原始文件拷贝一份,上传到服务器所在的机器

  4. lbzip 解压

  5. xbstream 解压

  6. apply-log: 增备和全备都需要,具体语句不做叙述, 除最后一个备份外,其他备份apply-log时需要加--redo-only参数,此外如果还需还原bin-log日志,在第7步完成之后使用mysqladmin进行操作,操作方法不做叙述

  7. copy-back: 因为增备合并到全备中了,所以我们只需要copy-back全备回数据库的数据目录就好

  8. 更改目录权限: chown -R mysql:mysql /var/lib/mysql

  9. 启动服务器

注: 使用xtrabackup来初始化slave无需删除auto.cnf, 如果你是拷贝数据目录,在启动slave时需要删除,这是数据库实例的唯一标识

原文地址:https://www.cnblogs.com/pengyusong/p/6409319.html