IT序号网

ssh之Gulp任务到SSH,然后mysqldump

zengkefu 2025年05月04日 编程语言 350 0

因此,在这种情况下,我有单独的Web服务器和MySQL服务器,并且只能从Web服务器连接到MySQL服务器。

所以基本上每次我都要像这样:

  • 步骤1:'ssh -i〜/ somecert.pem ubuntu@1.2.3.4'
  • 步骤2:'mysqldump -u root -p'password'-h 6.7.8.9数据库名称> 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任务的完成,我通过评论以下内容来摆脱它:loose-local-infile=1来自/etc/mysql/my.cnf


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!