fix mongo connection while backup
This commit is contained in:
parent
abee37a52c
commit
85fc6b6a86
166
db_tool/main.js
166
db_tool/main.js
@ -11,7 +11,7 @@ const getDirectories = async source =>
|
|||||||
.filter(dirent => dirent.isDirectory())
|
.filter(dirent => dirent.isDirectory())
|
||||||
.map(dirent => dirent.name);
|
.map(dirent => dirent.name);
|
||||||
|
|
||||||
async function performBackup(databaseName) {
|
async function performBackup(databaseName, uri) {
|
||||||
try {
|
try {
|
||||||
const timestamp = moment().format("DD.MM.YYYY_HHmmss");
|
const timestamp = moment().format("DD.MM.YYYY_HHmmss");
|
||||||
const { backupFolder } = await prompt([
|
const { backupFolder } = await prompt([
|
||||||
@ -24,37 +24,64 @@ async function performBackup(databaseName) {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
const folderName = "dumps/" + backupFolder;
|
const folderName = "dumps/" + backupFolder;
|
||||||
const backupCommand = `mongodump --db ${databaseName} --out ${folderName}`;
|
|
||||||
|
|
||||||
console.log(`Creating backup of database ${databaseName}...`);
|
let backupCommand = spawn("mongodump", [
|
||||||
await exec(backupCommand);
|
"--authenticationDatabase=admin",
|
||||||
|
"--uri",
|
||||||
|
uri,
|
||||||
|
"--db",
|
||||||
|
databaseName,
|
||||||
|
"--out",
|
||||||
|
folderName,
|
||||||
|
]);
|
||||||
|
|
||||||
console.log(`Backup created successfully in folder ${folderName}.`);
|
backupCommand.stdout.on("data", function (data) {
|
||||||
|
console.log(data.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
backupCommand.stderr.on("data", function (data) {
|
||||||
|
console.log(data.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
const waitForEnd = new Promise((resolve, reject) => {
|
||||||
|
backupCommand.on("exit", function (code) {
|
||||||
|
console.log("child process exited with code " + code.toString());
|
||||||
|
console.log(`Search you backup in folder ${folderName}.`);
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
await waitForEnd;
|
||||||
|
return;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("An error occurred during the backup process:", error);
|
console.error("An error occurred during the backup process:", error);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function performRestore(restoreFolder, uri) {
|
async function performRestore(restoreFolder, uri) {
|
||||||
try {
|
try {
|
||||||
console.log(`Restoring database from folder ${restoreFolder}...`);
|
console.log(`Restoring database from folder ${restoreFolder}...`);
|
||||||
let ls = spawn("mongorestore", ["--uri", uri, "--drop", restoreFolder]);
|
let restoreCommand = spawn("mongorestore", ["--uri", uri, "--drop", restoreFolder]);
|
||||||
|
|
||||||
ls.stdout.on("data", function (data) {
|
restoreCommand.stdout.on("data", function (data) {
|
||||||
console.log(data.toString());
|
console.log(data.toString());
|
||||||
});
|
});
|
||||||
|
|
||||||
ls.stderr.on("data", function (data) {
|
restoreCommand.stderr.on("data", function (data) {
|
||||||
console.log(data.toString());
|
console.log(data.toString());
|
||||||
});
|
});
|
||||||
|
|
||||||
ls.on("exit", function (code) {
|
const waitForEnd = new Promise((resolve, reject) => {
|
||||||
console.log("child process exited with code " + code.toString());
|
restoreCommand.on("exit", function (code) {
|
||||||
|
console.log("child process exited with code " + code.toString());
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
await waitForEnd;
|
||||||
console.log("Database restored successfully.");
|
return;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("An error occurred during the restore process:", error);
|
console.error("An error occurred during the restore process:", error);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,74 +188,77 @@ async function main() {
|
|||||||
await client.connect();
|
await client.connect();
|
||||||
console.log("Connected to MongoDB successfully.");
|
console.log("Connected to MongoDB successfully.");
|
||||||
|
|
||||||
const { action } = await prompt([
|
while (true) {
|
||||||
{
|
const { action } = await prompt([
|
||||||
type: "list",
|
|
||||||
name: "action",
|
|
||||||
message: "Choose an action:",
|
|
||||||
choices: ["Clear ...", "Backup", "Restore"],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (action === "Backup") {
|
|
||||||
const { databaseName } = await prompt([
|
|
||||||
{
|
{
|
||||||
type: "list",
|
type: "list",
|
||||||
name: "databaseName",
|
name: "action",
|
||||||
message: "Choose a database to backup:",
|
message: "Choose an action:",
|
||||||
choices: await client
|
choices: ["Clear ...", "Backup", "Restore"],
|
||||||
.db()
|
|
||||||
.admin()
|
|
||||||
.listDatabases()
|
|
||||||
.then(({ databases }) => databases.map(({ name }) => name)),
|
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await performBackup(databaseName);
|
if (action === "Backup") {
|
||||||
} else if (action === "Restore") {
|
const { databaseName } = await prompt([
|
||||||
try {
|
|
||||||
const dirs = await getDirectories("./dumps");
|
|
||||||
const { restoreFolder } = await prompt([
|
|
||||||
{
|
{
|
||||||
type: "list",
|
type: "list",
|
||||||
name: "restoreFolder",
|
name: "databaseName",
|
||||||
message: "Choose the folder to restore from:",
|
message: "Choose a database to backup:",
|
||||||
choices: dirs,
|
choices: await client
|
||||||
|
.db()
|
||||||
|
.admin()
|
||||||
|
.listDatabases()
|
||||||
|
.then(({ databases }) => databases.map(({ name }) => name)),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await performRestore("./dumps/" + restoreFolder, uri);
|
await performBackup(databaseName, uri);
|
||||||
} catch (err) {
|
} else if (action === "Restore") {
|
||||||
if (err.errno === -2) {
|
try {
|
||||||
console.log("No 'dumps' dir found");
|
const dirs = await getDirectories("./dumps");
|
||||||
} else {
|
const { restoreFolder } = await prompt([
|
||||||
throw new Error(err);
|
{
|
||||||
|
type: "list",
|
||||||
|
name: "restoreFolder",
|
||||||
|
message: "Choose the folder to restore from:",
|
||||||
|
choices: dirs,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
await performRestore("./dumps/" + restoreFolder, uri);
|
||||||
|
} catch (err) {
|
||||||
|
if (err.errno === -2) {
|
||||||
|
console.log("No 'dumps' dir found");
|
||||||
|
} else {
|
||||||
|
throw new Error(err);
|
||||||
|
}
|
||||||
|
console.log("Disconnected from MongoDB.");
|
||||||
|
await client.close();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
console.log("Disconnected from MongoDB.");
|
} else if (action === "Clear ...") {
|
||||||
|
const { subject } = await prompt([
|
||||||
|
{
|
||||||
|
type: "list",
|
||||||
|
name: "subject",
|
||||||
|
message: "Choose what you are going to clean up:",
|
||||||
|
choices: ["collection", "field"],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (subject === "collection") {
|
||||||
|
const collection = await chooseCollection(client);
|
||||||
|
await clearColleciton(collection);
|
||||||
|
} else if (subject === "field") {
|
||||||
|
const collection = await chooseCollection(client);
|
||||||
|
const field = await chooseField(client);
|
||||||
|
await clearField(collection, field);
|
||||||
|
}
|
||||||
|
|
||||||
await client.close();
|
await client.close();
|
||||||
return;
|
console.log("Disconnected from MongoDB.");
|
||||||
}
|
}
|
||||||
} else if (action === "Clear ...") {
|
console.log("\nPress Ctrl+C to exit\n");
|
||||||
const { subject } = await prompt([
|
|
||||||
{
|
|
||||||
type: "list",
|
|
||||||
name: "subject",
|
|
||||||
message: "Choose what you are going to clean up:",
|
|
||||||
choices: ["collection", "field"],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (subject === "collection") {
|
|
||||||
const collection = await chooseCollection(client);
|
|
||||||
await clearColleciton(collection);
|
|
||||||
} else if (subject === "field") {
|
|
||||||
const collection = await chooseCollection(client);
|
|
||||||
const field = await chooseField(client);
|
|
||||||
await clearField(collection, field);
|
|
||||||
}
|
|
||||||
|
|
||||||
await client.close();
|
|
||||||
console.log("Disconnected from MongoDB.");
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("An error occurred:", error);
|
console.error("An error occurred:", error);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user