zoukankan      html  css  js  c++  java
  • mysql数据库备份工具xtrabackup

    1.下载二进制安装包

    其他高版本测试缺少依赖

    2.xtrabackup参数说明

    简介:
      Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
        Xtrabackup有两个主要的工具:xtrabackup、innobackupex
      (1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
      (2)innobackupex则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁

     innobackupex常用参数

     1 --compact        创建一个不包含第二索引(除了主键之外的索引)的备份
     2 --decompress        解压之前所有以–compress参数备份出来的带有.qp格式的备份文件,--parallel参数会允许同时解锁或解压多个文件。需要安装qpress软件。
     3 --defaults-file=[MY.CNF] 配置文件的路径
     4 --incremental-basedir 以上一次全量或增量备份的路径,作为增量备份的基础。指定这个参数的同时,应该同样指定--incremental参数
     5 --incremental 创建增量备份,当指定这个参数的时候,应该指定--incremental-lsn或--incremental-basedir参数,否则将会备份到--incremental-basedir路径
     6 --apply-log  在备份目录下,通过应用名称为xtrabackup_logfile的交易日志文件来准备备份。同时,创建新的交易日志。
     7 --redo-only 当准备数据库的全备或合并增量备份时,需要指定这个参数。这个参数实际上执行的是xtrabackup --apply-log-only,会让xtrabackup跳过回滚节点,只做“redo”步骤。当数据库需要应用增量备份时,需要指定这个参数。
     8 --incremental-dir=DIRECTORY 指定增量备份的目录,需要搭配--incremental参数。
     9 --no-timestamp 这个参数会让xtrabackup在备份的时候不创建带有时间格式的子文件夹。当指定了这个参数,备份会直接创建在指定的备份目录下
    10 --stream=STREAMNAME 指定流备份的格式。备份将会以指定格式输出到STDOUT。目前支持的格式有tar 和 xbstream。如果指定了这个参数,后面需要接tmpdir目录作为处理流的一个中间目录。
    11 --slave-info    当备份一个作为复制环境的服务器时,这个参数会自动将CHANGE MASTER语句写到备份中,在恢复备份后,不必执行CHANGE MASTER语句。
    12 --tables-file=FILE        这个参数会接受一个字符串,这个字符串指定了一个文件,这个文件包含了要备份的表名,格式如database.table,一行一个。
    13 --use-memory=#        这个参数用于在准备备份时,xtrabackup执行crash recovery所使用的内存大小。这个参数仅和--apply-log搭配时才生效。

    使用--stream=tar备份,压缩、解压、已经压缩后的大小都优于-stream=xbstream,推荐使用--stream=tar方式压缩,解压时还可以配合tar

    3.全量备份

    shell > vim script/backupdb.sh
    
    #!/bin/bash
    dbname='alldatabases'
    dbuser='user'
    dbpassword='passwd'
    
    backup_dir='/data/backup_db'
    backup_log='/root/script/logs/backup.log'
    
    mtime=`date +%Y-%m`
    dtime=`date +%d`
    
    log(){
      echo -e "`date "+%F %T"` DBname: $1 State: $2
    " >> $backup_log
    }
    
    [ ! -d $backup_dir/$mtime ] && mkdir -p $backup_dir/$mtime
    
    cd $backup_dir/$mtime && /usr/bin/innobackupex --no-lock --user=$dbuser --password=$dbpassword --no-timestamp $dbname > /dev/null 2>&1
    
    if [ $? -eq 0 ];then
      log $dbname 'Backup success.'
      dbakfile=$dbname.$dtime.tar.gz
      tar zcf $dbakfile $dbname --remove-files
      [ $? -eq 0 ] && log $dbakfile 'Packaging success.' || log $dbakfile 'Packaging failed.'
    else
      log $dbname 'Backup failed.'
    fi

    4.全备还原

    shell > /etc/init.d/mysql.server stop  # 首先关闭数据库
    
    shell > cd /data/backup_db  # 切换到备份目录
    
    shell > mv /usr/local/mysql-5.5.52/data data.old  # 将原来的数据目录备份一下
    
    shell > tar zxf alldatabase.11.tar.gz  # 然后将原来的备份解压缩
    
    shell > innobackupex --apply-log alldatabase  # 在备份上应用日志,一般没有看到报错且最后显示 OK 就没有问题 ( --use-memory 使用该参数加快速度 )
    12:07:33 completed OK!
    
    shell > innobackupex --copy-back alldatabase  # 将备份还原到 my.cnf 指定的 datadir 中,不指定 --defaults-file,默认 /etc/my.cnf
    
    Error: datadir must be specified.  # 报错信息显示,在默认配置文件 /etc/my.cnf 中,没有找到 datadir 配置项
    
    shell > vim /etc/my.cnf  # 加入 datadir 配置项
    
    datadir         = /usr/local/mysql-5.5.52/data
    
    shell > innobackupex --copy-back alldatabase  # 再次执行 copy 动作,没有报错且显示 OK 
    12:17:52 completed OK!
    
    shell > ll -d /usr/local/mysql-5.5.52/data
    drwxr-x--- 6 root root 4096 10月 11 12:17 /usr/local/mysql-5.5.52/data
    
    shell > chown -R mysql.mysql /usr/local/mysql-5.5.52/data  # 修改数据目录权限
    
    shell > /etc/init.d/mysql.server start

    # 备份已经恢复!
    # 回顾整个恢复过程,发现一个问题:之前数据库里的东西全部没有了...
    # 也就是说,innobackupex 只适用于该 MySQL 中除系统库外,只有一个库的备份。
    # 虽然有选项 --databases 可以指定备份哪个数据库,但是备出来的结果却是 all databases,且恢复的时候也是全部覆盖。(默认不指定备份数据库,则全库备份)
    # 1、采用 innobackupex 备份整库,然后恢复到一台新库上,再通过 mysqldump 将需要还原的单库备份一次,之后导入需要恢复的数据库中 ( 要考虑恢复时间 )。
    # 2、采用 innobackupex 备份只有一个业务库的 MySQL Server,恢复到只有该业务库的 MySQL Server 中。
    # 3、如果一个 MySQL Server 中有多个数据库,又只想备份某个库,且该库体积比较小的情况下,建议使用 mysqldump 备份。

  • 相关阅读:
    PHP调用WCF提供的方法
    关于git报 warning: LF will be replaced by CRLF in README.md.的警告的解决办法
    vue中引入mui报Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them的错误
    微信小程序报Cannot read property 'setData' of undefined的错误
    Vue那些事儿之用visual stuido code编写vue报的错误Elements in iteration expect to have 'v-bind:key' directives.
    关于xampp中无法启动mysql,Attempting to start MySQL service...的解决办法!!
    PHP的环境搭建
    新手PHP连接MySQL数据库出问题(Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES))
    手机号码、获得当前时间,下拉框,填写限制
    团队作业(五):冲刺总结
  • 原文地址:https://www.cnblogs.com/lvcisco/p/11890202.html
Copyright © 2011-2022 走看看