mysql 定期备份策略,MySQL--3--mysqldump备份策略

参考地址:http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/database-administration.html#backup-strategy-example

5.9 备份策略

在my.inf中启动二进制日志,用--log-bin[=file_name]选项启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。如果未给出file_name值, 默认名为-bin后面所跟的主机名。如果给出了文件名,但没有包含路径,则文件被写入数据目录。建议指定一个文件名,这样在数据库系统崩溃的情况下应该能够使用其日志。

如果你在日志名中提供了扩展名(例如,--log-bin=file_name.extension),则扩展名被悄悄除掉并忽略。

mysqld在每个二进制日志名后面添加一个数字扩展名。每次你启动服务器或刷新日志时该数字则增加。如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志。如果你正使用大的事务,二进制日志还会超过max_binlog_size:事务全写入一个二进制日志中,绝对不要写入不同的二进制日志中。

为了能够知道还使用了哪个不同的二进制日志文件,mysqld还创建一个二进制日志索引文件,包含所有使用的二进制日志文件的文件名。默认情况下与二进制日志文件的文件名相同,扩展名为'.index'。你可以用--log-bin-index[=file_name]选项更改二进制日志索引文件的文件名。当mysqld在运行时,不应手动编辑该文件;如果这样做将会使mysqld变得混乱。

5.9.1 备份(以下省略了-u和-p参数)

我们都知道必须按计划定期进行备份。可以用几个工具完全备份(在某个时间点的数据快照)MySQL。例如,InnoDB Hot Backup为InnoDB数据文件提供在线非数据块物理备份,mysqldump提供在线逻辑备份。这里使用mysqldump。

假定我们在星期日下午1点进行了备份,此时负荷较低。下面的命令可以完全备份所有数据库中的所有InnoDB表:

shell> mysqldump --single-transaction --all-databases > backup_sunday_1_PM.sql

这是在线非块备份,不会干扰对表的读写。我们以前假定我们的表为InnoDB表,因此--single-transaction使用一致性地读,并且保证mysqldump所看见的数据不会更改。(其它客户端对InnoDB表进行的更改不会被mysqldump进程看见)。如果我们还有其它类型的表,我们必须假定在备份过程中它们不会更改。例如,对于mysql数据库中的MyISAM表,我们必须假定在备份过程中没有对MySQL账户进行管理更改。

mysqldump命令产生的.sql文件包含一系列SQL INSERT语句,可以用来重载转储的表。

需要进行完全备份,但有时不方便。会产生大的备份文件并需要花时间来生成。从某个角度,完全备份并不理想,因为每个成功的完全备份包括所有数据,甚至自从上一次完全备份以来没有更改的部分。完成了初使完全备份后,进行增量备份会更有效。这样备份文件要小得多,备份时间也较短。不利之处是,恢复时不能只重载完全备份来恢复数据。还必须要用增量备份来恢复增量更改。

要想进行增量备份,我们需要保存增量更改。应使用--log-bin选项启动MySQL服务器,以便更新数据时将这些更改保存到文件中。该选项启用二进制日志,因此服务器写将每个更新数据的SQL语句写入MySQL二进制日志。让我们看看用--log-bin选项启动的已经运行多日的MySQL服务器的数据目录。我们找到以下MySQL二进制日志文件:

-rw-rw---- 1 guilhem  guilhem   1277324 Nov 10 23:59 gbichot2-bin.000001

-rw-rw---- 1 guilhem  guilhem         4 Nov 10 23:59 gbichot2-bin.000002

-rw-rw---- 1 guilhem  guilhem        79 Nov 11 11:06 gbichot2-bin.000003

-rw-rw---- 1 guilhem  guilhem       508 Nov 11 11:08 gbichot2-bin.000004

-rw-rw---- 1 guilhem  guilhem 220047446 Nov 12 16:47 gbichot2-bin.000005

-rw-rw---- 1 guilhem  guilhem    998412 Nov 14 10:08 gbichot2-bin.000006

-rw-rw---- 1 guilhem  guilhem       361 Nov 14 10:07 gbichot2-bin.index

每次重启,MySQL服务器用序列中的下一个编号创建一个新的二进制日志文件。当服务器运行时,你还可以通过执行FLUSH LOGS SQL语句或mysqladmin flush-logs命令,告诉服务器关闭当前的二进制日志文件并创建一个新文件。mysqldump也有一个选项来清空日志。数据目录中的.index文件包含该目录下所有MySQL二进制日志的清单。该文件用于复制。

