站长告诉你如何进行关键数据备份


作为一名站长,或者作为一名网站维护人员,最重要的工作内容之一就是保证数据的安全,稳定的运行.

数据维护有很多种,今天我们只从最底层数据聊起,mysq备份.说到mysql数据库,这里也顺便提下,mysql的最新版本是6.系列增加一些功能,下载地址:http://dev.mysql.com/downloads/ 

mysql 6 由于还未得到广泛的使用,今天并不特意去推荐和介绍mysql6版本,我们推荐用的几个版本为 。

php 5.2.11+ mysql5.0.8x                      

php5.3.x+5.1.x

php5.1.4 也经常使用.  都是大型或者超大型网站在使用,而且稳定使用的搭配,

包括目前在维护的网站,大大小小站点用的很多.可以说,是较为稳定的搭配.推荐大家使用..

当然,mysql6 也有很多新特性, 如支持更多的Unicode字符集,增加了 BACKUP DATABASE 和 RESTORE 语句来进行备份和还原操作.等,相信以后会应用到.

好,下面开始说Mysql备份. 

我们分三个点来说吧.

一是常规定期备份的重要性 ,
二是备份的时间选择,
三是备份的手段和方法,分为windows 和linux服务器

一是常规定期备份的重要性

不可抗力因素,如火灾,地震,洪水,等造成数据丢失,当然包括硬盘报废都属于可能发生的情况,乃至软件破坏导致数据损坏的情况下,定期备份数据就显得异常重要.
如我某某服务器放在XX机房,突发现该机房有一些服务器存有非法信息,机房背负,如果我们要备份,那我就求神拜佛也没辙了.如果定期备份,只不过耗点人力财力,换个地方换个机器就OK。

特别是目前的网络环境, 定期备份的重要性,我相信大家深有体会.

二是备份的时间选择.

备份时间选择,因为备份过程会有一定的时间和资源要求,所以一般推荐选择在夜里3到6点之间?为什么要选择这个时间备份, 因为这个时间段访问人数最少,服务器资源最丰富,备份也将能保证更顺利的完成.

难道每天都那么迟备份,那不是累死人? 当然不可能要求,人肉去天天备份了. 所以有自动备份之做法,比如设置每天备份一次在凌晨3点30分执行。(方法后面会讲到),那么站长需要做的,就是定期的把服务器的备份数据下载下来即可

三是备份的手段和方法。

分为windows 和linux服务器 .

说到备份的方法和手段,在Google那是相当的多,这里也按常规和常用的方法给大家做下介绍,包括实施方法

最常用的有以下几种:

PW后台自带备份法, mysqldump备份, 数据库文件备份法.   Phpmyadmin备份法,( mysqlhotcopy  只能在类unix下运行的)

这里补充说下,pw自带的后台备份,和pma备份是一样的。PW自带的增加了分卷功能,方便导入. 下面我们就抽出前几种备份方法来做下详细介绍。

PW后台自带的备份

此功能是从pma演变出来的.,可以用一个字形容,easy! ,方便,快捷.容易操作.可以单独选择表备份,可以一键备份所有论坛数据表,对于站长来说等于无门槛的操作,一键选择,一键备份,程序自动备份打包分卷,直到完成.推荐大家使用!

还有一点,pw后台自带备份,几乎避免转移数据出现乱码. 跨数据库版本的兼容问题.数据非常大的情况,建议采用其他备份方法.

mysqldump备份法, 

此种备份是不需要停止mysql,就可以直接备份的 对技术有些要求,当然了,通过今天讲解,希望大家都理解此种方法. 我们分为 windows和linux下的mysql备份来演示.

此种方法,就是用用于数据较大的备份. 用此种方法备份,需要先了解下几个参数. --default-character-set=charset

指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。

--disable-keys

告诉 mysqldump 在 INSERT 语句的开头和结尾增加 ; 和 ; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表

--lock-all-tables,-x

在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。

--hex-blob

使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有BINARY、VARBINARY、BLOB 。

--triggers

同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。

如,我本地备份.

usr/local/mysql/bin/mysqldump -uroot -proot \
--default-character-set=gbk --opt --extended-insert=false \
--triggers –R --hex-blob -x wind7> phpwind75-0119.sql

上面命令,可以在mysql> 输入.备份数据库 wind7  成 phpwind75-0119.sql 文件.

最常见的就是工具备份方法,如phpmyadmin ,简称 PMA ,

这个工具有个弊端,就是备份数据很大的时候,导出容易假死,导入很难成功.不具备分卷功能. 个人不推荐用此工具备份, 不过可以用来查看一些表内容, 或者单独备份某些字段的时候用.

pma更多用来做数据库的管理. 这里我们就不多介绍了.下面我说一个适合所有有独立服务器的站长用的方法

直接拷贝数据库文件法. 个人极力推荐

这种方法最快速,必须先停止或者保证没有触发修改数据的操作. 如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义.这点一定要记住!

直接拷贝数据库备份法比mysqldump备份快,但要求较高,必须是3.23以后的mysql而且文件必须MyISAM格式表示,而不是ISAM格式。这段不大担心,目前流行的基本都满足!

mysqldump生成能够移植到其它机器的文本文件,甚至那些有不同硬件结构的机器上,但备份速度较慢。这也是两种备份方法的不同优势.说到这里,不得不说,对备份的文件名做下要求,强烈建议使用一种统一的和易理解的备份文件命名机制。象backup1、buckup2等不是特别有意义。

当实施你的恢复数据时,你将浪费时间找出文件里是什么东西。你可能发觉用数据库名和日期构成备份文件名会很有用,包括前面mysqldump的备份命名也如此。如:Wind7-2010-01-19  (数据库-备份时间)

说了这么多,我们来两个脚本可以让大家实战演习下.

说明: 本次的脚本和程序都会在官方发布.请大家放心.

Windows
@echo off
D:
CD  backup
rename mysqlbk.sql "%DATE%".sql
"D:\soft\mysql\bin\mysqldump" -uroot --password=root --all-database > d:/backup/mysqlbk.sql  

把以上代码存为backup.bat 并加入计划任务,设置3点执行. [win服务器如何添加计划任务,自己谷歌去吧,哈哈这里不说了]

Linux 

本列假设数据安装在/usr/local/mysql目录下备份/usr/local/mysql/var下的phpwind数据。在/root下建立mysqlpw.sh脚本,脚本如下:

#!/bin/sh
cd /home/phpwind
phpwindfile=phpwind-$(date +%Y%m%d).tar.gz
/usr/local/mysql/share/mysql/mysql.server stop
tar zcvf $phpwindfile /usr/local/mysql/var/phpwind
/usr/local/mysql/share/mysql/mysql.server start 

可将此脚本放置在crontab里面自动每天莫个时间点执行如:00 04 * * * /root/mysqlpw.sh)

以上两个脚本,都是用自动备份的来完成的.windows 可以加载在计划任务来执行, 比如定在凌晨3点半..开始。linux 也一样,方在crontab 自带设定在凌晨执行备份.

说下脚本的含义吧,这样大家能了解脚本执行的原理.

Windows(linux脚本里看注解), 备份文件是放在 d:\backup 下的.

ren   mysqlbk.sql "%DATE%".sql

改名 ,每天自动运行会改成 不同的文件名存放.

"D:\soft\mysql\bin\mysqldump" -uroot --password=root, --all-database > d:/backup/mysqlbk.sql 

这里是全备份, 也可以选择单个数据库 如 wind7 ,好,说完了自动备份,我来说下人工智能备份,哈哈.
 

相关内容

    暂无相关文章