Gulp 任务到 SSH,然后是 mysqldump
Gulp task to SSH and then mysqldump
所以我有这种情况,我有单独的 Web 服务器和 MySQL 服务器,我只能从 Web 服务器连接到 MySQL 服务器。
所以基本上每次我必须去:
- 第 1 步:'ssh -i ~/somecert.pem ubuntu@1.2.3.4'
- 步骤 2: 'mysqldump -u root -p'密码' -h 6.7.8.9 database_name > output.sql'
我是 gulp 的新手,我的目标是创建一个可以自动化所有这些的任务,因此 运行 一个 gulp 任务会自动为我提供 SQL 文件.
这将使开发人员的工作变得更加轻松,因为只需一个命令即可下载最新的数据库转储。
这是我到目前为止的进展 (gulpfile.js):
////////////////////////////////////////////////////////////////////
// Run: 'gulp download-db' to get latest SQL dump from production //
// File will be put under the 'dumps' folder //
////////////////////////////////////////////////////////////////////
// Load stuff
'use strict'
var gulp = require('gulp')
var GulpSSH = require('gulp-ssh')
var fs = require('fs');
// Function to get home path
function getUserHome() {
return process.env.HOME || process.env.USERPROFILE;
}
var homepath = getUserHome();
///////////////////////////////////////
// SETTINGS (change if needed) //
///////////////////////////////////////
var config = {
// SSH connection
host: '1.2.3.4',
port: 22,
username: 'ubuntu',
//password: '1337p4ssw0rd', // Uncomment if needed
privateKey: fs.readFileSync( homepath + '/certs/somecert.pem'), // Uncomment if needed
// MySQL connection
db_host: 'localhost',
db_name: 'clients_db',
db_username: 'root',
db_password: 'dbp4ssw0rd',
}
////////////////////////////////////////////////
// Core script, don't need to touch from here //
////////////////////////////////////////////////
// Set up SSH connector
var gulpSSH = new GulpSSH({
ignoreErrors: true,
sshConfig: config
})
// Run the mysqldump
gulp.task('download-db', function(){
return gulpSSH
// runs the mysql dump
.exec(['mysqldump -u '+config.db_username+' -p\''+config.db_password+'\' -h '+config.db_host+' '+config.db_name+''], {filePath: 'dump.sql'})
// pipes output into local folder
.pipe(gulp.dest('dumps'))
})
// Run search/replace "optional"
通过 SSH 连接到 Web 服务器运行良好,但我在尝试获取 mysqldump 时遇到问题,我收到此消息:
events.js:85
throw er; // Unhandled 'error' event
^
Error: Warning:
如果我从服务器 SSH 手动尝试相同的 mysqldump 命令,我得到:
Warning: mysqldump: unknown variable 'loose-local-infile=1'
后跟正确的 mylsql 转储信息。
所以我认为这条警告消息弄乱了我的脚本,在这种情况下我想忽略警告,但不知道该怎么做或是否可行。
我还了解到,直接在命令行中使用密码并不是很好的做法。
理想情况下,我希望从另一个文件加载所有配置变量,但这是我的第一个 gulp 任务,我不太熟悉我会怎么做。
有 Gulp 经验的人可以指导我找到完成这件事的好方法吗?还是您认为我根本不应该为此使用 Gulp?
谢谢!
正如我所怀疑的那样,该警告消息阻止了 gulp 任务完成,我通过评论摆脱了它:loose-local-infile=1
来自 /etc/mysql/my.cnf
所以我有这种情况,我有单独的 Web 服务器和 MySQL 服务器,我只能从 Web 服务器连接到 MySQL 服务器。
所以基本上每次我必须去:
- 第 1 步:'ssh -i ~/somecert.pem ubuntu@1.2.3.4'
- 步骤 2: 'mysqldump -u root -p'密码' -h 6.7.8.9 database_name > output.sql'
我是 gulp 的新手,我的目标是创建一个可以自动化所有这些的任务,因此 运行 一个 gulp 任务会自动为我提供 SQL 文件.
这将使开发人员的工作变得更加轻松,因为只需一个命令即可下载最新的数据库转储。
这是我到目前为止的进展 (gulpfile.js):
////////////////////////////////////////////////////////////////////
// Run: 'gulp download-db' to get latest SQL dump from production //
// File will be put under the 'dumps' folder //
////////////////////////////////////////////////////////////////////
// Load stuff
'use strict'
var gulp = require('gulp')
var GulpSSH = require('gulp-ssh')
var fs = require('fs');
// Function to get home path
function getUserHome() {
return process.env.HOME || process.env.USERPROFILE;
}
var homepath = getUserHome();
///////////////////////////////////////
// SETTINGS (change if needed) //
///////////////////////////////////////
var config = {
// SSH connection
host: '1.2.3.4',
port: 22,
username: 'ubuntu',
//password: '1337p4ssw0rd', // Uncomment if needed
privateKey: fs.readFileSync( homepath + '/certs/somecert.pem'), // Uncomment if needed
// MySQL connection
db_host: 'localhost',
db_name: 'clients_db',
db_username: 'root',
db_password: 'dbp4ssw0rd',
}
////////////////////////////////////////////////
// Core script, don't need to touch from here //
////////////////////////////////////////////////
// Set up SSH connector
var gulpSSH = new GulpSSH({
ignoreErrors: true,
sshConfig: config
})
// Run the mysqldump
gulp.task('download-db', function(){
return gulpSSH
// runs the mysql dump
.exec(['mysqldump -u '+config.db_username+' -p\''+config.db_password+'\' -h '+config.db_host+' '+config.db_name+''], {filePath: 'dump.sql'})
// pipes output into local folder
.pipe(gulp.dest('dumps'))
})
// Run search/replace "optional"
通过 SSH 连接到 Web 服务器运行良好,但我在尝试获取 mysqldump 时遇到问题,我收到此消息:
events.js:85
throw er; // Unhandled 'error' event
^
Error: Warning:
如果我从服务器 SSH 手动尝试相同的 mysqldump 命令,我得到:
Warning: mysqldump: unknown variable 'loose-local-infile=1'
后跟正确的 mylsql 转储信息。
所以我认为这条警告消息弄乱了我的脚本,在这种情况下我想忽略警告,但不知道该怎么做或是否可行。
我还了解到,直接在命令行中使用密码并不是很好的做法。
理想情况下,我希望从另一个文件加载所有配置变量,但这是我的第一个 gulp 任务,我不太熟悉我会怎么做。
有 Gulp 经验的人可以指导我找到完成这件事的好方法吗?还是您认为我根本不应该为此使用 Gulp?
谢谢!
正如我所怀疑的那样,该警告消息阻止了 gulp 任务完成,我通过评论摆脱了它:loose-local-infile=1
来自 /etc/mysql/my.cnf