mysql备份与恢复
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点备份。