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即可