多个数据库存在一个sql文件上的文件分割

您所在的位置:网站首页 数据库文件分割 多个数据库存在一个sql文件上的文件分割

多个数据库存在一个sql文件上的文件分割

2023-09-19 21:27| 来源: 网络整理| 查看: 265

起因: 本来电脑上装的是mysql5.5,有三十多个数据库,都是平时自己写demo创建的。数据量差不多有5G左右,后来公司要求用mysql5.7,因为不想直接删库,又不想直接一个一个导出来,索性直接全部导到一个文件中AllMySql20200331.sql。导出来容易,导进去难。我用Navicat导入的时候,发现很多数据都无法导进去,而且耗时很长。于是就想出分割文件的方法。把这一个文件分成三十多个文件,每个数据库有自己的sql

总思路: 先求AllMySql20200331.sql的总行数,求每个数据库定义语言和插入语言的开始行号和结束行号,执行这两者之间的sql就相当于创建一个数据库并且插入数据。 下面是代码:

-- -- Current Database: `bootstudy` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bootstudy` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `bootstudy`; -- -- Table structure for table `t_huser` - -- -- Current Database: `community` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `community` /*!40100 DEFAULT CHARACTER SET utf8 */;

这是AllMySql20200331.sql文件的demo,表示这个sql里面有两个数据库,当读取文件的时候,利用Current Database 来做分割的条件。

public class Db { private String dbName; /*数据库名*/ private Long beginRow; /*大sql文件的开始行:创建某个数据库的开始语句行号*/ private Long endRow; /*大sql文件的结束行:创建某个数据库的结束语句行号*/ }

工具类

public class SplitSql { public static void main(String[] args) { BufferedReader reader = null; BufferedWriter writer = null; long totalRow = 0; //定义总行数 ArrayList dbs = new ArrayList(); //封装每个数据库的名字,开始行号和结束行号 try { reader = new BufferedReader(new FileReader("D:\\IDEA\\workspace\\javabianchengsixiang\\src\\io\\AllMySql20200331.sql")); //读文件 String row; //存放每一行的sql语句 long beginRow; long endRow; while ((row = reader.readLine()) != null) { ++totalRow; if (row.contains("Current Database")) { String dbName = row.split(":")[1].trim().replaceAll("`", ""); //截取数据库名 Db db = new Db(dbName, totalRow, null); dbs.add(db); } } for (int i = 0; i System.out.println(dbs.get(i)); } for (int i = 0; i row = reader.readLine(); if(j>=db.getBeginRow()&&j e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

截取部分运行结果 在这里插入图片描述 原sql 在这里插入图片描述 截取后的sql 在这里插入图片描述 具体文件 在这里插入图片描述

后来发现有另一种方法,可以导入单个数据库的大文件,但是没有实践,详情参考:https://blog.csdn.net/diyinqian/article/details/80268371



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3