mysql备份与恢复

时间:2021-08-11 07:11:18

Mysql的备份工具有

实践:

一、使用mysqldump备份。(该条备份可以在数据量不大情况下在线重导数据,亦可以修复主从同步,因为备份出来的sql文件中记录有binglog和post值)

mysqldump -uxxx -h127.0.0.1 -pxxx -R --triggers  --single-transaction --flush-logs --master-data --database xxx xxx xxx > xxx.sql 

-R : 导出数据库的存储过程和函数

--triggers :为每个转储的表转储触发器。该选项默认启用;用--skip-triggers禁用它。

 --single-transaction:从服务器转储数据之前发出一个BEGIN SQL语句。适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。

 --flush-logs --master-data :开始转储前刷新MySQL服务器日志文件,如果你想要同时转储和刷新日志,应使用--flush-logs连同--master-data。

二:使用xtrabackup备份及数据恢复

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

环境:CentOS 5.4,xtrabackup-1.6.tar.gz

1、首先从http://www.percona.com/下载
       wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6/Linux/binary/i686/xtrabackup-1.6.tar.gz    

2、检查服务器是否安装了Mysql版本,如果没有就要安装好mysql
   my.cnf中必须有     datadir         = /usr/local/mysql/var

3、开始安装xtrabackup
     1)解压     
         cd /opt
         tar zxvf xtrabackup-1.6.tar.gz 
     2)拷贝innobackupex、xtrabackup、xtrabackup_51 工具到/usr/bin
        cp xtrabackup-1.6/bin/innobackupex /usr/bin/innobackupex
        cp xtrabackup-1.6/bin/xtrabackup  /usr/bin/xtrabackup
        cp xtrabackup-1.6/bin/xtrabackup_51  /usr/bin/xtrabackup_51

4、备份并打包压缩
      innobackupex --user=xxx --password=xxx --port=3306  --database=xxx --stream=tar +备份目录 2>> /opt/innobackupex.log | gzip > xxx.sql.tar.gz 
      说明:
      --database=x单独对某个库备份,若是不添加此参数那就那就是对全库做备份
      2>> /opt/innobackupex.log    输出信息写入日志中
      gzip > xxx.sql.tar.gz      打包压缩存储到该文件中

5、恢复数据
      1) 先停止数据库:service mysqld stop
      2) 解压 tar -izxvf xxx.tar.gz -C datadir目录
      3) 恢复

xtrabackup --prepare --target-dir=datadir目录

innobackupex-1.5.1 --apply-log datadir目录
      4) 赋权 chown -R mysql.mysql datadir目录
      5) 重启数据库 service mysqld restart
      进入数据库查看,一切OK~

 

恢复最近一个小时之内的数据,可从bin-log日志中导出数据:

直接本机导出,例如:导出 "2017-06-06 11:25:56"至"2016-06-06 14:56"的binlog数据:
mysqlbinlog --start-datetime="2017-06-06 11:25:56" --stop-datetime="2016-06-06 14:56" mysql-bin.000012 > 000012.sql

再把所有sql导入到数据库中
mysql -uxxx -pxxx -h127.0.0.1 -f < 000012.sql

-f, --force //如果有错误跳过去,继续执行下面的 

使用脚本进行每天4点备份。