Nodejs脚本快速导出MySQL数据库数据
说在前面
在数据库管理和数据迁移的过程中,常常需要将数据库中的表数据和结构进行导出,以便进行备份、共享或在不同环境中使用。数据库数据备份的方法有很多,今天让我们用 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在child_process域和错误冒泡及捕获实践
这篇文章主要为大家介绍了Node.js在child_process域和错误冒泡及捕获实践示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-11-11Node.js数据流Stream之Readable流和Writable流用法
这篇文章介绍了Node.js数据流Stream之Readable流和Writable流的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-07-07
最新评论