今日阳光明媚,又是一个减肥的大好日子
来段代码提提神
在没有正规DBA,服务器单一,小型项目的时候,总会有些的备份数据库的需求;
数据库一般备份命令:
// 1.导出结构不导出数据 // mysqldump --opt -d 数据库名 -u root -p > xxx.sql // 2.导出数据不导出结构 // mysqldump -t 数据库名 -uroot -p > xxx.sql // 3.导出数据和表结构 // mysqldump 数据库名 -uroot -p > xxx.sql // sql4.导出特定表的结构 // mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql
基本代码:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import java.io.File; import java.io.IOException; /** * Created by user on 2015/8/7. */ public class DbbackupTask { Log loger = LogFactory.getLog(this.getClass()); @Value("${host_ip}") private String HOSTIP;//数据库服务器IP @Value("${user_name}") private String USERNAME;//数据库用户 @Value("${password}") private String PASSWORD;//数据库密码 @Value("${save_path}") private String SAVEPATH;//备份文件路径 /** * 每隔xxx时间就执行,暂定每天0点 */ public void dbbackup() { loger.debug("数据库备份开始"); String[] databaseName = {"common_db", "logistic_db", "operate_db", "order_db"}; String dates = new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()); String dated = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date()); System.out.println(dates); System.out.println(dated); for (Object o : databaseName) { String savePath=SAVEPATH + "/" + dated; String fileName = o.toString() + dates+".sql"; System.out.println(SAVEPATH + "/" + dated + "/" + o.toString() + dates+".sql"); exportDatabaseTool(HOSTIP, USERNAME, PASSWORD, savePath,fileName, o.toString()); } } public void exportDatabaseTool(String hostIP, String userName, String password, String savePath,String fileName, String databaseName) { File saveFile = new File(savePath); if (!saveFile.exists()) {// 如果目录不存在 saveFile.mkdirs();// 创建文件夹 } if (!savePath.endsWith(File.separator)) { savePath = savePath + File.separator; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("mysqldump")/*.append(" --opt")*/.append(" -h").append(hostIP); stringBuilder.append(" --user=").append(userName).append(" --password=").append(password).append(" --lock-all-tables=true"); stringBuilder.append(" --result-file=").append(savePath+fileName).append(" --default-character-set=utf8 ").append(databaseName); try { Process process = Runtime.getRuntime().exec(stringBuilder.toString()); if (process.waitFor() == 0) {// 0 表示线程正常终止。 loger.info("数据库备份成功"); } } catch (IOException e) { loger.info("数据库备份异常"); e.printStackTrace(); } catch (InterruptedException e) { loger.info("数据库备份异常"); e.printStackTrace(); } } }
再加一个定时任务quartz;
同学们可以学习java调用命名,重启tomcat 。