恢复时MySQL二进制日志很重要,因为它们是增量备份。如果进行完全备份时确保清空了日志,则后面创建的二进制日志文件包含了备份后的所有数据更改。让我们稍稍修改前面的mysqldump命令,让它在完全备份时能够清空 MySQL二进制日志,以便转储文件包含包含新的当前的二进制日志:

shell> mysqldump --single-transaction --flush-logs --master-data=2           --all-databases > backup_sunday_1_PM.sql

执行该命令后,数据目录则包含新的二进制日志文件,gbichot2-bin.000007。结果.sql文件包含下列行:

-- Position to start replication or point-in-time 恢复时y from-- CHANGE MASTER TO MASTER_LOG_FILE='gbichot2-bin.000007',MASTER_LOG_POS=4;

因为mysqldump命令可以执行完全备份,这些行表示两件事情:

· .sql文件包含所有写入gbichot2-bin.000007二进制日志文件或最新的文件之前的更改。

· 备份后所记录的所有数据更改不出现在.sql中,但出现在gbichot2-bin.000007二进制日志文件或最新的文件中。

在星期一下午1点,我们可以清空日志开始新的二进制日志文件来创建增量备份。例如,执行mysqladmin flush-logs命令创建gbichot2-bin.000008。星期日下午1点的完全备份和星期一下午1点之间的所有更改为文件gbichot2-bin.000007。该增量备份很重要,因此最好将它复制到安全的地方。(例如,备份到磁带或DVD上,或复制到另一台机器上)。在星期二下午1点,执行另一个mysqladmin flush-logs命令。星期一下午1点和星期二下午1点之间的所有所有更改为文件gbichot2-bin.000008(也应复制到某个安全的地方)。

MySQL二进制日志占据硬盘空间。要想释放空间,应随时清空。操作方法是删掉不再使用的二进制日志,例如进行完全备份时:

shell> mysqldump --single-transaction --flush-logs --master-data=2           --all-databases --delete-master-logs > backup_sunday_1_PM.sql

注释:如果你的服务器为复制主服务器,用mysqldump --delete-master-logs删掉MySQL二进制日志很危险,因为从服务器可能还没有完全处理该二进制日志的内容。

PURGE MASTER LOGS语句的描述中解释了为什么在删掉MySQL二进制日志之前应进行确认。参见13.6.1.1节,“PURGE MASTER LOGS语法”。 5.9.2.2. 为恢复进行备份

现在假设在星期三上午8点出现了灾难性崩溃,需要使用备份文件进行恢复。恢复时,我们首先恢复最后的完全备份(从星期日下午1点开始)。完全备份文件是一系列SQL语句,因此恢复它很容易:

shell> mysql < backup_sunday_1_PM.sql

在该点,数据恢复到星期日下午1点的状态。要想恢复从那时起的更改,我们必须使用增量备份,也就是,gbichot2-bin.000007和gbichot2-bin.000008二进制日志文件。根据需要从备份处取过这些文件,然后按下述方式处理:

shell> mysqlbinlog gbichot2-bin.000007 gbichot2-bin.000008 | mysql

另一个方法是:

shell> mysqlbinlog hostname-bin.000007 >  /tmp/statements.sql

shell> mysqlbinlog hostname-bin.000008 >> /tmp/statements.sqlshell> mysql -e "source /tmp/statements.sql"

我们现在将数据恢复到星期二下午1点的状态,但是从该时刻到崩溃之间的数据仍然有丢失。要想恢复,我们需要MySQL服务器将MySQL二进制日志保存到安全的位置(RAID disks, SAN, ...),应为与数据文件的保存位置不同的地方,保证这些日志不在毁坏的硬盘上。(也就是,我们可以用--log-bin选项启动服务器,指定一个其它物理设备上的与数据目录不同的位置。这样,即使包含该目录的设备丢失,日志也不会丢失)。如果我们执行了这些操作,我们手头上会有gbichot2-bin.000009文件,我们可以用它来恢复大部分最新的数据更改,而不会丢失到崩溃时的数据。 5.9.2.3. 备份策略摘要

出现操作系统崩溃或电源故障时,InnoDB自己可以完成所有数据恢复工作。但为了确保你可以睡好觉,应遵从下面的指导:

· 一定用--log-bin或甚至--log-bin=log_name选项运行MySQL服务器,其中日志文件名位于某个安全媒介上,不同于数据目录所在驱动器。如果你有这样的安全媒介,最好进行硬盘负载均衡(这样能够提高性能)。

· 定期进行完全备份,使用mysqldump命令进行在线非块备份。

· 用FLUSH LOGS或mysqladmin flush-logs清空日志进行定期增量备份。

5.9.3. 自动恢复

如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据。关于启用二进制日志的信息,参见5.11.3节,“二进制日志”。对于mysqlbinlog的详细信息,参见8.6节,“mysqlbinlog:用于处理二进制日志文件的实用工具”。

