Explorar o código

mysql createPool

DevYK %!s(int64=3) %!d(string=hai) anos
pai
achega
b3ef4231b4
Modificáronse 7 ficheiros con 231 adicións e 112 borrados
  1. 6 4
      README.md
  2. 5 3
      config/dev_config.js
  3. 9 6
      config/prd_config.js
  4. 3 1
      config/test_config.js
  5. 4 0
      model/moralis_sdk.js
  6. 203 96
      model/mysql_db.js
  7. 1 2
      test/db_test.js

+ 6 - 4
README.md

@@ -32,13 +32,15 @@ sudo ssh -i ~/.ssh/de-net.pem ubuntu@34.207.131.244
 
 sudo   su root
 
-ssh    10.0.1.168
+ssh -i /home/ubuntu/denet-security.pem   ubuntu@10.0.1.25
 
-docker ps
+# ssh    10.0.1.168
 
-docker ps  -a
+# docker ps
 
-docker exec  -it   容器id   bash
+# docker ps  -a
+
+# docker exec  -it   容器id   bash
 
 pm2 logs
 

+ 5 - 3
config/dev_config.js

@@ -21,8 +21,8 @@ const reids_token_config = {
     TOKENPRICE: 'TOKENPRICE',
     TOKENWITHDRAW: 'TOKENWITHDRAW',
     GASPRICE: "GASPRICE",
-    LAST_TOTAL_BNB_FREE:'LAST_TOTAL_BNB_FREE',
-    LAST_TOTAL_TOKEN_FREE:'LAST_TOTAL_TOKEN_FREE',
+    LAST_TOTAL_BNB_FREE: 'LAST_TOTAL_BNB_FREE',
+    LAST_TOTAL_TOKEN_FREE: 'LAST_TOTAL_TOKEN_FREE',
 }
 // 设置数据库配置文件
 const db_config = {
@@ -41,7 +41,9 @@ const db_config = {
         USERNAME: 'denet',   //用户名
         PASSWORD: 'cyber#Together_2022', //密码
         PORT: '3306', //连接的端口
-        HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com' //host
+        HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
+        OPEN_POOL: true,
+        POOL_SIZE: 5,
     },
 
     // redis: {

+ 9 - 6
config/prd_config.js

@@ -8,7 +8,7 @@ const account_config = {
     TOKEN_GAS_LIMIT: '90000',
     BNB_GAS_LIMIT: '21000',
     BNB_GAS_PRICE: '6000000000',
-    TRANSFER_GAS:true,
+    TRANSFER_GAS: true,
 }
 
 const cryppt_config = {
@@ -20,9 +20,9 @@ const reids_token_config = {
     TOKENPRICE: 'TOKENPRICE',
     TOKENWITHDRAW: 'TOKENWITHDRAW',
     GASPRICE: "GASPRICE",
-    LAST_TOTAL_BNB_FREE:'LAST_TOTAL_BNB_FREE',
-    LAST_TOTAL_TOKEN_FREE:'LAST_TOTAL_TOKEN_FREE',
-    
+    LAST_TOTAL_BNB_FREE: 'LAST_TOTAL_BNB_FREE',
+    LAST_TOTAL_TOKEN_FREE: 'LAST_TOTAL_TOKEN_FREE',
+
 }
 // 设置数据库配置文件
 const db_config = {
@@ -33,7 +33,10 @@ const db_config = {
         USERNAME: 'denet',   //用户名
         PASSWORD: 'cyber#Together_2022', //密码
         PORT: '3306', //连接的端口
-        HOST: 'denet-chain-prod.csi2lctklqzg.us-east-1.rds.amazonaws.com' //host
+        HOST: 'denet-chain-prod.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
+        OPEN_POOL: true,
+        POOL_SIZE: 5,
+    
     },
 
     redis: {
@@ -53,7 +56,7 @@ const moralis_config = {
 }
 
 const logger_config = {
-    BASE_PATH:`/datalog/denetnode`,
+    BASE_PATH: `/datalog/denetnode`,
 }
 
 module.exports = {

+ 3 - 1
config/test_config.js

@@ -31,7 +31,9 @@ const db_config = {
         USERNAME: 'denet',   //用户名
         PASSWORD: 'cyber#Together_2022', //密码
         PORT: '3306', //连接的端口
-        HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com' //host
+        HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
+        OPEN_POOL: true,
+        POOL_SIZE: 5,
     },
     redis: {
         PORT: 6379, // Redis port

+ 4 - 0
model/moralis_sdk.js

@@ -26,10 +26,14 @@ const SUCCEED_CODE = 0;
  * https://st94nif1cq.feishu.cn/docs/doccnNxG2UwHPCdZXbywgbdy13f#
  */
 async function initMasterSDK() {
+    logger.debug('initMasterSDK start')
     await Moralis.start({ serverUrl, appId, masterKey });
+    logger.debug('initMasterSDK start ok')
 }
 async function initMoralisSecretSDK() {
+    logger.debug('initMoralisSecretSDK start')
     await Moralis.start({ serverUrl, appId, moralisSecret });
+    logger.debug('initMoralisSecretSDK start ok')
 }
 
 function toJson(code_, obj_, errMsg_) {

+ 203 - 96
model/mysql_db.js

@@ -1,18 +1,20 @@
 // mysql 学习资料
 //https://www.runoob.com/nodejs/nodejs-mysql.html
 //https://blog.csdn.net/hbiao68/article/details/89097853
+//https://github.com/mysqljs/mysql
 
 var mysql = require('mysql');
 var { db_config } = require('../config/config.js')
 const logger = require('./logger')
-
+const utils = require('./utils.js')
 var port = db_config.mysql.PORT
 var host = db_config.mysql.HOST
 var username = db_config.mysql.USERNAME
 var password = db_config.mysql.PASSWORD
 var database = db_config.mysql.DATABASE
 var tablename = db_config.mysql.TABLENAME
-
+var open_pool = db_config.mysql.OPEN_POOL
+var pool_size = db_config.mysql.POOL_SIZE
 
 var opts = {
     host: host,
@@ -23,67 +25,78 @@ var opts = {
 }
 var MYSQL_INSTANCE = null;
 
-// opts.connectionLimit = 10
-// MYSQL_INSTANCE = mysql.createPool(opts);
+//程序启动默认创建一个 mysql 连接
 createDefMysqlConnect();
-
+// 开始创建
 function createDefMysqlConnect() {
     disDefMysqlConnect();
     logger.log('createDefMysqlConnect')
-    MYSQL_INSTANCE = mysql.createConnection(opts);
-    MYSQL_INSTANCE.connect();
+    if (open_pool) {//创建连接池
+        opts.connectionLimit = pool_size
+        MYSQL_INSTANCE = mysql.createPool(opts);
+        addConnEvent()
+    } else {//创建单连接
+        MYSQL_INSTANCE = mysql.createConnection(opts);
+        addConnEvent()
+        MYSQL_INSTANCE.connect();
+    }
+    return MYSQL_INSTANCE;
 }
-
+//关闭 mysql
 function disDefMysqlConnect() {
     if (MYSQL_INSTANCE) {
-        MYSQL_INSTANCE.end();
+        if (open_pool) {
+            MYSQL_INSTANCE.end();
+        } else {
+            MYSQL_INSTANCE.end();
+        }
         MYSQL_INSTANCE = null;
-        logger.debug('dis mysql')
+        logger.debug('disDefMysqlConnect')
     }
 }
 
-// logger.log('connected to mysql ps=', db_config.mysql)
-MYSQL_INSTANCE.on('connect', () => {
-    logger.log('connected to mysql')
-})
-
-MYSQL_INSTANCE.on('error', function (err) {
-    logger.error('mysql  Error =>', err);
-});
-
+function getMySqlInstance() {
+    if (MYSQL_INSTANCE) return MYSQL_INSTANCE
+    return createDefMysqlConnect();
+}
 
-MYSQL_INSTANCE.on('restart', function () {
-    logger.error('mysql  restart =>');
-});
+function addConnEvent() {
+    if (!MYSQL_INSTANCE) return
+    if (open_pool) {
+        MYSQL_INSTANCE.on('acquire', function (connection) {
+            logger.log('Connection %d acquired', connection.threadId);
+        });
 
-MYSQL_INSTANCE.on('acquire', function (connection) {
-    logger.log('Connection %d acquired', connection.threadId);
-});
+        MYSQL_INSTANCE.on('connection', function (connection) {
+            logger.log('mysql connection', connection);
+        });
+        MYSQL_INSTANCE.on('enqueue', function () {
+            logger.log('Waiting for available connection slot');
+        });
 
-MYSQL_INSTANCE.on('connection', function (connection) {
-    logger.log('mysql connection', connection);
-});
-MYSQL_INSTANCE.on('enqueue', function () {
-    logger.log('Waiting for available connection slot');
-});
+        MYSQL_INSTANCE.on('release', function (connection) {
+            logger.log('Connection %d released', connection.threadId);
+        });
+    } else {
+        // logger.log('connected to mysql ps=', db_config.mysql)
+        MYSQL_INSTANCE.on('connect', () => {
+            logger.log('connected to mysql')
+        })
 
-MYSQL_INSTANCE.on('release', function (connection) {
-    logger.log('Connection %d released', connection.threadId);
-});
+        MYSQL_INSTANCE.on('error', function (err) {
+            logger.error('mysql  Error =>', err);
+        });
 
-// MYSQL_INSTANCE
 
-MYSQL_INSTANCE.on('uncaughtException', function (err) {
-    logger.error('mysql uncaughtException  =>', err);
-    if (err.code == "PROTOCOL_CONNECTION_LOST") {
-        // mysql.restart();
+        MYSQL_INSTANCE.on('restart', function () {
+            logger.error('mysql  restart =>');
+        });
     }
-});
+}
 
 
 
 function queryCompanyInfoFromId(id) {
-    createDefMysqlConnect()
     var sql_main = 'select * from '
     var sql_table_name = 'company_key_manage'
     var sql_where = ' WHERE '
@@ -92,27 +105,63 @@ function queryCompanyInfoFromId(id) {
     var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
     logger.debug('queryCompanyPrivateKeyFromId new_sql=', new_sql);
     return new Promise((resolve) => {
-        // MYSQL_INSTANCE.getConnection(function (err, connection) {
-        MYSQL_INSTANCE.query(
-            new_sql, [sql_where_value],
-            function selectCb(err, results) {
-                logger.log('queryCompanyPrivateKeyFromId ret=', err, results);
-                var ret;
-                if (results && Array.isArray(results) && results.length > 0) {
-                    ret = results[0]
-                } else {
-                    ret = null
+        if (open_pool) {
+            getMySqlInstance().getConnection(function (err, connection) {
+                if (err) {
+                    logger.error('queryCompanyInfoFromId', err)
+                    logger.error('new_sql', new_sql, id)
+                    resolve(null);
+                    return;
                 }
-                // resolve 只能传递一个参数
-                resolve({
-                    err: err,
-                    results: ret
-                });
-                disDefMysqlConnect();
-            }
-        );
+                connection.query(
+                    new_sql, [sql_where_value],
+                    function selectCb(error, results) {
+                        if (error) {
+                            logger.error('queryCompanyInfoFromId', error)
+                            logger.error('new_sql', new_sql, id)
+                            resolve(null);
+                            return;
+                        }
+                        logger.log('queryCompanyPrivateKeyFromId ret=', error, results);
+                        //用完当前连接需要释放,归还给连接池
+                        connection.release();
+
+                        var ret;
+                        if (results && Array.isArray(results) && results.length > 0) {
+                            ret = results[0]
+                        } else {
+                            ret = null
+                        }
+                        // resolve 只能传递一个参数
+                        resolve({
+                            err: error,
+                            results: ret
+                        });
+                    }
+                );
+            })
+        } else {
+            createDefMysqlConnect()
+            MYSQL_INSTANCE.query(
+                new_sql, [sql_where_value],
+                function selectCb(err, results) {
+                    logger.log('queryCompanyPrivateKeyFromId ret=', err, results);
+                    var ret;
+                    if (results && Array.isArray(results) && results.length > 0) {
+                        ret = results[0]
+                    } else {
+                        ret = null
+                    }
+                    // resolve 只能传递一个参数
+                    resolve({
+                        err: err,
+                        results: ret
+                    });
+                    disDefMysqlConnect();
+                }
+            );
+        }
 
-        // })
 
     })
 }
@@ -124,7 +173,6 @@ function queryCompanyInfoFromId(id) {
  * @returns 
  */
 function queryUserPrivateKeyFromUserAddress(user_address) {
-    createDefMysqlConnect()
     var sql_main = 'select * from '
     var sql_table_name = tablename
     var sql_where = ' WHERE '
@@ -133,30 +181,61 @@ function queryUserPrivateKeyFromUserAddress(user_address) {
     var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
     logger.debug('queryUserPrivateKeyFromUserAddress new_sql=', new_sql);
     return new Promise((resolve) => {
-
-        // MYSQL_INSTANCE.getConnection(function (err, connection) {
-        MYSQL_INSTANCE.query(
-            new_sql, [sql_where_value],
-            function selectCb(err, results) {
-                logger.log('queryUserPrivateKeyFromUserAddress ret=', err, results);
-                var ret;
-                if (results && Array.isArray(results) && results.length > 0) {
-                    ret = results[0].user_private_key
-                } else {
-                    ret = null
+        if (open_pool) {
+            getMySqlInstance().getConnection(function (err, connection) {
+                if (err) {
+                    logger.error('queryUserPrivateKeyFromUserAddress', err)
+                    logger.error('new_sql', new_sql, id)
+                    resolve(null);
+                    return;
                 }
-                // resolve 只能传递一个参数
-                resolve({
-                    err: err,
-                    results: ret
-                });
-                disDefMysqlConnect();
-            }
-        );
-
-        // })
-
-
+                connection.query(
+                    new_sql, [sql_where_value],
+                    function selectCb(error, results) {
+                        if (error) {
+                            logger.error('queryUserPrivateKeyFromUserAddress', error)
+                            logger.error('new_sql', new_sql, id)
+                            resolve(null);
+                            return;
+                        }
+                        logger.log('queryUserPrivateKeyFromUserAddress ret=', error, results);
+                        //用完当前连接需要释放,归还给连接池
+                        connection.release();
+                        var ret;
+                        if (results && Array.isArray(results) && results.length > 0) {
+                            ret = results[0].user_private_key
+                        } else {
+                            ret = null
+                        }
+                        // resolve 只能传递一个参数
+                        resolve({
+                            err: err,
+                            results: ret
+                        });
+                    }
+                );
+            })
+        } else {
+            createDefMysqlConnect()
+            MYSQL_INSTANCE.query(
+                new_sql, [sql_where_value],
+                function selectCb(err, results) {
+                    logger.log('queryUserPrivateKeyFromUserAddress ret=', err, results);
+                    var ret;
+                    if (results && Array.isArray(results) && results.length > 0) {
+                        ret = results[0].user_private_key
+                    } else {
+                        ret = null
+                    }
+                    // resolve 只能传递一个参数
+                    resolve({
+                        err: err,
+                        results: ret
+                    });
+                    disDefMysqlConnect();
+                }
+            );
+        }
     })
 }
 
@@ -174,20 +253,48 @@ function queryAllUserPrivateKeyAndUserAddress() {
     var sql_where_name = '  '
     var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
     logger.debug('queryAllUserPrivateKeyAndUserAddress new_sql=', new_sql);
-    createDefMysqlConnect()
     return new Promise((resolve) => {
-        // MYSQL_INSTANCE.getConnection(function (err, connection) {
-        MYSQL_INSTANCE.query(
-            new_sql, [],
-            function selectCb(err, results) {
-                if (results && Array.isArray(results) && results.length > 0) {
-                    resolve(results);
-                } else {
+        if (open_pool) {
+            getMySqlInstance().getConnection(function (err, connection) {
+                if (err) {
+                    logger.error('queryAllUserPrivateKeyAndUserAddress', err)
+                    logger.error('new_sql', new_sql, id)
+                    resolve(null);
+                    return;
+                }
+                connection.query(
+                    new_sql, [],
+                    function selectCb(error, results) {
+                        if (error) {
+                            logger.error('queryAllUserPrivateKeyAndUserAddress', error)
+                            logger.error('new_sql', new_sql, id)
+                            resolve(null);
+                            return;
+                        }
+
+                        //用完当前连接需要释放,归还给连接池
+                        connection.release();
+
+                        if (results && Array.isArray(results) && results.length > 0) {
+                            resolve(results);
+                        } else {
+                        }
+                    }
+                );
+            })
+        } else {
+            createDefMysqlConnect()
+            MYSQL_INSTANCE.query(
+                new_sql, [],
+                function selectCb(err, results) {
+                    if (results && Array.isArray(results) && results.length > 0) {
+                        resolve(results);
+                    } else {
+                    }
                 }
-            }
-        );
-        // })
-        disDefMysqlConnect();
+            );
+            disDefMysqlConnect();
+        }
     })
 }
 

+ 1 - 2
test/db_test.js

@@ -34,9 +34,8 @@ router.post('/queryUserPrivateKey', async (ctx) => {
     // })
 
     await mysql.queryCompanyInfoFromId(0).then(e=>{
-        ctx.body = "results:" +  e
+        ctx.body = "results:" +  JSON.stringify(e)
     })
-    
 })
 module.exports = router