Print
카테고리: [ Amazon Web Services ]
조회수: 7455

1. 개요

2. 사전작업

mysql 모듈을 설치한다.

$ npm install mysql
이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..0 node_modules/mysql
├── safe-buffer@5.1.2
├── sqlstring@2.3.1
├── bignumber.js@4.1.0
└── readable-stream@2.3.6 (process-nextick-args@2.0.0, inherits@2.0.3, string_decoder@1.1.1, util-deprecate@1.0.2, core-util-is@1.0.2, isarray@1.0.0)

설치 여부 확인.

$ ls -l node_modules
total 4
drwxrwxr-x 4 ec2-user ec2-user 4096 Nov 29 14:44 mysql

3. 파일 및 디렉토리 구조

테스트를 위해 임의의 디렉토리 구조를 생성하였다.

4. db 디렉토리 하위

4-1. info.js

module.exports = (function() {
  return {
    host: "DB연결정보(URL)",
    user: "계정이름",
    password: "패스워드",
    database: "DB이름"
  }
})();

4-2. connect.js

var mysql = require('mysql');

module.exports = function () {
  var config = require('../db/info');
  var pool = mysql.createPool({
    host: config.host,
    user: config.user,
    password: config.password,
    database: config.database
  });

  return {
    getConnection: function (callback) {
      pool.getConnection(callback);
    },
    end: function(callback){
      pool.end(callback);
    }
  }
}();

5. sql

5-1. select.js

var pool = require('../db/connect');

module.exports = function () {
  return {
    select: function(callback){
      pool.getConnection(function(err, con){
        var sql = 'SELECT table_name FROM information_schema.tables';
        con.query(sql, function (err, result, fields) {
          con.release();
          if (err) return callback(err);
          callback(null, result);
        });
      });
    },
    pool: pool
  }
};

6. execute.js

var sql = require('./sql/select')();

console.log('** Started');

sql.select(function(err, data){
  if (err) console.log(err);
  else console.log(data);

  sql.pool.end(function(err){
    if (err) console.log(err);
    else {
      console.log('** Finished');
    }
  });
});

7. 실행 결과 (스압...)

