一次线上数据清洗的经历

最近上线了个需求,需要清洗线上数据库的数据。然后笔者就写了个简单的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)

点击打开stackoverflow该问题的链接


那该怎么解决呢?--当然是制定版本号了

/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;


猜你喜欢

转载自blog.csdn.net/dam454450872/article/details/80944404