阿里云RDS导出数据库结构整理工具

本文使用shell实现一个小工具,可以整理阿里云RDS导出数据库结构的zip文件,整理为可直接使用的sql文件。

阿里云RDS导出的数据库结构sql需要整理的地方

1.解压后sql文件名称缺少数据库名称标识

阿里云RDS导出的数据库结构sql,会压缩为一个zip文件,解压后的sql文件名称没有带上数据库名。

例如
数据库名称是test_user

导出后的zip文件名称: test_user_1616950_all_sql.zip
解压后的sql文件名称: 1616950_all.sql

如果同时存在多个数据库导出文件,这样比较难去区分,因此需要对解压后的文件重命名,带上数据库名称。

2.附带不需要用到的设定数据

因为只导出结构,并不需要数据,因此我们并不需要获取之前数据库表的AUTO_INCREMENT设定,对于类似这种的设定,也需要去掉。

3.解压后的sql文件为utf8 bom

如果我们执行这个sql创建数据表是使用例如php代码读取后执行,sql文件带utf8 bom会导致执行出错,因此需要把sql文件的utf8 bom头去掉。

整理步骤

1.解压文件

2.解压后文件按数据库名重命名

3.删除AUTO_INCREMENT及ROW_FORMAT设定参数

4.去掉文件的utf8 bom头


代码如下

#!/bin/bash

# 解压阿里云导出的数据库zip文件,执行重命名,转utf8 not bom编码,删除无用语句等处理
# 
# Date:     2017-12-18
# Author:   fdipzone
# Ver:      1.0
#

# 保存解压后重命名的sql文件
sqlfile=()

# 遍历当前目录下所有zip文件
for file in $(find . -name "*.zip" -type f) ; do  

    # 定义解压后重命名的文件名
    tmp_sqlfile=$(echo $file|sed 's/_[0-9]*_all_sql.zip/.sql/')
    tmp_sqlfile=${tmp_sqlfile:2}

    # 保存到数组
    sqlfile+=($tmp_sqlfile)

    # 执行解压
    unzip_file=$(unzip $file|grep 'inflating'|awk -F ' ' '{print $2}')

    # 重命名
    $(mv $unzip_file $tmp_sqlfile)

done

# 遍历所有sql文件,删除无用语句,且转为utf8 not bom编码 
for f in ${sqlfile[*]}; do

    # 删除ROW_FORMAT=XXX
    $(sed -i 's/ROW_FORMAT=[A-Z]*//g' $f)

    # 删除AUTO_INCREMENT=XXX
    $(sed -i 's/AUTO_INCREMENT=[0-9]*//g' $f)

    # 删除utf8 bom
    $(sed -i 's/^\xEF\xBB\xBF//g' $f)

done

exit 0
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页