mysql数据库的备份给数据库的操作带来很大的简便,很好的保证了mysql数据库中数据库的绝对安全,如果不备份数据库,数据库中数据丢失了,工作人员则是无计可施,而数据库的备份就使数据库管理员更好的管理数据库。如今,随着技术的不断发展,mysql数据库的自动远程备份也得到了实现。
一、实现本地自动备份数据库很简单:
1.以root身份登陆
2.计划任务(每天的3:30自动执行 /usr/bin/mysqlbackup)
crontab
0 3:30 * * * /usr/bin/mysqlbackup
3.写一个自动备份数据库脚本
vi /usr/bin/mysqlbackup
#!/bin/bash
mv /home/.../db_bak5.tgz /home/.../db_bak6.tgz
mv /home/.../db_bak4.tgz /home/.../db_bak5.tgz
mv /home/.../db_bak3.tgz /home/.../db_bak4.tgz
mv /home/.../db_bak2.tgz /home/.../db_bak3.tgz
mv /home/.../db_bak1.tgz /home/.../db_bak2.tgz
rm -rf /home/.../db_bak.txt
/usr/bin/mysqldump -uroot -ppassword dbname
> /home/.../db_bak.txt
cd /home/.../
tar czvf db_bak1.tgz db_bak.txt
二、这样每天的3:30就会在本地目录/home/.../下生成相应的数据库备份,开始由于/home/.../目录下缺少数据系统会提示错误,这是正常的。
三、至于远程备份可以配合使用ftp或scp命令实现,方法很简单,查一下相关命令的使用,然后再改动一下mysqlbackup脚本就可以了。
上文中就是在mysql数据库中实现数据库自动远程备份,和高兴与大家分享这个技巧,希望对大家能够有所帮助。
mysql自动本地+远程双备份
前一阵子,远程机房所放bbs的服务器老是当机,为了不影响公司的事务,此时要临时迁移到公司内部,程序内部是有的,可是没有同步的数据库,被主管给说了一通,遂发誓要搞好数据库的备份,借鉴了一些网友的思想与实现方法.终于实现好了,而且经宝宝老师的提醒,拿出了两套方案。
一种是网上很普遍的那种就是:利用MYSQLDUMP命令来保存数据库的SQL语句,这种方法的好处是兼容性好,因为SQL语句是通用的,适合各种版本的mysql数据库,但也有缺点,那就是偶尔会出现SQL语句中一些引号的匹配问题;
这就有了第二种:直接拷贝MYSQL文件夹下的data下的bbs数据库文件夹的所有文件。
下面给出实现的一些代码,供各位切磋:
第一种方法:
[php]
<?php
/***********************************************************************
@file name:mysqldump_all.php
@author:ChengXiangChuang
@description:利用mysql自带的mysqldump来备份所有的表
*************************************************************************/
//保存目录,路径要用反斜杠.您需要手动建立它.
$store_folder = 'D:\ServerRoot\mysql5\database_bak';
//该帐号须有操作[所有]的数据库及FILE的权限,否则有些数据库不能备份.
$db_username = "root"; //数据用户名
$db_password = "123456"; //数据库密码
$time=time();
//按星期命名,只保存最近一周的数据库备份
$nowdir = "$store_folder\mysql_".date("l",$time);
if(file_exists("$nowdir.rar"))
{
@unlink("$nowdir.rar");//如果同名文件已经存在,则删除之
}
else
{
@mkdir($nowdir); //如果不存在则,则创建之
}
mysql_connect("localhost","$db_username","$db_password");
$query=mysql_list_dbs();
while($result=mysql_fetch_array($query))
{
system ('D:\ServerRoot\mysql5\bin\mysqldump --opt '."$result[Database] -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\$result[Database].sql");
echo "dumping database `$result[Database]`...\n";
}
echo "\nWinrar loading...\n";
//注意WinRAR.exe存放的路径,根据需要修改
system( "D:\ServerRoot\db_bak\winrar\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" " );
echo "\nOK!\n";
?>
[/php]
上面是第一种方法备份全部数据库,如果只备份某个数据库如BBS就用下面的一段代码替换
[php] //如果要只是备份一个数据库就用
$db_name= "bbs"; //要备份的数据库名
$result=mysql_fetch_array($query);
if(is_array($result))
{
system ('D:\ServerRoot\mysql5\bin\mysqldump --opt '."{$db_name} -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\{$db_name}.sql");
echo "dumping database `{$db_name}`...\n";
}
替换
while($result=mysql_fetch_array($query))
{
system ('D:\ServerRoot\mysql5\bin\mysqldump --opt '."$result[Database] -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\$result[Database].sql");
echo "dumping database `$result[Database]`...\n";
}[/php]
第二种方法:
[php]<?php
/***********************************************************************
@file name:mysql_copy.php
@author:ChengXiangChuang
@description:先拷贝mysql文件夹data下的某个数据库
(如bbs)到另外的地方(如果直接在该文件下压缩会
出错,因为mysql并没有停止进程),然后压缩后存放到本地.
*************************************************************************/
//保存目录,路径要用反斜杠.您需要手动建立它.
$store_folder = 'D:\ServerRoot\mysql5\database_bak';
//数据库待备份的文件目录
$source_data = 'D:\ServerRoot\mysql5\data\bbs\*.*';
$time=time();
$nowdir = "$store_folder\bbs_".date("l",$time); //按星期命名
//echo "$nowdir.rar";
if(file_exists("$nowdir.rar"))
{
@unlink("$nowdir.rar");//如果同名文件已经存在,则删除之
}
else
{
@mkdir($nowdir); //如果不存在则,则创建之
}
$dest_data = $nowdir."\\";
//先将数据库文件拷贝出来
exec("copy $source_data,$dest_data");
echo "\nWinrar loading...\n";
//对拷贝出来的数据库文件进行压缩
system( "D:\ServerRoot\db_bak\winrar\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" " );
echo "\nOK!\n";
?> [/php]
对于压缩文件的东西,你只需将你安装的WINRAR文件夹下的Rarreg.key和WinRAR.exe拷贝出来建立一个新文件夹winrar,不过不要担心,你可以从我上传的源码中获得。
对于自动备份,你只需用CGI方式运行php.exe创建.bat文件然后添加到任务计划中几可以拉。
如对第一种方法建立.bat文件,在编辑器中输入如下代码(我的PHP放在D:\ServerRoot\php5_2):
D:\ServerRoot\php5_2\php.exe mysqldump_all.php
复制代码
然后保存为mysqldump_all.bat即可
对于第二种:
D:\ServerRoot\php5_2\php.exe mysql_copy.php
复制代码
然后保存为bbs_copy.bat即可