$ node execute.js
** Started
[ RowDataPacket { table_name: 'ALL_PLUGINS' },
  RowDataPacket { table_name: 'APPLICABLE_ROLES' },
  RowDataPacket { table_name: 'CHARACTER_SETS' },
  RowDataPacket { table_name: 'COLLATIONS' },
  RowDataPacket { table_name: 'COLLATION_CHARACTER_SET_APPLICABILITY' },
  RowDataPacket { table_name: 'COLUMNS' },
  RowDataPacket { table_name: 'COLUMN_PRIVILEGES' },
  RowDataPacket { table_name: 'ENABLED_ROLES' },
  RowDataPacket { table_name: 'ENGINES' },
  RowDataPacket { table_name: 'EVENTS' },
  RowDataPacket { table_name: 'FILES' },
  RowDataPacket { table_name: 'GLOBAL_STATUS' },
  RowDataPacket { table_name: 'GLOBAL_VARIABLES' },
  RowDataPacket { table_name: 'KEY_CACHES' },
  RowDataPacket { table_name: 'KEY_COLUMN_USAGE' },
  RowDataPacket { table_name: 'PARAMETERS' },
  RowDataPacket { table_name: 'PARTITIONS' },
  RowDataPacket { table_name: 'PLUGINS' },
  RowDataPacket { table_name: 'PROCESSLIST' },
  RowDataPacket { table_name: 'PROFILING' },
  RowDataPacket { table_name: 'REFERENTIAL_CONSTRAINTS' },
  RowDataPacket { table_name: 'ROUTINES' },
  RowDataPacket { table_name: 'SCHEMATA' },
  RowDataPacket { table_name: 'SCHEMA_PRIVILEGES' },
  RowDataPacket { table_name: 'SESSION_STATUS' },
  RowDataPacket { table_name: 'SESSION_VARIABLES' },
  RowDataPacket { table_name: 'STATISTICS' },
  RowDataPacket { table_name: 'SYSTEM_VARIABLES' },
  RowDataPacket { table_name: 'TABLES' },
  RowDataPacket { table_name: 'TABLESPACES' },
  RowDataPacket { table_name: 'TABLE_CONSTRAINTS' },
  RowDataPacket { table_name: 'TABLE_PRIVILEGES' },
  RowDataPacket { table_name: 'TRIGGERS' },
  RowDataPacket { table_name: 'USER_PRIVILEGES' },
  RowDataPacket { table_name: 'VIEWS' },
  RowDataPacket { table_name: 'GEOMETRY_COLUMNS' },
  RowDataPacket { table_name: 'SPATIAL_REF_SYS' },
  RowDataPacket { table_name: 'CLIENT_STATISTICS' },
  RowDataPacket { table_name: 'INDEX_STATISTICS' },
  RowDataPacket { table_name: 'INNODB_SYS_DATAFILES' },
  RowDataPacket { table_name: 'TABLE_STATISTICS' },
  RowDataPacket { table_name: 'INNODB_SYS_TABLESTATS' },
  RowDataPacket { table_name: 'USER_STATISTICS' },
  RowDataPacket { table_name: 'INNODB_SYS_INDEXES' },
  RowDataPacket { table_name: 'XTRADB_RSEG' },
  RowDataPacket { table_name: 'INNODB_CMP_PER_INDEX' },
  RowDataPacket { table_name: 'INNODB_TRX' },
  RowDataPacket { table_name: 'CHANGED_PAGE_BITMAPS' },
  RowDataPacket { table_name: 'INNODB_FT_BEING_DELETED' },
  RowDataPacket { table_name: 'INNODB_LOCK_WAITS' },
  RowDataPacket { table_name: 'INNODB_LOCKS' },
  RowDataPacket { table_name: 'INNODB_TABLESPACES_ENCRYPTION' },
  RowDataPacket { table_name: 'XTRADB_INTERNAL_HASH_TABLES' },
  RowDataPacket { table_name: 'INNODB_SYS_FIELDS' },
  RowDataPacket { table_name: 'INNODB_CMPMEM_RESET' },
  RowDataPacket { table_name: 'INNODB_CMP' },
  RowDataPacket { table_name: 'INNODB_FT_INDEX_TABLE' },
  RowDataPacket { table_name: 'INNODB_SYS_TABLESPACES' },
  RowDataPacket { table_name: 'INNODB_MUTEXES' },
  RowDataPacket { table_name: 'INNODB_BUFFER_PAGE_LRU' },
  RowDataPacket { table_name: 'INNODB_SYS_FOREIGN_COLS' },
  RowDataPacket { table_name: 'INNODB_CMP_RESET' },
  RowDataPacket { table_name: 'INNODB_BUFFER_POOL_STATS' },
  RowDataPacket { table_name: 'INNODB_FT_INDEX_CACHE' },
  RowDataPacket { table_name: 'INNODB_SYS_FOREIGN' },
  RowDataPacket { table_name: 'INNODB_METRICS' },
  RowDataPacket { table_name: 'INNODB_FT_DEFAULT_STOPWORD' },
  RowDataPacket { table_name: 'INNODB_CMPMEM' },
  RowDataPacket { table_name: 'INNODB_SYS_TABLES' },
  RowDataPacket { table_name: 'INNODB_SYS_COLUMNS' },
  RowDataPacket { table_name: 'INNODB_FT_CONFIG' },
  RowDataPacket { table_name: 'INNODB_BUFFER_PAGE' },
  RowDataPacket { table_name: 'INNODB_CMP_PER_INDEX_RESET' },
  RowDataPacket { table_name: 'XTRADB_READ_VIEW' },
  RowDataPacket { table_name: 'INNODB_SYS_SEMAPHORE_WAITS' },
  RowDataPacket { table_name: 'INNODB_CHANGED_PAGES' },
  RowDataPacket { table_name: 'INNODB_FT_DELETED' },
  RowDataPacket { table_name: 'INNODB_TABLESPACES_SCRUBBING' },
  RowDataPacket { table_name: 'column_stats' },
  RowDataPacket { table_name: 'columns_priv' },
  RowDataPacket { table_name: 'db' },
  RowDataPacket { table_name: 'event' },
  RowDataPacket { table_name: 'func' },
  RowDataPacket { table_name: 'general_log' },
  RowDataPacket { table_name: 'general_log_template' },
  RowDataPacket { table_name: 'gtid_slave_pos' },
  RowDataPacket { table_name: 'help_category' },
  RowDataPacket { table_name: 'help_keyword' },
  RowDataPacket { table_name: 'help_relation' },
  RowDataPacket { table_name: 'help_topic' },
  RowDataPacket { table_name: 'host' },
  RowDataPacket { table_name: 'index_stats' },
  RowDataPacket { table_name: 'innodb_index_stats' },
  RowDataPacket { table_name: 'innodb_table_stats' },
  RowDataPacket { table_name: 'plugin' },
  RowDataPacket { table_name: 'proc' },
  RowDataPacket { table_name: 'procs_priv' },
  RowDataPacket { table_name: 'proxies_priv' },
  RowDataPacket { table_name: 'rds_configuration' },
  RowDataPacket { table_name: 'rds_global_status_history' },
  RowDataPacket { table_name: 'rds_global_status_history_old' },
  RowDataPacket { table_name: 'rds_heartbeat2' },
  RowDataPacket { table_name: 'rds_history' },
  RowDataPacket { table_name: 'rds_replication_status' },
  RowDataPacket { table_name: 'rds_sysinfo' },
  RowDataPacket { table_name: 'roles_mapping' },
  RowDataPacket { table_name: 'servers' },
  RowDataPacket { table_name: 'slow_log' },
  RowDataPacket { table_name: 'slow_log_template' },
  RowDataPacket { table_name: 'table_stats' },
  RowDataPacket { table_name: 'tables_priv' },
  RowDataPacket { table_name: 'time_zone' },
  RowDataPacket { table_name: 'time_zone_leap_second' },
  RowDataPacket { table_name: 'time_zone_name' },
  RowDataPacket { table_name: 'time_zone_transition' },
  RowDataPacket { table_name: 'time_zone_transition_type' },
  RowDataPacket { table_name: 'user' },
  RowDataPacket { table_name: 'accounts' },
  RowDataPacket { table_name: 'cond_instances' },
  RowDataPacket { table_name: 'events_stages_current' },
  RowDataPacket { table_name: 'events_stages_history' },
  RowDataPacket { table_name: 'events_stages_history_long' },
  RowDataPacket {
    table_name: 'events_stages_summary_by_account_by_event_name' },
  RowDataPacket { table_name: 'events_stages_summary_by_host_by_event_name' },
  RowDataPacket { table_name: 'events_stages_summary_by_thread_by_event_name' },
  RowDataPacket { table_name: 'events_stages_summary_by_user_by_event_name' },
  RowDataPacket { table_name: 'events_stages_summary_global_by_event_name' },
  RowDataPacket { table_name: 'events_statements_current' },
  RowDataPacket { table_name: 'events_statements_history' },
  RowDataPacket { table_name: 'events_statements_history_long' },
  RowDataPacket {
    table_name: 'events_statements_summary_by_account_by_event_name' },
  RowDataPacket { table_name: 'events_statements_summary_by_digest' },
  RowDataPacket {
    table_name: 'events_statements_summary_by_host_by_event_name' },
  RowDataPacket {
    table_name: 'events_statements_summary_by_thread_by_event_name' },
  RowDataPacket {
    table_name: 'events_statements_summary_by_user_by_event_name' },
  RowDataPacket {
    table_name: 'events_statements_summary_global_by_event_name' },
  RowDataPacket { table_name: 'events_waits_current' },
  RowDataPacket { table_name: 'events_waits_history' },
  RowDataPacket { table_name: 'events_waits_history_long' },
  RowDataPacket { table_name: 'events_waits_summary_by_account_by_event_name' },
  RowDataPacket { table_name: 'events_waits_summary_by_host_by_event_name' },
  RowDataPacket { table_name: 'events_waits_summary_by_instance' },
  RowDataPacket { table_name: 'events_waits_summary_by_thread_by_event_name' },
  RowDataPacket { table_name: 'events_waits_summary_by_user_by_event_name' },
  RowDataPacket { table_name: 'events_waits_summary_global_by_event_name' },
  RowDataPacket { table_name: 'file_instances' },
  RowDataPacket { table_name: 'file_summary_by_event_name' },
  RowDataPacket { table_name: 'file_summary_by_instance' },
  RowDataPacket { table_name: 'host_cache' },
  RowDataPacket { table_name: 'hosts' },
  RowDataPacket { table_name: 'mutex_instances' },
  RowDataPacket { table_name: 'objects_summary_global_by_type' },
  RowDataPacket { table_name: 'performance_timers' },
  RowDataPacket { table_name: 'rwlock_instances' },
  RowDataPacket { table_name: 'session_account_connect_attrs' },
  RowDataPacket { table_name: 'session_connect_attrs' },
  RowDataPacket { table_name: 'setup_actors' },
  RowDataPacket { table_name: 'setup_consumers' },
  RowDataPacket { table_name: 'setup_instruments' },
  RowDataPacket { table_name: 'setup_objects' },
  RowDataPacket { table_name: 'setup_timers' },
  RowDataPacket { table_name: 'socket_instances' },
  RowDataPacket { table_name: 'socket_summary_by_event_name' },
  RowDataPacket { table_name: 'socket_summary_by_instance' },
  RowDataPacket { table_name: 'table_io_waits_summary_by_index_usage' },
  RowDataPacket { table_name: 'table_io_waits_summary_by_table' },
  RowDataPacket { table_name: 'table_lock_waits_summary_by_table' },
  RowDataPacket { table_name: 'threads' },
  RowDataPacket { table_name: 'users' } ]
** Finished