长沙百度推广公司关键词推广优化外包
文章目录
- 前言
- 存储数据库
- 存储数据表
前言
数据库备份是开发工作中经常要做的事情,好处是mysql提供了一个非常好的命令 mysqldump,直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便,遇到定时备份或者指定备份那么就需要代码调用。下面是一个使用java代码调用该命令的小示例:
mysqldump -u username -p password -h host -P port exportDatabaseName exportPath
在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令。
存储数据库
public class DataSyncTransfer {/** MySQL安装目录的Bin目录的绝对路径 */private static String mysqlBinPath = "/usr/local/mysql/bin/";private static String mysqldump = mysqlBinPath + "mysqldump";/*** 备份 MySQL 数据库* * @param clientIp 访问MySQL数据库的主机* @param port 访问MySQL数据库的端口* @param userName 访问MySQL数据库的用户名* @param password 访问MySQL数据库的密码* @param database 需要备份的数据库,多个数据库之间使用逗号分隔* @param backupFile 备份文件存放的路径,如果指定路径的文件不存在会自动生成*/public static boolean backupDatabase(String clientIp, int port, String userName, String password, String database,String backupPath) throws Exception {// 当前日期String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());// 当前时间String currentTime = new SimpleDateFormat("HH-mm-ss").format(Calendar.getInstance().getTime());// 备份文件名String backupFileName = database + "-" + currentDate + "-" + currentTime + ".sql";// 备份文件路径String backupFilePath = backupPath + backupFileName;// 创建备份文件存放目录,如果已经存在则不创建new File(backupPath).mkdirs();// 新建命令列表List<String> commandList = new ArrayList<>();// 添加命令:备份 MySQL 数据库commandList.add(mysqldump);// 添加命令参数:MySQL 服务器地址if (StringUtils.isNoneBlank(clientIp)) {commandList.add("--host=" + clientIp);}// 添加命令参数:MySQL 用户名commandList.add("--user=" + userName);// 添加命令参数:备份文件路径commandList.add("--result-file=" + backupFilePath);// 添加命令参数:指定要备份的数据库commandList.add("--databases");// 添加要备份的数据库名称commandList.add(database);// 创建进程构建器ProcessBuilder pb = new ProcessBuilder(commandList);// 设置 MySQL 密码pb.environment().put("MYSQL_PWD", password);// 启动进程Process process = pb.start();readStringFromInputStream(process.getInputStream(), backupFilePath);// 等待进程结束int processComplete = process.waitFor();if (processComplete == 0) { // 如果进程成功结束return true;} else { // 如果进程没有成功结束return false;}}/*** 存储文件*/private static void readStringFromInputStream(InputStream stream, String backupFilePath) throws IOException {byte[] buff = new byte[128];int n;FileOutputStream fileOutputStream = null;StringBuilder sb = new StringBuilder();try {while ((n = stream.read(buff)) != -1) {sb.append(new String(buff, 0, n));}fileOutputStream = new FileOutputStream(new File(backupFilePath));fileOutputStream.write(sb.toString().getBytes());} finally {fileOutputStream.close();stream.close();}}
}
存储数据表
public class DataSyncTransfer {/** MySQL安装目录的Bin目录的绝对路径 */private static String mysqlBinPath = "/usr/local/mysql/bin/";private static String mysqldump = mysqlBinPath + "mysqldump";/*** 备份数据表* * @param clientIp 访问MySQL数据库的主机* @param port 访问MySQL数据库的端口* @param userName 访问MySQL数据库的用户名* @param password 访问MySQL数据库的密码* @param database 需要备份的数据库* @param tableName 需要备份的数据库,多个表之间使用空格分隔* @param backupFile 备份生成的文件路径,如果指定路径的文件不存在会自动生成*/public static boolean backupTable(String clientIp, int port, String userName, String password, String database,String tableNames, String backupPath) throws Exception {// 根据逗号分隔符,将要备份的数据库名称拆分成数组// String[] tableArr = tableNames.split(",");// 当前日期String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());// 当前时间String currentTime = new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime());// 备份文件名String backupFileName = database + "-" + currentDate + currentTime + ".sql";// 备份文件路径String backupFilePath = Paths.get(backupPath, backupFileName).toFile().getPath();String command = mysqldump + " -u" + userName + " -p" + password + " " + database + " " + tableNames;Process process = Runtime.getRuntime().exec(command);readStringFromInputStream(process.getInputStream(), backupFilePath);// 等待进程结束int processComplete = process.waitFor();if (processComplete == 0) { // 如果进程成功结束return true;} else { // 如果进程没有成功结束return false;}}/*** 存储文件*/private static void readStringFromInputStream(InputStream stream, String backupFilePath) throws IOException {byte[] buff = new byte[128];int n;FileOutputStream fileOutputStream = null;StringBuilder sb = new StringBuilder();try {while ((n = stream.read(buff)) != -1) {sb.append(new String(buff, 0, n));}fileOutputStream = new FileOutputStream(new File(backupFilePath));fileOutputStream.write(sb.toString().getBytes());} finally {fileOutputStream.close();stream.close();}}
}