jdgue 发表于 2018-9-30 12:24:11

使用xtrabackup备份mysql-notepad

  一、下载
  下载地址:http://www.percona.com/downloads/XtraBackup/
  注:官方分4种包,二进制、源码、deb、rpm,这里直接下载二进制,解压后直接添加PATH变量使用即可
  二、安装(二进制包)
  tar zxf percona-xtrabackup-2.0.2-461.tar.gz
  mv percona-xtrabackup-2.0.2 /usr/local/xtrabackup
  echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
  source /etc/profile
  三、备份(只介绍完整备份)
  1、开始备份前的检查:
  确认my.cnf中指定了datadir。
  2、开始备份
  #创建备份目录
  mkdir /data/backup/
  #备份到本地目录(备份discuz库)
  innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz" --slave-info /data/backup/
  注:--slave-info用来产生配置主从需要的:change语句(添加从节点时有用),如下:
  CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000025', MASTER_LOG_POS=98
  #备份到本地目录(不指定--databases选项备份所有库)
  innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --slave-info /data/backup/
  #备份到本地目录(备份scm库,打包)
  innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="scm" --slave-info --stream=tar /data/backup/ >/data/backup/xtrabackup_scm.$(date +%Y%m%d-%H%M%S).tar
  #备份到本地目录(备份discuz、scm库,打包,压缩)
  innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz scm" --slave-info --stream=tar /data/backup/ | gzip >/data/backup/xtrabackup_scm_discuz.$(date +%Y%m%d-%H%M%S).tgz
  #备份到远程服务器(备份discuz、scm库,打包,压缩 ,远程服务器)
  innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz scm" --slave-info --stream=tar /data/backup/ | gzip | ssh -p51022 yangjuying@172.31.0.15 cat ">" /data/backup/xtrabackup_scm_discuz.tgz
  注:不推荐把备份到远程服务器的命令用作计划任务,查找相关资料为BUG,会经常挂起,如下:
   Streaming ./ibdata1
  >> log scanned up to (0 3648378)
  >> log scanned up to (0 3648378)
  >> log scanned up to (0 3648378)
  >> log scanned up to (0 3648378)
  四、恢复(把拷贝的日志应用到拷贝的表数据文件的过程)
  innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --apply-log /data/backup/2014-02-26_20-36-49
  五、还原(注:直接拷贝;不使用--copy-back)
  #如果为压缩包先解压缩:
  tar -izxf xtrabackup_scm_discuz.tgz
  #进入解压后的目录
  cd ...
  #修改数据库目录和表文件权限;修改属主、组(mysql不需要还原,不用修改)
  目录权限: chmod 700 discuz scm
  文件权限: chmod 660 discuz/* scm/*
  属主、组: chown -R mysql.mysql *
  #停止服务
  /etc/init.d/mysqld stop
  #datadir下有同名数据库目录删除;拷贝库到datadir;覆盖datadir中的ibdata1 ib_logfile0 ib_logfile1
  mv discuz scm ibdata1 ib_logfile0 ib_logfile1 /data/mysql
  #启动服务
  /etc/init.d/mysqld start
  注:不使用官方的--copy-back选项还原是因为执行后会有一个BUG报错:Original data directory is not empty!
  (完成)
  ################################################################################
  补充:
  1、xtrabackup_slave_info:为该从库的主库添加新从库使用。
  xtrabackup_binlog_info:为该从库添加从库使用。
  ################################################################################
  总结:
  1、优点:
  如果要备份的库ENGINE为MYISAM,数据库比较大,使用该工具备份、还原速度比mysqldump快很多;实现不停止数据库即可配置mysql复制。
  2、缺点:
  不能单独还原单个innodb的库(在一个生产服务数据库器添加新业务数据库时),解决办法一般是在一个空服务器中,还原备份再mysqldump导出单个库。
  3、增量备份这里没有介绍,增量备份只是相对于innodb的表,MyISAM表的数据库还是完全备份。
  4、即使要备份的服务器使用独立表空间,innodb_file_per_table=1,也无法单独还原innodb库。
  5、表空间只会增长,不会缩小,可以使用dump导出,然后删除ibdata表空间文件,再使用mysqldump工具导入 。
  ######################################################################################################
  附:独立表空间配置步骤
  mysqldump备份所有库
  关闭服务
  修改配置文件,添加
  innodb_file_per_table=1
  启动服务
  使用以下命令查看是否成功开启
  show variables like '%per_table%';
  导入mysqldump的备份,
  完成
  ######################################################################################################
  


zhho 发表于 2018-9-30 12:36:40

谢谢楼主的分享
页: [1]
查看完整版本: 使用xtrabackup备份mysql-notepad