备份数据库
一.使用cmd命令行执行数据备份:
备份命令代码格式:
mysqldump -h数据库服务器IP -P数据库使用端口号 -u账户 -p密码 数据库名>保存路径
mysqldump -h127.0.0.1 -p3306 -uroot -proot zbsqx>D:\MysqlBackup\20190807.sql
在命令行中输入以上代码:
例子:
以上例子是使用root用户备份数据库zbsqx,数据库端口为3306,数据库位于本机(IP:127.0.0.1)
执行后D盘的MysqlBackup路径下就有了一个名字为20190807.sql的备份文件
如果提示:不是内部或外部命令时,
主要是mysqldump命令不是在mysql的bin目录下执行,
这里由于我配置了msyql的环境变量,可以在命令窗口的默认目录下执行mysqldump命令。
在环境变量的path栏里面添加mysql下面的bin文件夹路径即可,
例如我是:C:\Program Files\MYSQL\MySQL Server 5.7\bin\
二.使用Java代码实现数据库备份:
在做项目时,数据库会不断的修改!所以要对数据进行不断备份!如果被修改的数据库出现问题还可以使用以前备份的数据进行临时使用!但使用mysql的select命令来导出数据表,不实用,因为一次只能导出单一表格,而且有数据库权限问题。
所以选择使用mysqldump命令的方法,用java的运行时类Java.lang.Runtime来使用后台窗口才是最佳选择。使用java代码实现数据备份功能实际上也是通过java向命令行写入命令执行,所以建议先在cmd中模拟备份,测试成功后在使用java代码进行备份
例子:
public class MysqlDataBackup {
//通过主方法对backupdata方法进行调用
public static void main(String[] args) throws Exception{
try {
if (backupdata("127.0.0.1", "root", "root", "D:/MysqlBackup", "2019-08-06.sql", "test")) {
System.out.println("数据备份成功!");
} else {
System.out.println("数据备份失败!");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* Java代码实现MySQL数据库导出
* @param hostIP MySQL数据库所在服务器地址IP
* @param userName数据库用户名
* @param password 数据库密码
* @param savePath 数据库导出文件保存路径
* @param fileName 数据库导出文件文件名
* @param databaseName 要导出的数据库名
* @return 返回true表示导出成功,否则返回false。
*/
public static boolean backupdata(String hostIP, String userName, String password,
String savePath,String fileName, String databaseName) throws Exception {
File saveFile = new File(savePath);//获取文件路径名
if (!saveFile.exists()) {saveFile.mkdirs();}//判断文件是否存在!如果目录不存在创建文件夹
//savePath.endsWith(字符)测试此字符串是否以指定的后缀结束
if(!savePath.endsWith(File.separator)){savePath = savePath + File.separator;}
//创建处理流获取.sql文件保存的位置
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
//拼接一段命令使用Runtime使用后台
Process process = Runtime.getRuntime().exec(" mysqldump -h" + hostIP + " -u" + userName + " -p" +
password + " --set-charset=UTF8 " + databaseName);
//获取拼接的字符串转换成流形式
InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
//创建缓冲流并往缓存流读入.sql文件
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
//再使用处理流进行打印输出
while((line = bufferedReader.readLine())!= null){
printWriter.println(line);
}
//刷新处理流
printWriter.flush();
//如果拼接可正常执行时就返回一个成功状态! 0 表示线程正常终止。
if(process.waitFor() == 0){
return true;
}
//关闭流
bufferedReader.close();
printWriter.close();
return false;
}
执行结果: