mysql自动本地+远程双备份(摘)
前一阵子,远程机房所放bbs的服务器老是当机,为了不影响公司的事务,此时要临时迁移到公司内部,程序内部是有的,可是没有同步的数据库,被主管给说了一通,遂发誓要搞好数据库的备份,借鉴了一些网友的思想与实现方法.终于实现好了,而且经宝宝老师的提醒,拿出了两套方案。PHPChina 开源社区门户xO2}"Q1K-CYG8a
一种是网上很普遍的那种就是:利用MYSQLDUMP命令来保存数据库的SQL语句,这种方法的好处是兼容性好,因为SQL语句是通用的,适合各种版本的mysql数据库,但也有缺点,那就是偶尔会出现SQL语句中一些引号的匹配问题;PHPChina 开源社区门户o8]3~.Jk_$cv
这就有了第二种:直接拷贝MYSQL文件夹下的data下的bbs数据库文件夹的所有文件。
,E-X|!R:Po0下面给出实现的一些代码,供各位切磋:
VR%\|G)MR_0第一种方法:
一种是网上很普遍的那种就是:利用MYSQLDUMP命令来保存数据库的SQL语句,这种方法的好处是兼容性好,因为SQL语句是通用的,适合各种版本的mysql数据库,但也有缺点,那就是偶尔会出现SQL语句中一些引号的匹配问题;PHPChina 开源社区门户o8]3~.Jk_$cv
这就有了第二种:直接拷贝MYSQL文件夹下的data下的bbs数据库文件夹的所有文件。
,E-X|!R:Po0下面给出实现的一些代码,供各位切磋:
VR%\|G)MR_0第一种方法:
CODE:
$~&l@*FBD9H|0<?phpPHPChina 开源社区门户[;M4lpe
/***********************************************************************
7}:g1][EHug6H0@file name:mysqldump_all.phpPHPChina 开源社区门户 ?a3U;{|
@author:ChengXiangChuangPHPChina 开源社区门户k0?Lq
sQ@
@gtalk:chengxch@gmail.comPHPChina 开源社区门户&S*e$h!W&|#X
@msn:cxc-0378@163.comPHPChina 开源社区门户H0uo}Xo@
@creat time: 2006-12-20 12:32PHPChina 开源社区门户0W+`UTg]9v [
@descrīption:利用mysql自带的mysqldump来备份所有的表
$CITF
uW6R0*************************************************************************/PHPChina 开源社区门户2|0bJ5[9r!D Qn
//保存目录,路径要用反斜杠.您需要手动建立它.PHPChina 开源社区门户ZF+jG-o&^W
$store_folder = 'D:\ServerRoot\mysql5\database_bak';PHPChina 开源社区门户+^}'p|4}h7C
PHPChina 开源社区门户V:xz_:M3fW
//该帐号须有操作[所有]的数据库及FILE的权限,否则有些数据库不能备份.
S){R-U3[0$db_username = "root"; //数据用户名
Z5XL(\h0$db_password = "123456"; //数据库密码PHPChina 开源社区门户
Z0R#J"AbP/D
$time=time();PHPChina 开源社区门户8Knfe4Jmd
//按星期命名,只保存最近一周的数据库备份
+{
x+y?A1y [xC0$nowdir = "$store_folder\mysql_".date("l",$time);PHPChina 开源社区门户g.IAE;G)k
T%b@-e/M
if(file_exists("$nowdir.rar"))
9]^+^G5Z2D(a"}0{PHPChina 开源社区门户 \mI7FbB
@unlink("$nowdir.rar");//如果同名文件已经存在,则删除之PHPChina 开源社区门户,k_ g+dG8Zo.d
}
kW+];jG,A7F*G:n-n0elsePHPChina 开源社区门户@RGF"y-q9Sf?%\
{
2q9u0\lx6h%{f8U6S1kN6G0@mkdir($nowdir); //如果不存在则,则创建之
5Xmk |pbq0}PHPChina 开源社区门户:mMl gd&VsNB
mysql_connect("localhost","$db_username","$db_password");PHPChina 开源社区门户xs
Nf} C$T)]
$query=mysql_list_dbs();PHPChina 开源社区门户;}4Sa&sK
while($result=mysql_fetch_array($query))
O@3M
Uh3fN AR0{
)xwd
v)X0system ('D:\ServerRoot\mysql5\bin\mysqldump --opt '."$result[Database] -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\$result[Database].sql");
@v%Fk6gTpw&k0echo "dumpingdatabase`$result[Database]`...\n";
&JV[O1uQ0}PHPChina 开源社区门户d&S2g@ky _*u
fpL#t+t f0echo "\nWinrar loading...\n";PHPChina 开源社区门户-z"nyi8|+W"Y
//注意WinRAR.exe存放的路径,根据需要修改PHPChina 开源社区门户t_%A7N wG"LL
system( "D:\ServerRoot\db_bak\winrar\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" " );PHPChina 开源社区门户6^9w5a*OavR1j5V'g
echo "\nOK!\n";
Y;DRo&tj m0?>上面是第一种方法备份全部数据库,如果只备份某个数据库如BBS就用下面的一段代码替换
CODE:
Ax9}j+DbF;|#J0//如果要只是备份一个数据库就用
7e r P1e;n\0$db_name= "bbs"; //要备份的数据库名PHPChina 开源社区门户s
hD.v5k
$result=mysql_fetch_array($query);
3n(WVC5PPZ0if(is_array($result))PHPChina 开源社区门户.\]&?3u$A
{PHPChina 开源社区门户 x'dB1~W#Uw!EO
system ('D:\ServerRoot\mysql5\bin\mysqldump --opt '."{$db_name} -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\{$db_name}.sql");
ferz/d0echo "dumping database `{$db_name}`...\n";PHPChina 开源社区门户7r:biEuQ6_!L"c
}
?9Nm.y*w/@&M0PHPChina 开源社区门户7a5^$R7ZK R)z }
替换
6I3?hl2lwI;]~0while($result=mysql_fetch_array($query))
bx&OK1J4~;]w0{
Z VO S8E*Lu&G0system ('D:\ServerRoot\mysql5\bin\mysqldump --opt '."$result[Database] -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\$result[Database].sql");PHPChina 开源社区门户[pgr7S(y
echo "dumping database `$result[Database]`...\n";PHPChina 开源社区门户&Y+]OGnJeikfe
}第二种方法:
CODE:
X4[A:y9[I#d[%cMui0q0<?php
@C9\
C(wZ]u T0/***********************************************************************
["{ p?%P;T2^y0@file name:mysql_copy.phpPHPChina 开源社区门户0J"PB)|#rRo[,{|
@author:ChengXiangChuang
6M!R#Cr8K"Y,@9P
V0@gtalk:chengxch@gmail.comPHPChina 开源社区门户+F"u;z+p`|6Z
@msn:cxc-0378@163.comPHPChina 开源社区门户?biMe&l
@creat time: 2006-12-20 12:32PHPChina 开源社区门户g$V1]2J!yZf
V0nNV
@descrīption:先拷贝mysql文件夹data下的某个数据库
)k1t}S/p,eD"W0(如bbs)到另外的地方(如果直接在该文件下压缩会
kh
JZVTX0q3z0出错,因为mysql并没有停止进程),然后压缩后存放到本地.PHPChina 开源社区门户:ti0Q!~I
*************************************************************************/PHPChina 开源社区门户,p5TJ%Gn.B3R
//保存目录,路径要用反斜杠.您需要手动建立它.PHPChina 开源社区门户*ss N9\3B/zh%r
^O
$store_folder = 'D:\ServerRoot\mysql5\database_bak';PHPChina 开源社区门户mIo$E,V*\.ib
D
//数据库待备份的文件目录
TnA1A#WcxYz0$source_data = 'D:\ServerRoot\mysql5\data\bbs\*.*';PHPChina 开源社区门户\'tci^HQ*\
$time=time();
$RWB:d Nv0$nowdir = "$store_folder\bbs_".date("l",$time); //按星期命名
S0Y1Itb
T0//echo "$nowdir.rar";
3OX4rB2y't0`I/D0if(file_exists("$nowdir.rar"))
3u
VDVA*Qb|d0{PHPChina 开源社区门户2s.~t9ur\kZ
@unlink("$nowdir.rar");//如果同名文件已经存在,则删除之PHPChina 开源社区门户p6I:P(~8d:H9?'aid2@7T
}
ZY%KIw6T0else
\h8cb4FT@0{
0}Q{%z7q N9O9en0@mkdir($nowdir); //如果不存在则,则创建之
,O:Ey4]5C0}PHPChina 开源社区门户 S#lGy GH)`
$dest_data = $nowdir."\\";
6a;D"KEg[Vm0//先将数据库文件拷贝出来PHPChina 开源社区门户9?)I~`Uy
exec("copy $source_data,$dest_data");PHPChina 开源社区门户0N3wQV;@Ye)U
echo "\nWinrar loading...\n";PHPChina 开源社区门户U(Nt$c.v8t:k
}
//对拷贝出来的数据库文件进行压缩
:[9]IO:KxLs0system( "D:\ServerRoot\db_bak\winrar\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" " );PHPChina 开源社区门户B`(t:|5xn,Di
echo "\nOK!\n";PHPChina 开源社区门户9K9L6[x r
?>PHPChina 开源社区门户un8Jy$M\;z
PHPChina 开源社区门户&ng%s$`Nr/_&lzW
对于压缩文件的东西,你只需将你安装的WINRAR文件夹下的Rarreg.key和WinRAR.exe拷贝出来建立一个新文件夹winrar,不过不要担心,你可以从我上传的源码中获得。PHPChina 开源社区门户lXm5?'wD)ZF4]9R
对于自动备份,你只需用CGI方式运行php.exe创建.bat文件然后添加到任务计划中几可以拉。
Q4tn](i^0如对第一种方法建立.bat文件,在编辑器中输入如下代码(我的PHP放在D:\ServerRoot\php5_2):PHPChina 开源社区门户}hM$D*Y#T4y s"x;f
PHPChina 开源社区门户&ng%s$`Nr/_&lzW
对于压缩文件的东西,你只需将你安装的WINRAR文件夹下的Rarreg.key和WinRAR.exe拷贝出来建立一个新文件夹winrar,不过不要担心,你可以从我上传的源码中获得。PHPChina 开源社区门户lXm5?'wD)ZF4]9R
对于自动备份,你只需用CGI方式运行php.exe创建.bat文件然后添加到任务计划中几可以拉。
Q4tn](i^0如对第一种方法建立.bat文件,在编辑器中输入如下代码(我的PHP放在D:\ServerRoot\php5_2):PHPChina 开源社区门户}hM$D*Y#T4y s"x;f
CODE: