MySQL简易备份方法

来源:互联网 发布:360去广告软件 编辑:程序博客网 时间:2024/04/28 10:31
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
.Axs143{display:none;}

适用对象:MySQLDB管理员.
适用条件:对Linux环境有基础的管理及操作能力.
文章附注:本篇文章为自由文件,欢迎非商业性质转载,并请注明出处!
商业性质转载请来信告知!
特别注意:1.本篇文章提供之程式及设定*不一定*符合您的环境,
请依您的系统环境适当地修改程式及设定.
2.在执行任何具破坏性的动作及行为前,
请确认您已作好完整可用的资料备份工作.

 目录内容
一.前言
二.错误修正
三.开始备份
四.如何回存
五.MySQL线上备份
六.MySQL线上回存
七.开始排定备份
八.结语
九.参考资料
十.附录-备份Script原始档

(DB:Database的简称,以下都以DB取代Database,
phpBB:酷!学园讨论区系统的软体名称)

花了一些时间熟悉主机的环境後,我开始寻找错误在那里...检测MySQL内phpBB的DB後发现,有个users的table是有问题的,
使用myisamchk尝试去修护,发现还不行用预设方式修护,还要多加个"-o"的参数才行,在使用myisamchk时,为避免还有用户来存取DB,最好是能够将MySQL服务停止,不然最少也要下个"MySQLadminflush-tables"後,再作myisamchk指令,像:


三.开始备份

phpBB讨论区的资料档,主要有两个部份,就是php主程式和DB内容,
php主程式的备份就比较简单,只要把全部档案tar起来就行了,就像:

tarcvfzphpbb2_20020601.tgzphpbb

(上面的phpbb是指phpBB的php网页程式存放目录.)

以後有改到phpBB网页程式部份再重新备份一次就行,它的内容资料都写在DB内,所以php程式档部份异动性应该不大.

再来就是MySQLDB部份了,预设MySQL的DB档案是存在/var/lib/MySQL内,以DB名称为目录,目录内就是该DB的所有资料,像phpbb2这个DB,就是存在/var/lib/MySQL/phpbb2内,在备份前,因为怕资料尚未完全写入磁碟,而且MySQL会Lock在使用的DB档案,所以应该是要先把MySQL先Shutdown一下,整个备份的程序可以下像下面的指令去完成:

/etc/rc.d/init.d/MySQLdstop
tarcvfzphpbb2_db_20020601.tgzphpbb2
/etc/rc.d/init.d/MySQLdstart

(上面的phpbb2是指存放phpbb2这个DB的目录.)Ok!这样就完成了!(什麽?就这样!3行就结束了?!)

对!这样就可以了!不过要注意的是,怕DB内每个Tables间的资料有关关联性,所以最好是把整个DB一次备起来,单独只备哪个Tables的档案,以後回存时,怕会有资料关联不一致的问题!以酷!学园的口水讨论区为例,有21000笔左右的文章加上1200名注册会员,资料库
整个tar起来大约30几MB左右,每天备份,以一周为周期来计算,备份大约只需要
(35*7=245)200多MB左右的空间,一星期的备份烧在一张光碟还够!

本新闻共3页,当前在第1页 1 2 3 

 


四.如何回存

phpBB讨论区的回存,只需把档案解回原来存放网页的路径就可以,用以下指令解开:

tarxvfzphpbb2_20020601.tgz

DB发生错误而要回存时,其实也不难,先找出最近一次完整正常的备份,先把现在错误的网页或DB先更名或tar起来,再把好的备份给解开回原来目录位置就行了,需要注意的是,MySQL服务最好也是要先停止,回存完成後再启动服务,回存DB的整个程序
可能像下面:

/etc/rc.d/init.d/MySQLd.stop
mvphpbb2phpbb2_error
tarxvfzphpbb2_db_20020601.tgz
/etc/rc.d/init.d/MySQLd.start

然後再去测试一下网页及资料库!看使用上是否正常就行了...


五.MySQL线上备份

使用像上面的"档案"方式备份是个不错的方法,它最少可以保持该主机某个时间点的完整档案备份,但还是有一些问题需要考虑到,有些主机就不只建立一个DB而已,总不能为了备份某个DB而把整个MySQL服务停止,备份档案的方式,回存在原主机上一定适用,但假如MySQL版本升级,或是在那天,该网页空间需迁机移机到别的主机时,那就没人敢保证备出来的资料档可以用,所以我们可以考虑另一种备份的方式,是使用MySQL本身提供的功能:"MySQLDataDump",指令是"MySQLdump".

使用MySQL的Dump功能可以把DB的"结构","资料"或"结构加资料"Dump成文字档,MySQLdump指令提供的弹性很大,你可以选择把整个DBDump成一个档,或是每个Table为一个档,甚至是把结构档和资料分开储存都可以.检测酷!学园的phpBB资料库後发现,以结构加资料FullDump成一个档案,档案的大小大约也是30几MB左右.在Dump之前最好多下个Flush-Logs更新LOG,所以整个Dump的指令如下:

MySQLadmin-uroot-pflush-logs
MySQLdumpphpbb2-uroot-popt>phpbb2_20020601.sql

(phpbb2是DB名称,opt是一个使用完整Dump参数)

再使用time指令去测试执行时间,这个30几MB的DB,Dump出来竟只要15秒左右,Query的速度还真是快,假如只是要单独Dump某个Table时,只要在上面的指令後,转出符号">"前加个Table名称就可以,如只要phpbb2_users这个Table的Dump时,只要下:

MySQLdumpphpbb2-uroot-poptphpbb2_users>phpbb2_users_20020601.sql

Dump出来的档案是个纯文字档,你可以用tar把它压起来,以上面30几MB的DB为例,大约可以把档案大小压到1/3左右的大小,因为Dump出是文字档,所有的资料都是以明文显示,所以必须注意一下备份档保存的安全性,而且建议备份档最好再另外储存於异地以及其他易於保存的媒体上,像光碟片或磁带,这样的备份才有意义.


六.MySQL线上回存

若要回存整个资料库,只需将压缩的备份档还原成Dump的档案,再用下面的指令回存:

MySQLphpbb2-uroot-p<phpbb2_20020601.sql

这边需注意的是,若建立备份时是以"opt"或"add-drop-table"为参数时,回存的动作是先将旧的Table先删除,重建Table的结构後再把Data汇入,所以回存後,所有的资料会回到你当时备份那个时间点,因此在回存资料时,可以考虑把现有错误或不完整的DB先备份一份下来,以备不时之需,或是拿来比对错误的地方在那里,当然你也可以把资料回存到另一个测试用的DB内,只要把上面指令的DB名称改成你的测试用DB名称即可.

使用这种回存方式,MySQL服务不需停止,也不会动到其他正在使用的DB,在一些提供MySQL服务的虚拟主机,可用这种方式作你自己的DB备份及回存.

另外,假如你是系统重建或是移机时,切需在新的MySQL内,新建一个空白DB後,才行作回存的工作,你可以用下面的指令建立:

MySQL-uroot-p-e"CREATEDATABASEphpbb2"

(上面的phpbb2是你要新建的DB名称)

另一种作法,先用"MySQL"指令进入"MySQLclientconsole",然後再用:

CREATEDATABASEphpbb2;

这样就行了,记得尾端要加个";"符号该行指令才会执行.


 共2页:上一页1

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击