`

MySql数据定时备份

    博客分类:
  • DB
阅读更多
可用的脚本(一直正在用的····) 写道
@echo 取日期、时间变量值
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
if /i %time:~0,2% lss 10 set hh=0%time:~1,1%
if /i %time:~0,2% geq 10 set hh=%time:~0,2%
set mn=%time:~3,2%
set ss=%time:~6,2%
set date=%yy%%mm%%dd%
set time=%hh%%mn%%ss%
set filename=%date%_%time%
mysqldump -uroot -proot --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x baba>D:\baba%filename%.sql
@echo 导出已经完成
@pause
 

由于系统使用到了MySQL 数 据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不准确,有时候还会忘 记做备份,哪一天忙起来忘记了,数据库出了问题,就不好搞了.所以,将MySQL数据库的备份,做成系统定时执行的,就很有必要.
一般情况下,我们手工备份MySQL数据库,会使用下面的命令:
复制内容到剪贴板
代码:
mysqldump --opt --add-locks -u root --password=xxxx db_name> x:/db_backup/db_name.sql
这是我们在命令行模式下备份数据库的常用命令.但现在要让系统自动执行,就不能这样了.
1.在windows下定时备份MySQL数据库.
使用editplus建立 db_bak.bat文件,也就是windows下常用的批处理文件.
内容为:
复制内容到剪贴板
代码:
@echo
mysqldump --opt --add-locks -u root --password=xxxx db_name> x:/db_backup/db_name.sql
然后保存,接下来在window 的定时任务中,定义windows的定时任务,每天备份多少次都可以.
2.在linux下定时备份MySQL数据库.
命令跟上面的类似,不过这里要使用linux下的定时任务了.
说到这里,可能大伙都感觉数据库的备份工作已经完成了,其实不然,我们备份数据库,不单要应对数据库坏掉或被误删除的问题,同时,还需要应对服务器损坏,硬盘损坏或是服务器遭遇未可预知的灾难的问题.
所 以,我们就不能把数据库仅仅备份到本机,我们同时,需要将备份好的数据库,同步传输到其它至少一台服务器上,这样,才可以保证我们数据的绝对安全,在进行 数据传输之前,为了减少数据的传输量,提高传输速度,需要对数据库备份文件进行压缩.在linux下,可以使用系统自带的命令进行压缩,但在 windows下,我不太喜欢使用window自带的命令进行压缩.在这里,我借助ant对MySQL数据库备份文件进行压缩,ant的 build.xml 文件定义如下(文件命名为:db_target.xml)
复制内容到剪贴板
代码:
<?xml version="1.0" encoding="UTF-8"?>
<project name="xxxx" basedir=".">
<property name="db-bak-dir" value="x:/db_backup"/>
<target name="db-bak">
  <exec dir="${basedir}" executable="cmd.exe">
   <arg line="/c db-bak.bat" />
  </exec>
</target>
<target name="bak" depends="db-bak">
     <tstamp prefix="source.">
   <format property="TimeSign" pattern="yyyy-MM-dd HH.mm.ss" />
    </tstamp>
    <mkdir dir="${db-bak-dir}/${source.TimeSign}"/>
    <zip destfile="${db-bak-dir}/${source.TimeSign}/db-bak.zip">
      <zipfileset dir="${db-bak-dir}" includes="*.sql"/>
       </zip>
       <antcall target="clean"/>
</target>
<target name="clean">
    <delete file="${db-bak-dir}/db_name.sql"/>
</target>
</project>
上面的ant配置文件的意思,就是说,让ant调用windows的MySQL数据库备份.bat文件并执行.
对数据库进行备份,然后,以当前日期,作为压缩文件名,对MySQL数据库备份文件进行压缩.
那既然我们是让 ant来调用了MySQL 数据库备份命令文件,就没有理由再让windows 定时任务调用 MySQL数据库备份命令文件了,所以,我们对window的定时任务做一修改,让window定时执行ant脚本,再写一个.bat文件.
内容如下:
复制内容到剪贴板
代码:
@echo
ant -f x:/db-target.xml bak
文件命名为:db-target.bat.
以上三个文件在同一文件夹下.接下来就是将文件传输到其它服务器了,由于个人喜欢ant ,所以,在这里,还是使用ant 脚本来实现文件的远程传输,在这里,需要使用linux ssh命令,所以,需要一个额外的.jar包,传输不在本文讨论之列,下次再行讨论,
linux 下的文件传输,会很方便,给出一个小的示例.
1.压缩备份文件:
复制内容到剪贴板
代码:
tar -zcvf /db_bak/db_name.tar.gz /db_bak/db_name.sql
2.文件传输:
复制内容到剪贴板
代码:
scp /db_bak/db_name.tar.gz ip:port /dir/xxx

 

-----------------------------------------------------

Java调用MySQL命令备份与恢复数据库

 

package util.dbak;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;


public class DatabaseBackup {

/** MySQL安装目录的Bin目录的绝对路径 */
private String mysqlBinPath;

/** 访问MySQL数据库的用户名 */
private String username;

/** 访问MySQL数据库的密码 */
private String password;

public String getMysqlBinPath() {
   return mysqlBinPath;
}

public void setMysqlBinPath(String mysqlBinPath) {
   this.mysqlBinPath = mysqlBinPath;
}

public String getUsername() {
   return username;
}

public void setUsername(String username) {
   this.username = username;
}

public String getPassword() {
   return password;
}

public void setPassword(String password) {
   this.password = password;
}

public DatabaseBackup() {
   super();
}

public DatabaseBackup(String mysqlBinPath, String username, String password) {
   super();
   if (!mysqlBinPath.endsWith(File.separator)) {
    mysqlBinPath = mysqlBinPath + File.separator;
   }
   this.mysqlBinPath = mysqlBinPath;
   this.username = username;
   this.password = password;
}

/**
* 备份数据库
*
* @param output 输出流
* @param dbname 要备份的数据库名
*/
public void backup(OutputStream output, String dbname) {
   String command = "cmd /c " + mysqlBinPath + "mysqldump -u" + username + " -p" + password + " --set-charset=utf8 "
     + dbname;
   System.out.println(command);
   PrintWriter p = null;
   BufferedReader reader = null;
   try {
    p = new PrintWriter(new OutputStreamWriter(output, "utf8"));
    Process process = Runtime.getRuntime().exec(command);
    InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
    reader = new BufferedReader(inputStreamReader);
    String line = null;
    while ((line = reader.readLine()) != null) {
     p.println(line);
    }
    p.flush();
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    try {
     if (reader != null) {
      reader.close();
     }
     if (p != null) {
      p.close();
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
}

/**
* 备份数据库,如果指定路径的文件不存在会自动生成
*
* @param dest 备份文件的路径
* @param dbname 要备份的数据库
*/
public void backup(String dest, String dbname) {
   try {
    OutputStream out = new FileOutputStream(dest);
    backup(out, dbname);
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
}

/**
* 恢复数据库
*
* @param input 输入流
* @param dbname 数据库名
*/
public void restore(InputStream input, String dbname) {
   String command = "cmd /c " + mysqlBinPath + "mysql -u" + username + " -p" + password + " " + dbname;
   try {
    Process process = Runtime.getRuntime().exec(command);
    OutputStream out = process.getOutputStream();
    String line = null;
    String outStr = null;
    StringBuffer sb = new StringBuffer("");
    BufferedReader br = new BufferedReader(new InputStreamReader(input, "utf8"));
    while ((line = br.readLine()) != null) {
     sb.append(line + "\r\n");
    }
    outStr = sb.toString();

    OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
    writer.write(outStr);
    writer.flush();
    out.close();
    br.close();
    writer.close();
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }

}

/**
* 恢复数据库
*
* @param dest 备份文件的路径
* @param dbname 数据库名
*/
public void restore(String dest, String dbname) {
   try {
    InputStream input = new FileInputStream(dest);
    restore(input, dbname);
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
}

public static void main(String[] args) {
   DatabaseBackup bak = new DatabaseBackup("C:/MySQL/UTF8/bin", "root", "root");
   bak.restore("c:/t.sql", "ttk");
}
}

分享到:
评论

相关推荐

    mysql数据库自动定时备份

    MySQL数据库的自动定时备份是数据库管理中的重要环节,它确保了数据的安全性和可恢复性,尤其是在发生意外情况如系统故障、硬件损坏或人为错误时。本教程将详细讲解如何设置MySQL数据库的自动定时备份,包括步骤、所...

    Mysql数据库定时备份

    Mysql数据库定时备份是数据库管理中非常重要的一步操作,目的是为了防止数据丢失和保护数据的安全。通过定时备份,可以在数据库发生故障或数据丢失时快速恢复数据,减少损失。 在本文中,我们将介绍三种不同的Mysql...

    mysql数据库定时备份脚本+定时删除

    mysql数据库定时备份脚本+定时自动删除,默认为删除七天以前的备份,可自行修改(节省空间) 注意看脚本内的注释说明!!!!!!!!!!!!! 定时备份,需要写周期性计划任务: #周期性计划任务(每天完备一次...

    mysql数据库定时备份手册

    ### MySQL数据库定时备份知识点 #### 一、MySQL数据库备份的重要性 在现代企业的信息化管理中,数据的安全性至关重要。定期对MySQL数据库进行备份是一项基础而重要的维护工作,它可以帮助企业防止因硬件故障、软件...

    mysql 定时备份 工具 (windows环境)

    在Windows环境下,为MySQL设置定时备份是一项必要任务,可以帮助防止意外数据丢失,并便于进行系统维护和更新。下面将详细介绍如何在Windows上使用工具进行MySQL定时备份。 首先,我们需要一个合适的工具来执行这个...

    mysql数据库定时备份,按时间存放sql文件

    以上就是关于"mysql数据库定时备份,按时间存放sql文件"的详细说明,包括如何创建SQL备份文件,设置批处理脚本,以及使用Windows计划任务自动化备份过程,以及恢复数据的方法。这种备份策略能有效地保护数据安全,...

    定时备份mysql数据库

    定时备份MySQL数据库是一项必不可少的任务,确保在出现意外情况如硬件故障、软件错误或人为操作失误时,能够快速恢复到正常状态。本篇文章将详细介绍如何配置定时备份MySQL数据库,包括每日、每周和每月的备份策略。...

    mysql定时备份脚本

    windows server 2008 R2上定时备份mysql数据库bat脚本,可支持备份多个数据库

    linux mysql定时备份脚本

    本文将详细介绍如何利用shell脚本来创建MySQL的定时备份,并结合提供的"mysqlbackup.sh"脚本和"添加定时任务.txt"文件,帮助你实现这一功能。 首先,我们来看"mysqlbackup.sh"这个shell脚本。这个脚本通常包含以下...

    mysql数据库定时备份工具

    总的来说,"mysql数据库定时备份工具"为初学者提供了一个简单易用的数据库备份解决方案,通过学习和实践,不仅可以保护珍贵的数据,也能加深对数据库管理和Linux系统知识的理解。同时,随着技能的提升,还可以进一步...

    Mysql每天定时备份数据库数据和结构

    这是用windows自带的定时任务执行的。Mysql bat脚本文件。下载下来即可用 。 具体配置 请访问 https://blog.csdn.net/Z__Sheng/article/details/85230383

    Windows server服务器下MySql自动定时备份脚本-可以删除历史备份.zip

    本文将详细解析如何使用提供的“Windows server服务器下MySql自动定时备份脚本-可以删除历史备份.zip”来实现这一目标。 该压缩包包含两个文件:`MySqlAutoBackup-1.4.bat`和`说明.txt`。`MySqlAutoBackup-1.4.bat`...

    mysql定时备份(linux脚本).zip

    本文将详细介绍如何使用Linux shell脚本来实现MySQL的定时备份。 首先,我们需要理解Linux shell脚本的基本结构和语法。shell脚本是一种文本文件,包含了执行命令的序列,可以用来自动化日常任务。在我们的场景中,...

    Mysql数据库定时备份(linux版)v1.0.docx

    MySQL数据库在Linux环境下的定时备份是确保数据安全和业务连续性的重要环节。下面将详细介绍如何通过自定义的Shell脚本和Linux的定时任务(Cron)来实现这一目标。 首先,确保你的Linux服务器上已经安装了MySQL服务...

    mysql自动定时备份数据库的方法

    MySQL 自动定时备份数据库的方法 MySQL 是一个流行的开源关系数据库管理系统,随着数据量的增加,数据库的备份变得越来越重要。备份数据库可以保护数据的安全和完整性,避免数据丢失或损坏。MySQL 自动定时备份...

    [数据库] Navicat for MySQL定时备份数据库及数据恢复1

    本文将详细介绍如何使用Navicat for MySQL进行数据库的定时备份以及数据恢复,这对于保护数据库免受意外损坏或数据丢失至关重要。Navicat是一款强大的数据库管理工具,支持多种数据库系统,包括MySQL。 ### 一、...

    linux下mysql定时备份

    ### Linux下MySQL定时备份知识点详解 #### 一、概述 在Linux环境中,为了确保数据的安全性和可用性,定期对MySQL数据库进行备份是非常重要的。本文将详细介绍如何在Linux系统下设置MySQL数据库的定时备份,包括...

    Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份).zip

    在Windows环境下,MySQL数据库的管理和维护是至关重要的工作,其中包括定期备份以防止数据丢失。"Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份)"的资源提供了一个解决方案,它是一个批处理脚本...

Global site tag (gtag.js) - Google Analytics