最近上线了个需求,需要清洗线上数据库的数据。然后笔者就写了个简单的jar项目,通过jdbc直连数据库的形式,用sql操作数据库。
但是我们要提前做好数据备份。
1.将线上数据库备份,笔者最开始想到的是新建一个表,如下:
create table user_bak select * from user;
但这种方式需要有一定的权限。如果没有那么多权限该怎么搞?
后来知道了mysqldump,如下:
/opt/soft/mysql-5.6.27/bin/mysqldump -h服务器ip或域名 -P端口 -u用户名 -p密码 --skip-lock-tables u user>user_bak.sql
那我们有了这个sql怎么使用它恢复数据呢?
mysql>source /user_bak.sql;
用source执行一下就好。
2.将数据备份后,就有了胆量,开始把项目打成jar包,通过 rz命令上传到服务器上。
注意:尽量使用 rz -be 而不是 rz,因为可能会有编码问题导致上传失败。笔者是把文件压缩成 zip包
上传到服务器后,解压力 unzip a.zip;
3.万事具备,只欠东风了,开始执行jar包吧。
笔者最开始 直接 使用 java -jar a.jar执行,报了一个错,如下:
Unsupported major.minor version 52.0
通过stackoverflow上找到了(笔者及其喜欢这个网站,几乎啥问题都有过先例,并且有解答,这个主要是java版本不匹配,在编译的时候使用的是高版本的jdk,而运行时是低版本的jdk)
那该怎么解决呢?--当然是制定版本号了
/opt/soft/jdk/jdk1.8.0_144/bin/java -jar a.jar -Djava.ext.dirs=/opt/soft/jdk/jdk1.8.0_144/bin
然后就ok了。执行完没有异常,赶紧去线上数据库检查一下,数据清洗是否完成。很漂亮,搞定了。
4.这个时候产品让你给他把user表的数据导出到excel中给他
/opt/soft/mysql-5.6.27/bin/mysql -h服务器ip或域名 -P端口 -u用户名 -p密码 -D数据库 -e "select * from user">/tmp/user.excel
附上对数据库的操作:
清空表 truncate table user;
删除表 drop table user;