要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出。启用二进制日志的选项为--log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:

SHOW BINLOG EVENTS \G

你还可以从命令行输入下面的内容:

mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS \G'

将密码my_pwd替换为服务器的root密码。 5.9.3.1. 指定恢复时间

对于MySQL 4.1.4,可以在mysqlbinlog语句中通过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2005年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \     | mysql -u root -pmypwd

该命令将恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \     | mysql -u root -pmypwd \

在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。 5.9.3.2. 指定恢复位置

也可以不指定日期和时间,而使用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \      /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \    | mysql -u root -pmypwd mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \    | mysql -u root -pmypwd \

上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兔弟弟和月亮婆婆

有一天晚上&#xff0c;兔弟弟不想睡觉。他要去找小青蛙玩。兔妈妈摇摇头说&#xff1a;“乖孩子&#xff0c;睡觉吧。明天早些起来&#xff0c;找小青蛙玩去!” 兔弟弟不听妈妈的话&#xff0c;他说&#xff1a;“我要去&#xff0c;我要去&#xff0c;我不要睡觉!”兔妈妈不…

matlab问题利用M文件比较两个数大小,Matlab中写M文件及调用

1题、自然数n的阶乘function ylilu_fact(n)nfloor(n);%如果是小数,向下取整至整数y1;if n>1 %这里负数,0的阶乘都将得到1for i1:nyy*i;endend2题、n中取m的组合function ylilu_cnm(n,m)y1;if (n>m && n>0 & m>0)mmin(n-m,m);for i1:myy*(n-i1)/i;ende…

小老鼠艾尔的新毯子

今天分享一则非常暖心的故事《小老鼠艾尔的新毯子》最开心的事不是拥有什么宝贝&#xff0c;而是因为你的行动让别人开心&#xff0c;那才是最大的快乐。 小老鼠艾尔有一次在外出的时候&#xff0c;捡到一条漂亮的毛毯&#xff0c;实际上那是一个小姑娘的袜子&#xff0c;是她…

matlab 展开多项式,matlab中freqz的用法以及多项式的展开

对于一个变量a&#xff0c;matlab中定义需要这样 syms a&#xff1b;定义之后就可以写由变量组成的式子&#xff0c;比如 c(1a^-1)^5;可以用expand(c) 就能把c展开成多项式&#xff0c;每一项的系数就可以看到。freqz的用法MATLAB提供了专门用于求离散系统频响特性的函数freqz(…

IE11浏览器一个窗口打开多个页面设置方法

ie1166760一个窗口打开多个页面设置方法 IE11浏览器怎么设置一个窗口打开多个页面?一般新系统安装好了以后&#xff0c;默认的ie浏览器一个窗口都只能打开一个页面&#xff0c;一旦页面打开的多了的话&#xff0c;就会很卡&#xff0c;拖慢电脑的运行速度&#xff0c;而且整个…

php 如何模拟浏览器,利用php的curl扩展进行模拟浏览器访问网页

我们一般要抓取一个网站的静态页面来完成我们的需求&#xff0c;其实在这里面有很多种方式可以完成&#xff0c;php内置函数file_get_contents();file();readfile();都可以进行网页抓取&#xff0c;但是这种方式毕竟是有很大局限性的&#xff0c;例如我们要访问一个需要登录的网…

如何用极路由新插件【搜狐视频】进行远程下载

本文播放器家园网小编给大家分享如何用极路由新插件【搜狐视频】进行远程下载&#xff0c;如果大家在使用搜狐视频过程当中遇到类似问题&#xff0c;欢迎阅读本文!此外&#xff0c;在搜狐视频视频播放器上观看更流畅&#xff0c;画质更清晰&#xff0c;拒绝卡慢钝&#xff0c;而…

php数据库可转java数据库,php转java 系列2 Spring boo 链接数据库jdbc

php转java 系列2 Spring boo 链接数据库jdbcJDBC首先创建一个新项目&#xff0c;在创建项目时要注意导入依赖&#xff0c;在项目创建成功后就会看到在 pom.xml 文件中找到&#xff0c;但是如果在创建项目的时候没有导入&#xff0c;就要在pom.xml中手动的添加依赖&#xff1b;o…

edge浏览器下载位置设置在哪里设置

edge66760下载位置设置在哪里设置 edge浏览器下载位置设置在哪?很多Win10用户要求微软为Edge浏览器增加下载位置设置选项&#xff0c;那么win10 Edge浏览器的默认下载位置在哪里修改?怎么修改?在Windows10的反馈应用中&#xff0c;很多用户都反映Edge浏览器没有自定义下载位…

