Nodejs脚本快速导出MySQL数据库数据

 更新时间:2024年10月23日 08:38:15   作者:JYeontu  
在数据库管理和数据迁移的过程中,常常需要将数据库中的表数据和结构进行导出,本文将使用Node.js编写一个脚本实现快速从MySQL数据库中导出所有表的数据和结构,并保存为单独的SQL文件,需要的可以参考下

说在前面

在数据库管理和数据迁移的过程中,常常需要将数据库中的表数据和结构进行导出,以便进行备份、共享或在不同环境中使用。数据库数据备份的方法有很多,今天让我们用 Node.js 来编写一个脚本,快速从 MySQL 数据库中导出所有表的数据和结构,并保存为单独的 SQL 文件。

脚本编写

1. 模块引入

const mysql = require("mysql");
const fs = require("fs");
  • mysql模块用于连接和操作MySQL数据库
  • fs模块用于文件操作,将数据写入文件。

2. 数据库连接配置

const dbConfig = {
  host: "localhost",
  user: "root",
  password: "password",
  database: "test",
};

const connection = mysql.createConnection(dbConfig);

connection.connect((error) => {
  if (error) throw error;
  console.log("Successfully connected to the database.");
});

定义了数据库连接配置对象dbConfig,包含主机名、用户名、密码和数据库名等信息。然后使用mysql.createConnection创建数据库连接,并通过connection.connect方法进行连接,若连接成功则打印相应信息。

3. 导出表数据和结构的函数

function exportTableData(tableName, close = false) {
  connection.query(
    `SHOW CREATE TABLE ${tableName}`,
    (error, results, fields) => {
      if (error) throw error;

      const createTableStatement = results[0]["Create Table"];

      connection.query(
        `SELECT * FROM ${tableName}`,
        (error, results, fields) => {
          if (error) throw error;

          const insertStatements = results
            .map((row) => {
              const keys = [],
                values = [];
              Object.entries(row).forEach((item) => {
                keys.push(item[0]);
                values.push(`'${item[1]}'`);
              });
              return `INSERT INTO ${tableName} (${keys.join(
                ","
              )}) VALUES (${values.join(",")});`;
            })
            .join("\n");

          const sql = `${createTableStatement};\n\n${insertStatements}`;

          fs.writeFile(`${tableName}.sql`, sql, (err) => {
            if (err) throw err;
            console.log(`Data from ${tableName} exported successfully.`);
            if (close) {
              connection.end();
              console.log("All exported!");
            }
          });
        }
      );
    }
  );
}
  • 这个函数接受表名tableName作为参数,还有一个可选参数close,用于控制是否在导出完成后关闭数据库连接。
  • 首先查询表的创建语句:
connection.query(
  `SHOW CREATE TABLE ${tableName}`,
  (error, results, fields) => {
    //...
  }
);

然后查询表中的所有数据:

connection.query(
  `SELECT * FROM ${tableName}`,
  (error, results, fields) => {
    //...
  }
);

对于查询到的数据,将每行数据转换为INSERT INTO语句:

const insertStatements = results
 .map((row) => {
    const keys = [],
      values = [];
    Object.entries(row).forEach((item) => {
      keys.push(item[0]);
      values =append('${item[1]}');
    });
    return `INSERT INTO ${tableName} (${keys.join(
      ","
    )}) VALUES (${values.join(",")});`;
  })
 .join("\n");

最后将表的创建语句和所有数据的INSERT INTO语句组合起来写入到以表名命名的.sql文件中:

const sql = `${createTableStatement};\n\n${insertStatements}`;

fs.writeFile(`${tableName}.sql`, sql, (err) => {
  if (err) throw err;
  console.log(`Data from ${tableName} exported successfully.`);
  if (close) {
    connection.end();
    console.log("All exported!");
  }
});

4. 执行导出操作

connection.query("SHOW TABLES", (error, results, fields) => {
  if (error) throw error;

  results.forEach((result, index) => {
    const tableName = result[`Tables_in_${dbConfig.database}`];
    exportTableData(tableName, index === results.length - 1);
  });
});

通过查询数据库中的所有表,然后对每个表调用exportTableData函数进行数据和结构的导出,当处理到最后一个表时,会根据exportTableData函数的close参数设置来决定是否关闭数据库连接。

测试

创建数据库

CREATE DATABASE test;

创建表

CREATE TABLE `t_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`id`)
)

插入数据

INSERT INTO t_user (name,age) VALUES ('张三', 25);
INSERT INTO t_user (name,age) VALUES ('李四', 24);

导出数据

到此这篇关于Nodejs脚本快速导出MySQL数据库数据的文章就介绍到这了,更多相关Nodejs导出MySQL数据库数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node.js 实现手机号验证码登录功能

    node.js 实现手机号验证码登录功能

    这篇文章主要介绍了node.js 实现手机号验证码登录功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Node.js 子线程Crash 问题的排查方法

    Node.js 子线程Crash 问题的排查方法

    这篇文章主要介绍了Node.js 子线程Crash 问题的排查,本文通过代码例子给大家详细讲解,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 在windows上用nodejs搭建静态文件服务器的简单方法

    在windows上用nodejs搭建静态文件服务器的简单方法

    这篇文章主要介绍了在windows上用nodejs搭建静态文件服务器的简单方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • node自定义安装更改npm全局模块默认安装路径的步骤

    node自定义安装更改npm全局模块默认安装路径的步骤

    有段时间没用npm了,新建个项目,需要改变npm全局包默认安装的路径,本文就来介绍一下node自定义安装更改npm全局模块默认安装路径的步骤,感兴趣的可以了解下
    2021-09-09
  • Async/Await替代Promise的6个理由

    Async/Await替代Promise的6个理由

    这篇文章主要介绍了Async/Await替代Promise的6个理由,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • NODE.JS加密模块CRYPTO常用方法介绍

    NODE.JS加密模块CRYPTO常用方法介绍

    这篇文章主要介绍了NODE.JS加密模块CRYPTO常用方法介绍,需要的朋友可以参考下
    2014-06-06
  • vscode调试node.js的实现方法

    vscode调试node.js的实现方法

    这篇文章主要介绍了vscode调试node.js的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • node连接mysql,并操作mysql方式

    node连接mysql,并操作mysql方式

    这篇文章主要介绍了node连接mysql,并操作mysql方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Node.JS利用PhantomJs抓取网页入门教程

    Node.JS利用PhantomJs抓取网页入门教程

    现今,网页抓取已经是一种人所共知的技术了,然而依然存在着诸多复杂性,下面这篇文章主要给大家介绍了Node.JS利用PhantomJs抓取网页的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • Nodejs搭建多进程Web服务器实现过程

    Nodejs搭建多进程Web服务器实现过程

    这篇文章主要为大家介绍了Nodejs搭建多进程Web服务器实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论