您的位置:首页 > 数据库 > MySQL

有感“生产环境下的Mysql数据库备份和恢复”

2012-06-20 16:24 453 查看
干运维五六年了,一直备份mysql,都只备份数据库,看着此文章发现自己棒槌了这么长时间,当时的环境还是主从备份的,怪不得错误那么多。

看到人家备份都要锁表,记录binlog的文件日期,实际binlog是可以通过mysql命令FLUSH LOGS来产生新日志,这样备份能精确些。binlog还是定期压缩备份的好。免得又binlog自动删除设置,有了问题数据丢失就麻烦了。

以下是正文:

什么要用生产环境这个名词呢,这样更能引起我们重视,不是简单随便的拿上你知道的 命令就干活了。它有其特殊的环境,不是平时学习实验那样的只是为了达到我们的目的。在企业中运行Mysql是一个完全生产环境,我们必须要考虑很多相关因 素。最典型的特点,既然是生产环境,那么就绝对不允许你去宕机,仅仅为了你的备份活动吗(想都不要想啦)。你要清楚备份只是为了保障我们的系统更加安全的 运行,减少灾难带来的损失,相对而言只是一个小角色,设想如果服务器压根就没有发生问题的可能,那么备份也就没有存在的必要了,正因为有意外,之后我们才 会采取相应的措施。

MySQL的备份主要分为逻辑备份和物理备份。在备份之初我们需要考虑哪些因素呢?

·首先确定当前MySQL处在哪种表类型下工作,它们支持事务处理还是非事务的,因为我们需要根据不同的特点做一些设置。

·其次要选择备份形式是全备份还是增量备份,各有其优缺点。

·为了确保恢复的完整性我们开启binary log功能,同时binlog给我们恢复也带来了很大的灵活性,可以基于时间点或是位置进行恢复。考虑到数据库性能可以将binlog文件保存到其他安全的硬盘中。

·正如最初所提到的,备份操作是和应用服务同时运行,这样就十分消耗系统资源,导致数据库服务性能下降,这就要求我们选择一个合适的时间在应用负担很小的时候,再来进行备份操作。

·最后要提的就是,备份完不是就没事儿了,怎么就知道备份是否可用的,所以之后的恢复测试完全有必要。

下面就来具体实践一下。

1、逻辑备份和恢复

MySQL的逻辑备份就是将数据库的结构连同数据用一个文本文件备份出来,我们可以对这个文件进行查看和编辑。逻辑备份对于所有的存储引擎都是适用的,而 后面提到的物理备份则会根据不同数据库的特点采取不同的备份方法。MySQL逻辑备份的主要工具就是大家熟悉的MySQL自带的mysqladmin这个 工具。

#mysqldump -u root -p -all-database > all.sql 备份所有数据库

#mysqldump -u root -p mysqlsytems > mysqlsystems.sql 备份指定数据库

#mysqldump -u root -p mysqlsystems wp discuz > wp_discuz.sql 备份指定数据库中的若干表

TIPs: MyISAM中为了保持数据一致性需要在备份之前对进行备份的数据库加读锁操作flush table with read lock;InnoDB则可以在mysqladmin命令中加入–single-transaction选项,可以生成一个快照以保证数据备份期间的一致 性。

以上介绍的是都是全备份,我们都知道全备份是必要的,在应用之初我们可以采用全备份的方式,但随着应用数据的增加,这种备份方式的效率就会变得很低,每次 会花掉大量的时间和系统资源。我们有必要在全备份的同时结合增量备份。增量备份是通过备份binary log来实现的。当我们开启MySQL的二进制日志功能之后,对数据库进行的DML(select除外)、DDL操作都会纪录到其中,MySQL Replication就是通过bin-log实现的。每当MySQL重启,数据库都会重新生成一个bin-log文件。比如5月9日凌晨2点开始备份, 同时我们也将bin-log进行更新重新生成一个,那么备份完成之后,我们对数据库进行的操作就会被从新纪录到生成的这个新的二进制文件中,增量备份就是 要我们保存从5月9日开始,到你进行下一次备份,这期间的操作都在这个bin-log文件里面,我们只需将它备份起来就可以了。

恢复比较简单。

#mysql -u root -p mysqlsystems < mysqlsystem.sql —恢复全备份的信息

#mysqlbinlog binlog-file | mysql -u root -p —恢复增量备份的部

2、物理备份和恢复

物理备份分为冷备份和热备份。物理备份其实就是物理文件的复制,从一个存放位置拷贝到另一个位置。

冷备份一般很少使用,这个我们都知道原因,应用是坚决不允许停机的,即便时间很短,况且备份的时间和文件大小是成正比的,只会越来越多,不会减少的。

这里主要介绍热备份,根据存储引擎不同将采用不同的备份工具。

·MyISAM

Option A : # mysqlhotcopy mysqlsystems /backup/db_mysqlsystems

Option B : 在SQL命令行下执行flush tables for read,将数据库中所有表加读锁,以便保证数据的一致性;然后自通过cp命令将数据文件备份到指定目录下;MyISAM是Mysql的缺省表类型。它基于IASM代码,但有许多有用的扩展。

·InnoDB

对于InnoDB可以使用percona公司的xtrabackup,或是Innobase自己的ibbackup (收费的)

※值得注意的是:

一、确定要备份的表的存储引擎是事务型还是非事务性,两种不同的存储引擎备份方式在处理数据一致性方面是不太一样的。

二、确定使用全备份还是增量备份。全备份的优点是备份保持最新备份,恢复的时候可以花费更少的时间;缺点是如果数据量大,将会花费很多的时间,并对系统造 成较长时间的压力。增量备份则恰恰相反,只需要备份每天的增量日志,备份时间少,对负载压力也小;缺点就是恢复的时候需要全备份加上次备份到故障前的所有 日志,恢复时间会长些。

三、可以考虑采取复制的方法来做异地备份,但是记住,复制不能代替备份,它对数据库的误操作也无能为力。

四、要定期做备份,备份的周期要充分考虑系统可以承受的恢复时间。备份要在系统负载较小的时候进行。

五、确保MySQL打开log-bin选项,有了BINLOG,MySQL才可以在必要的时候做完整恢复,或基于时间点的恢复,或基于位置的恢复。

六、要经常做备份恢复测试,确保备份是有效的,并且是可以恢复的

七、这里提一下Mysql服务器硬件方面的选择,物理磁盘我推荐RAID0+1(磁盘性能是制约Mysql性能的最大因素之一),内存最好在4G以上;同时,Mysql服务器不要在运行其它服务,CPU我推荐使用S.M.P架构的多路对称CPU。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息