***java执行代码中必须加cmd /c
Process exec = Runtime.getRuntime().exec("cmd /c mysqldump -uroot -p123456 xxl_job>e:/home/jobbak.sql");
Process exec1 = Runtime.getRuntime().exec("ping www.baidu.com");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(exec.getInputStream()));
BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(exec1.getInputStream()));
String str = "";
/* while ((str=bufferedReader.readLine())!=null){
log.info(str);
}*/
if (exec.waitFor()==0){
log.info("线程正常结束");
}else {
log.warn("执行备份异常");
}
使用 tar 打包文件夹备份
- MySQL 的数据库文件默认都是保存在安全目录的 data 文件夹下,可以直接保存 data 文件夹,因为占用空间较大,可以使用data 打包压缩进行保存
yum -y install xz
#数据库文件很大,可以使用压缩率较大的xz格式压缩,首选需要安装xz压缩格式工具
tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
#对数据库文件夹进行打包操作
ls /opt
#查看打包命令是否运行成功,已经生成了备份文件
du -sh /opt/mysql-2021-02-05.tar.xz
#对比打包前后的文件大小,可以看到压缩的备份文件所占用空间很小
tar -Jxvf /opt/mysql-2021-02-05.tar.xz -C /usr/local/mysql/data/
systemctl restart mysql
#如果数据库文件损坏数据丢失,可以解压缩文件,相当于数据恢复
使用 mysqldump 工具备份
- 上文中演示的是对 MySQL 整个数据库的目录进行压缩的方式,是备份数据库中所有的内容
- mysqldump 是 mysql 用于转存储数据库的实用程序(自带),它主要产生一个 SQL 脚本,其中包含从头重新创建数据库所必需的命令(如 CREATE、TABLE、INSERT等)
- 使用 mysqldump 可以更加灵活地控制备份的内容,比如某几个表或库都可以单独备份
#开始之前,创建库和表,用作例子
mysql -uroot -p123123
#输入密码进入数据库,以上为我的密码
create database SCHOOL;
#创建库
use SCHOOL;
create table CLASS01 ( id int(2) not null auto_increment, name varchar(10) not null, sex char(5) not null, hobby varchar(10), primary key (id));
#创建表结构
#字段一:id,最大显示长度2,不能为空,自动递增从1开始
#字段二:name,可变长度字段,10,不能为空
#字段三:sex,固定长度5,不能为空
#字段四:hobby,可变长度,最多10字符
#字段四:主键(id)
insert into CLASS01 values(1,'wangyi','man','reading');
insert into CLASS01 values(2,'wanger','woman','singing');
#插入2条数据
select * from CLASS01;
#检查一下
quit
#退出数据库
#使用 mysqldump 对某些表进行完全备份,命令格式如下:
mysqldump -u[用户名] -p[密码] [选项] [数据库名] [数据表名] > /备份路径/备份文件名.sql
#导出的为数据库脚本文件
例:对库SCHOOL中的表class进行备份至/opt/目录下
mysqldump -uroot -p[密码] SCHOOL CLASS01 > /opt/test01.sql
#对某些库进行完全备份
mysqldump -uroot -p[密码] [数据库名] > /目录/备份文件名.sql
例:
mysqldump -uroot -p123123 SCHOOL > /opt/test02
#对多个库进行完全备份
mysqldump -uroot -p123123 --databases SCHOOL sys > /opt/test03.sql
#对所有库进行完全备份
mysqldump -uroot -p123123 --all-databases > /opt/test04.sql
#直接备份表结构
mysqldump -uroot -p123123 -d SCHOOL CLASS01 > /opt/test05.sql
ls /opt/
#查看打包命令是否运行成功,已经生成了备份文件
cat /opt/test05.sql
#分析 mysqldump 工具生成的备份文件的内容
- 上面使用了 -d 选项,说明只保存数据库的表结构,且表中只有一个库,可以看到先删除了表(同名),再创建了它
- 删除和创建都是最普通的 MySQL 命令,任何一条在 MySQL 中都是可以执行的语句,有了这些语句就可以创建出和现在的表结构相同的表
- 如果不使用 -d 选项,会把数据也进行备份,下面看看数据时如何保存的
cat /opt/test01
- 可以看到与使用 -d 参数的差别是最后出现了 insert into 语句,往数据库中插入了两条数据,也就是说,数据的备份是保存的插入语句操作
- 通过以上分析,很容易理解,备份的本质就是保存数据库当前表结构的创建语句和现有数据的插入语句,有了它们就可以直接恢复数据库的状态