热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL备份方案>(利用mysqldump以及binlog二

                                                       MySQL备份方案-->(利用mysqldump以及b

 



                                                     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

恢复最后一次全备份之后的所有增量备份命令:


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

日志增量恢复到故障点之前


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

日志增量恢复到故障点:


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

日志增量恢复到第一个故障点之前:


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

 


(7)    基于单库中的各种时间点情况恢复:

请参考

以上步骤


(1)





(5)




过程基本一样,只要在恢复命令后面加上一个空格和库名就可以了。


(8)    恢复单库中的单张表:

Mysql所提供的工具目前无法做到这一步,有个方案是:先恢复整个库到一个测试数据服务器上,然后在此服务器上导出单张表的sql,然后把这个sql导入进生产库上。

在测试服务器上导入库:


Shell>/usr/local/mysql/bin/mysql -uroot -pmysql --database=csf

 

从测试服务器导出单个表:


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

检查数据


Select* from csf. tmp_excel_data_000728;


 


(9)     电源故障恢复

重启服务器之后,重启数据库,mysql自动恢复,断电时候正在运行的数据库任务和操作需要重新执行一遍。


(10)  操作系统崩溃恢复

  操作系统恢复之后,重启数据库,mysql自动恢复,系统崩溃时正在运行的数据库任务以及操作需要重新执行一遍


(11)  文件系统崩溃恢复

文件系统恢复之后,重启数据库即可,系统崩溃时正在运行的数据库任务以及操作需要重新执行一遍。


(12)  硬件坏块恢复

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

 

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




推荐阅读
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
author-avatar
中国中国NO1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有