nodejs导入、导出.sql文件

导出

const childProcess=require('child_process');

const db={
  user:'user',
  pwd:'pwd',
  database:'database',
  tables:'table1 table2 table3 table4 ....',
  path:'path'
};

let cmd=`mysqldump -u${db.user} -p${db.pwd} ${db.database} ${db.tables} > ${db.path}`;

console.log(cmd);

//执行mysqldump命令
childProcess.exec(cmd,(error, stdout, stderr)=>{
  console.log(error);
  console.log(stdout);
  console.log(stderr);
});

导入

import mysql from 'mysql'
import fs from 'fs'
import path from 'path'
import readline from 'readline'

var options=fs.readFileSync(path.resolve(__dirname,'../data.json'),'utf-8')
options=JSON.parse(options)

var connection = mysql.createConnection({
    host: options.host,
    port: options.port,
    user: options.user,
    password: options.pwd
});

function query(sql){
  return new Promise((resolve,reject)=>{
    connection.query(sql,(err,data)=>{
      if(err){
        reject(err)
      }else{
        resolve(data)
      }
    })
  })
}

function read_file(path){
  return new Promise((resolve,reject)=>{
    var fRead = fs.createReadStream(path);
    var objReadline = readline.createInterface({
      input:fRead
    });
    var str='';
    var arr = new Array();
    objReadline.on('line',function (line) {
      if(line.endsWith(';')){
        if(str.length!=0){
          str+=line;
          line=str;
          str='';
        }
        arr.push(line);
      }else if(!line.endsWith(';')&&!line.startsWith('--')){
        str+=line;
      }
    });
    objReadline.on('close',function () {
      resolve(arr);
    });
  });
}

// 记录执行错误条数,也可自行可记录下那条语句执行出错
let errorNum=0;

// 执行use database;语句,选择要导入的数据库
await query(`use ${arg.db}`);

let data=await read_file('./chars.sql');

for(let i in data){
    console.log(data[i]);
    try{
        if(data[i].endsWith(';')){
            data[i]=data[i].slice(0,data[i].length-1);
    }
    await query(data[i]);
    }catch{
        errorNum++;
        console.log('执行发生错误!');
    }
}

if(errorNum>0){
      console.log('失败');
}else{
      console.log('成功);
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值