栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MYSQL8 根据IBD恢复表结构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MYSQL8 根据IBD恢复表结构

获取打印json的脚本
#!/bin/bash

#folder = "/usr/local/DBdatas/mysql8/data/sjwgxsj"
#echo $folder
softfiles=$(ls "/usr/local/DBdatas/mysql8/data/ts")
for sfile in ${softfiles}
do
 echo "/usr/local/DBdatas/mysql8/bin/ibd2sdi /usr/local/DBdatas/mysql8/data/ts/${sfile}>>ts.json"
done
获取表名与列名字段
ibd2sdi ***.ibd |jq  '.[]?|.[]?|.dd_object?|({table:.name?},(.columns?|.[]?|{name:.name,type:.column_type_utf8}))' > ***.json
解析JSON的java代码
package com.test;

import com.alibaba.fastjson.JSON;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Hello {
    public static void main(String[] args) throws IOException {
        String filePath = "H:\ts.sql";
        List list = new ArrayList<>();
        InputStreamReader Reader = new InputStreamReader(new FileInputStream(filePath), "UTF-8");
        //考虑到编码格式,new FileInputStream(myFile)文件字节输入流,以字节为单位对文件中的数据进行读取
        //new InputStreamReader(FileInputStream a, "编码类型")
        //将文件字节输入流转换为文件字符输入流并给定编码格式

        BufferedReader bufferedReader = new BufferedReader(Reader);
        //BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
        //通过BuffereReader包装实现高效读取

        String lineTxt = null;

        while ((lineTxt = bufferedReader.readLine()) != null) {
            //buffereReader.readLine()按行读取写成字符串
            if(!"{".equals(lineTxt)&&!"}".equals(lineTxt)){
                list.add(lineTxt.replace(""","").replace(",",""));
            }

        }


        Reader.close();

        System.out.println(list.get(list.size()-1));
        StringBuffer tableBuf = new StringBuffer();
        List createSql = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {

            String[] split = list.get(i).replace(" ","").replace("  ","").split(":");

            if(split[0].equals("table")){

                if(i !=0 ){

                    if(tableBuf.lastIndexOf(",")>=0){
                        String substring = tableBuf.substring(0, tableBuf.lastIndexOf(","));
                        tableBuf.setLength(0);
                        tableBuf.append(substring);

                    }
                    tableBuf.append(" ) ");
                    createSql.add(tableBuf.toString());
                    tableBuf.setLength(0);
                    tableBuf.append("create table "+split[1]+" ( ");
                }else{
                    tableBuf.append("create table "+split[1]+" ( ");
                }
            }else if(split[0].equals("name")){
                if(!split[1].equals("DB_ROW_ID")&&!split[1].equals("DB_TRX_ID")&&!split[1].equals("DB_ROLL_PTR")){
                    tableBuf.append("`"+split[1]+"` ");
                }
            }else if(split[0].equals("type")){
                try {
                    if(split.length>=2){
                        tableBuf.append(" "+split[1]+", ");
                    }

                } catch (Exception e) {
                    System.out.println(tableBuf);
                    throw new RuntimeException(e);
                }
            }

        }
        List result = new ArrayList<>();
        for (int i = 0; i < createSql.size(); i++) {
            if(!createSql.get(i).contains("fts_")&& !createSql.get(i).contains("ts/")){
                result.add(createSql.get(i));
            }

        }
        for (int i = 0; i < result.size(); i++) {
            System.out.println(result.get(i));


        }
        System.out.println(result.size());
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号