手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

MySQL备份方案-->(利用mysqldump以及binlog二进制日志)

[日期:2013-09-11] 来源:Linux社区  作者:mchdba [字体: ]

(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) 硬件坏块恢复

重格磁盘,然后恢复数据库。

linux
相关资讯       MYSQL备份  mysqldump 
本文评论   查看全部评论 (1)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼
* 雾游野会员 发表于 2015/5/5 12:38:30
你的那两个脚本在哪,找不到。