MySQL备份方案-->(利用mysqldump以及binlog二进制日志)
MySQL备份方案-->(利用mysqldump以及binlog二进制日志)
随着数据不断增加,而且为了兼容以后的innodb存储引擎, 所以考虑采用mysqldump全备+日志增量备份的策略。使用mysqldump对于mysql大部分mysql存储引擎比如myisam、innodb都有很好的支持。
方案一:mysqldump全备份+日志增量备份
1, mysqldump备份方案:
周一凌晨3点全备
周二到周日凌晨3点增量备份
2, 备份步骤
(1) 创建备份目录,备份脚本存放目录
Shell > mkdir /usr/mysqlbackup;
Shell > chmod 755 /usr/mysqlbackup;
Shell > mkdir /usr/mysqlbackup/daily;
Shell > chmod 755 /usr/mysqlbackup/daily;
Shell > mkdir /usr/script;
Shell > chmod 777 /usr/script/*.sh
(2) 启用二进制日志
如果日志没有启开,必须启用binlog,要重启mysqld,首先,关闭mysqld,打开/etc/my.cnf,加入以下几行:
[mysqld]
log-bin
然后重新启动mysqld,会产生hostname-bin.000001以及hostname-bin.index,前面的日志文件是记录所有对数据的更新操作,后面的文件是存储所有二进制文件的索引,不能轻易被删除。
(3) 全备份,增量备份。
详细见mysqlFullBackup.sh、mysqlDailyBackup.sh脚本(请注意脚本里面的备份目录、mysql软件安装目录、压缩文件名以及用户名密码,如有不符,请修改)。
下面是部分shell上单个手动执行的测试命令。
Shell> /usr/local/mysql/bin/mysqldump -uroot-pnYuIman25040slave201012301124 --no-create-info=FALSE --order-by-primary=FALSE--force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileg
es=FALSE --compress=FALSE --replace=FALSE--insert-ignore=FALSE --extended-insert=TRUE --quote-names=TRUE --hex-blob=TRUE--complete-insert=FALSE --add-locks=TRUE --port=3306 --d
isable-keys=TRUE --delayed-insert=FALSE--create-options=TRUE --delete-master-logs=FALSE --comments=TRUE--default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE -
-dump-date=TRUE --lock-tables=TRUE--allow-keywords=FALSE --events=FALSE --single-transaction=TRUE --routines--all-databases > /backup/mysql/full/mysql_20110104_195546.sql
(4) 设置crontab任务,每天执行备份脚本
shell> crontab –e
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /usr/scrpit/mysqlFullBackup.sh>/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6/root/MySQLBackup/mysqlDailyBackup.sh >/dev/null 2>&1
(5) 清除旧的备份文件。
每天去看查看下备份磁盘空间,删除旧的备份压缩文件。
3, 数据库恢复
【注释】如果增量恢复操作中报“ERROR 1051 (42S02) at line 32: Unknown table 'fin_cell_attr_his'”类似的错误,则需要现create一张空表,然后再执行增量恢复。
Mysql> createtable tb1 ……;
(1) 全恢复:
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,直接用 mysql命令恢复最后一次全备份:
先从备份文件服务器上copy出来,解压缩,再恢复,例如:
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_20101216_231900.sql.tar.gz /usr/mysqlrestore/
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/
Shell>cd /usr/mysqlrestore/
Shell>tar -xvf mysql_20101216_231900.sql.tar.gz
Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz
刷新日志:
Mysql>flush logs;
恢复最后一次全备份命令:
Shell>/usr/local/mysql/bin/mysql -uroot -p123456 </tmp/mysqlbackup/backup_20101215_adb.sql
恢复最后一次全备份之后的所有增量备份命令:
Shell>/usr/local/mysql/bin/mysqlbinlog mysql-bin.00007 mysql-bin.00008mysql-bin.00009 mysql-bin.00010 mysql-bin.00011 | mysql
检查:查看数据库结构以及数据。
(2) 基于时间点恢复一,当天全备份之后的insert点数据故障误操作:
如果上午全备份之后的insert数据被误删除, 在11点发生了误操作.可以直接用bin-log日志将数据库恢复到11点之前的那一刻,然后跳过故障时间点11点,再进行恢复下面所有的操作,命令如下:
刷新日志:
Mysql>flush logs;
先从备份文件服务器上把binlog日志copy出来,解压缩。
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101221_030100.tar.gz /usr/mysqlrestore/
Shell>cd /usr/mysqlrestore/
Shell>tar -xvf mysql_binlog_20101221_030100.tar.gz
日志增量恢复到故障点之前
Shell>/usr/local/myql/bin/mysqlbinlog --stop-date="2010-12-21 10:59:59" mysql-bin.00011|mysql -u root -p 123456
跳过故障的时间点,继续执行后面的binlog,完成恢复
Shell> /usr/local/myql/bin/mysqlbinlog--start-date="2010-12-21 10:59:59" mysql-bin.00011| mysql -u root -p 123456
检查:
用select * from tb等sql命令查看表以及数据是否恢复。
(3) 基于时间点恢复二,当天11点数据故障误操作:
如果上午全备份之后的insert数据被误删除, 在11点发生了误操作.丢失的数据是最后一次备份之前录入的数据,则必须先用全备份文件进行全恢复,然后可以用bin-log日志将数据库恢复到11点之前的那一刻,然后跳过故障时间点11点,再进行恢复下面所有的操作,步骤过程如下:
刷新日志:
Mysql>flush logs;
先从备份文件服务器上copy出来,解压缩,再恢复
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/mysql_20101216_231900.sql.tar.gz /usr/mysqlrestore/
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/
Shell>cd /usr/mysqlrestore/
Shell>tar -xvf mysql_20101216_231900.sql.tar.gz
Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz
恢复最后一次全备份命令:
Shell>/usr/local/mysql/bin/mysql -uroot -p123456 < /tmp/mysqlbackup/mysql_20101216_231900.sql
日志增量恢复到故障点之前
Shell>/usr/local/myql/bin/mysqlbinlog --stop-date="2010-12-21 10:59:59" mysql-bin.00011|mysql -u root -p 123456
跳过故障的时间点,继续执行后面的binlog,完成恢复
Shell> /usr/local/myql/bin/mysqlbinlog--start-date="2010-12-21 10:59:59" mysql-bin.00011| mysql -u root -p 123456
检查:
用select * from tb等sql命令查看表以及数据是否恢复。
(4) 基于时间点恢复三,昨天11点数据故障误操作:
恢复流程,先全恢复,然后日志增量恢复跳过11点后继续日志增量恢复,如下:
先从备份文件服务器上copy出来,解压缩,再恢复
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/mysql_20101216_231900.sql.tar.gz /usr/mysqlrestore/
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/
Shell>cd /usr/mysqlrestore/
Shell>tar -xvf mysql_20101216_231900.sql.tar.gz
Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz
刷新日志:
Mysql>flush logs;
全恢复:
Shell>/usr/local/mysql/bin/mysql -uroot -p123456 < /tmp/mysqlbackup/ mysql_20101216_231900.sql
日志增量恢复到故障点:
Shell>/usr/local/myql/bin/mysqlbinlog --stop-date="2010-12-20 10:59:59" mysql-bin.00010|mysql -u root -p 123456
跳过故障点继续恢复:
Shell>/usr/local/myql/bin/mysqlbinlog --start-date="2010-12-20 10:59:59" mysql-bin.00010mysql-bin.00011| mysql -u root -p 123456
(5) 基于时间点恢复四,多故障点恢复比如2个故障点数据故障误操作:
第一个故障点:2010-12-2113:41:41 –> 2010-12-21 13:42:36
第二个故障点:2010-12-2113:43:16 –> 2010-12-21 13:46:05
恢复流程,先全恢复,然后日志增量恢复跳过第一个故障点后继续日志增量恢复到第二个故障点,然后跳过第二个故障点继续恢复到终点,如下:
先从备份文件服务器上copy出来,解压缩,再恢复
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/mysql_20101216_231900.sql.tar.gz /usr/mysqlrestore/
Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/
Shell>cd /usr/mysqlrestore/
Shell>tar -xvf mysql_20101216_231900.sql.tar.gz
Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz
刷新日志:
Mysql>flush logs;
全恢复:
Shell>/usr/local/mysql/bin/mysql -uroot -p123456 < /tmp/mysqlbackup/ mysql_20101216_231900.sql
日志增量恢复到第一个故障点之前:
Shell>/usr/local/mysql/bin/mysqlbinlog --stop-date="2010-12-21 13:41:41"mysql-bin.000012| mysql -u root -p123456;
跳过故障点继续恢复到第二个故障点之前:
Shell> /usr/local/mysql/bin/mysqlbinlog--start-date="2010-12-21 13:42:36" --stop-date="2010-12-2113:43:16" mysql-bin.000012 mysql-bin.000013|mysql -u root -p123456;
跳过第二个故障点恢复到flushlogs之时
Shell>/usr/local/mysql/bin/mysqlbinlog --start-date="2010-12-21 13:46:05" --stop-date="2010-12-2113:46:33" mysql-bin.000012 mysql-bin.000013| mysql -u root -p123456;
检查:运用sql语句查询误操作的表以及数据是否已经恢复。
(6) 恢复单一库:
Shell>/usr/local/mysql/bin/mysql -uroot -pmysql --database=csf </tmp/mysqlbackup/backup_20101215_adb_003.sql
(7) 基于单库中的各种时间点情况恢复:
请参考 以上步骤(1)到(5),过程基本一样,只要在恢复命令后面加上一个空格和库名就可以了。
(8) 恢复单库中的单张表:
Mysql所提供的工具目前无法做到这一步,有个方案是:先恢复整个库到一个测试数据服务器上,然后在此服务器上导出单张表的sql,然后把这个sql导入进生产库上。
在测试服务器上导入库:
Shell>/usr/local/mysql/bin/mysql -uroot -pmysql --database=csf </tmp/mysqlbackup/backup_20101215_adb_003.sql
从测试服务器导出单个表:
Shell>/usr/local/mysql/bin/mysqldump --user=root -pmysql --port=3306--default-character-set=utf8 --single-transaction=TRUE "csf" "tmp_excel_data_000728" > /tmp/mysqlbackup/backup_20101215_single_table_013.sql
在生产库上导入此表记录
Shell>/usr/local/mysql/bin/mysql -uroot -pmysql csf < /tmp/mysqlbackup/backup_20101215_single_table_013.sql
检查数据
Select* from csf. tmp_excel_data_000728;
(9) 电源故障恢复
重启服务器之后,重启数据库,mysql自动恢复,断电时候正在运行的数据库任务和操作需要重新执行一遍。
(10) 操作系统崩溃恢复
操作系统恢复之后,重启数据库,mysql自动恢复,系统崩溃时正在运行的数据库任务以及操作需要重新执行一遍
(11) 文件系统崩溃恢复
文件系统恢复之后,重启数据库即可,系统崩溃时正在运行的数据库任务以及操作需要重新执行一遍。
(12) 硬件坏块恢复
重格磁盘,然后恢复数据库。
MySQL备份方案-->(利用mysqldump以及binlog二进制日志)的更多相关文章
- 【MYSQL备份】利用mysqldump将一个数据库复制到另一个数据库
假设要将服务器A上的数据库test备份到服务器B 1.在服务器B上新建数据库cp_test mysql> create database cp_test; Query OK, row affec ...
- Mysql备份方案总结性梳理
Mysql备份方案总结性梳理 服务器 mysql 日志 数据库 配置 Mariadb binlog mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种 ...
- MySQL备份--xtrabackup与mysqldump工具使用
MySQL备份----xtrabackup与mysqldump工具的使用 一.Xtrabackup8.0: 一个用于MySQL数据库物理热备的备份工具,支持MySQL.Percona server和M ...
- MySQL备份工具之mysqldump使用
MySQL备份工具之mysqldump使用说明 一.备份分类 根据能否停用数据库,将备份类型分为: 1. 冷备:数据库服务停止后备份 2. 温备:只能对数据库进行读操作,不能进行写操作 3. 热备:在 ...
- Mysql binlog二进制日志
Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的实际原sql语句都会被记录在binlog中. 优点:不需要记录每一 ...
- mysql 备份报错mysqldump: [Warning] Using a password on the command line interface can be insecure.
-------------------------------------------------------------------------------- mysql 备份报错mysqldump ...
- mysql备份工具 :mysqldump mydumper Xtrabackup 原理
备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...
- XtraBackup物理备份 阿里云的Mysql备份方案
XtraBackup物理备份 Percona XtraBackup是世界上唯一的开源,免费的MySQL热备份软件,为InnoDB和XtraDB 数据库执行非阻塞备份.使用Percona XtraBac ...
- (3.1)mysql备份与恢复之mysqldump
目录: 1.单实例联系 1.1.备份单个数据库联系多种参数使用 [1]mysqldump命令备份演示 [2]查看备份文件 [3]用备份文件还原 1.2.mysqldump 各类参数释义 [1]--de ...
随机推荐
- BFS 、DFS 解决迷宫入门问题
问题 B: 逃离迷宫二 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5[提交][状态][讨论版] 题目描述 王子深爱着公主.但是一天,公主被妖怪抓走了,并且被关到了迷宫. ...
- 开发快很重要——如果只看法语或者产品结果C++似乎很强大,但是参与这个C++的开发过程,就会感觉到这种痛苦(Google也是这个看法)
开发快很重要——如果只看语法或者产品结果C++似乎很强大,但是参与这个C++的开发过程,就会感觉到这种痛苦,太慢了,太麻烦了,虽然在反复调试和优化之后,最后产品的结果可能还不错. Delphi的最大特 ...
- linux下find命令-atime,-ctime,-mtime真正含义
linux下的-atime,-ctime,-mtime含义我们经常会在论坛或者群里面被问到,在linux或者unix下如何查看某文件的创建日期?经常又会有人说用find命令加选项-ctime,其实这里 ...
- java邮件小实例
新建一个包,名为mail 第一个类:MailSenderInfo.java ########################################### package com.util. ...
- android 网络交互
一. 在Android中,发送和处理http请求实在太常见了,以至于我们经常需要写这方面的代码. Android中网络交互的代码不能在UI线程中执行,只能在额外的子线程中执行. 我一般的做法是通过创建 ...
- WPF4字体改善
原文 WPF4字体改善 WPF4对字体渲染做了很大的改善,增加了TextOptions属性,该属性可以设置TextFormattingMode,TextRenderingMode,TextHintin ...
- 基于visual Studio2013解决C语言竞赛题之0903文件读写
题目
- 双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .
双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后 ...
- bzoj 1020-1029
1020 SHOI2008 安全的航线flight 这题的代码写了很久,主要是因为几何题的东西都忘得差不多了.除去写代码的2个小时,今晚又调了一晚上,终于AC了. 这题的做法还是很有参考价值的. 最简 ...
- 前端面试题整理(html)
1.<!DOCTYPE>标签的定义与用法. <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> ...