说在前面
在数据库管理和数据迁移的过程中,常常需要将数据库中的表数据和结构进行导出,以便进行备份、共享或在不同环境中使用。数据库数据备份的方法有很多,今天让我们用 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数据库数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论