Python使用训练数据拟合模型

# 假设“满意度”是因变量&#xff0c;其他的是自变量 # 提取自变量&#xff08;特征&#xff09;和因变量&#xff08;目标&#xff09; X df_filtered_cleaned[[Bonus, Enhancement, Time_in_seconds]] y df_filtered_cleaned[Satisfaction] # 分割为训练集和测试集。 …

php连接excel表格数据类型,TP5 中使用PHPExcel 导出导入数据到excel表格

将下载好的PHPExcel文件夹放置在框架中的Vendor目录下&#xff0c;注意目录的结构&#xff0c;按照我的代码来基本上直接引用就能使用&#xff0c;如下图&#xff1a;导出数据代码如下//导出数据表 开始public function product(){$listdb(product)->select();vendor("…

PPTV网络电视如何修复浏览器支持异常

这篇文章主要说的是PPTV网络电视如何修复66760支持异常&#xff0c;希望可以帮助大家。pptv播放器是一款专注视频播放的客户端软件&#xff0c;免费下载安装&#xff0c;观看高清正版影视&#xff0c;可在线享受pptv播放器网站内全部免费高清正版视频&#xff0c;是最个性化、时…

oracle导致的负载高,Oracle 11g 数据库服务器CPU、IO负载高的故障排除流程

使用top查看负载高的进程~ [OSMSRDB]$ toptop - 11:02:43 up 12 days, 17:15, 4 users, load average: 1.50, 0.93, 0.36Tasks: 363 total, 1 running, 362 sleeping, 0 stopped, 0 zombieCpu(s): 1.2%us, 0.3%sy, 0.0%ni, 68.4%id,30.1%wa, 0.0%hi, 0.0%si, 0.0…

母狼高斯普和狐狸

《母狼高斯普和狐狸》母狼生了一只小狼&#xff0c;于是请来狐狸当教父。她说&#xff1a;“总之&#xff0c;狐狸是我们的近亲&#xff0c;见多识广而且头脑聪明;它能教好我儿子&#xff0c;帮他在世界上生存。” 狐狸装得很诚实地说&#xff1a;“亲爱的高司普太太&#xff…

oracle在线中文文档,Oracle TopLink

12.4.4. 事务管理将事务管理纳入到Service操作的执行中&#xff0c;你可以使用Spring通用的声明式的事务管理功能&#xff0c;参加下面的例子&#xff1a;xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

优酷视频什么是登录保护?

登陆维护是对于移动终端(包括iphone、android、ipad等手机端)的账户维护作用。 打开了登陆维护以后&#xff0c;在一个新的机器设备上开展登陆(包含账户密码登陆、第三方授权登录等方法)时&#xff0c;必须根据验证码短信开展身份认证&#xff0c;验证通过后才可以登录成功&am…

PP视频怎么关闭PP视频虚拟键盘显示

今天小编给广大用户分享PP视频怎么关闭PP视频虚拟键盘显示。此外&#xff0c;在PP视频视频播放器上观看更流畅&#xff0c;画质更清晰&#xff0c;拒绝卡慢钝&#xff0c;而且还有许多自制独播综艺&#xff0c;让你看到停不下来!PP视频视频播放器是PP视频官方推出的一款网络视频…

清理linux 服务器的命令行,使用Linux上的Magic SysRq键修复冻结的X服务器,清理重新启动并运行其他低级命令 | MOS86...

在Linux中&#xff0c;魔术SysRq键可以直接发送命令到Linux内核。您可以使用它来恢复冻结或干净地重新启动系统&#xff0c;即使没有任何反应。魔术SysRq键是作为Linux键盘驱动程序的一部分实现的 - 只要Linux内核仍在运行&#xff0c;它将会工作。只有内核崩溃才能禁用此组合键…

利用火狐浏览器Firebug查看网页相关属性

核心提示&#xff1a;Firebug从各个不同的角度剖析Web页面内部的细节层面&#xff0c;给Web开发者带来很大的便利。 Firebug从各个不同的角度剖析Web页面内部的细节层面&#xff0c;给Web开发者带来很大的便利。 我们先看看在火狐浏览器在没安装Firebug组件前的界面。 利用火…

linux 命令 kps,Linux顶级命令.内存使用情况

我用Jmeter测试我的Web服务器.我启动40个用户测试,然后dump top命令.我所看到的是40(1个主机)apache进程.每个流程都使用appr. 7毫秒的RES内存.但7 * 40是280 MB的内存.但顶部显示总共有508mb和345mb免费.所以只用了163mb ……为什么我有这么奇怪的东西&#xff1f;top - 04:49…