簡體   English   中英

如何將我的應用程序與 MySQL 數據庫作為 oracle 雲基礎設施上的服務連接?

[英]How to connect my application with MySQL database as a service on oracle cloud infrastructure?

我想將處於開發階段的 web 應用程序連接到 MySQL 數據庫作為 oracle 雲基礎設施中的服務。 目前,我已經能夠將 MySQL 數據庫配置為服務,並且我能夠通過服務器 CLI 以及遠程 PC 上安裝的 Workbench 連接到它,並從 CLI 創建和查詢數據庫。 數據庫更改(新數據庫、表創建、更新)在 Workbench 以及我用來連接到數據庫服務的任何其他遠程環境中表示。

所以我相信數據庫已經正確部署。 當我嘗試從我的任何應用程序中連接到 MySQL DBS 時,我現在面臨的問題是我收到一些連接超時錯誤,並且我無法從我的代碼中連接到它。 我是新手,我無法理解這背后的原因。 我花了好幾天的時間來找出問題所在。 任何幫助將不勝感激。

我正在使用 Sequelize ORM 和 mysql2

下面是我的 config.json 文件,用於連接遠程部署的數據庫:

{
  "development": {
    "username": "johndoe",
   "host": "10.0.1.3",
  "dialect": "mysql",
    "password": "Oraclecloud1@",
    "database": "test"
  },

host 是 MySQL 在遠程 130.61.183.23 實例地址上運行的位置。

Server.js 文件,用於在我的機器上設置本地節點 js 服務器以運行應用程序

const express=require('express')

const app=express()

app.use(express.json()) 
app.use(express.urlencoded({extended:true}))

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*"); 
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
  res.header('Access-Control-Allow-Methods', "POST, GET, PUT, DELETE, OPTIONS");
  next();
});

var models=require('./models')

models.sequelize.sync().then(function(){
    console.log('Database looks fine')
}).catch(function(err){
    console.log(err,'Something went wrong with the db')
})

require('./routers/index')(app)
port=process.env.PORT || 3003
app.listen(port,console.log('server up'))

模型中的 Index.js 文件

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

以下是我得到的超時錯誤

ConnectionError [SequelizeConnectionError]: connect ETIMEDOUT    at ConnectionManager.connect (D:\Notes\Node\servertest\node_modules\sequelize\lib\dialects\mysql\connection-manager.js:126:17)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async ConnectionManager._connect (D:\Notes\Node\servertest\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:318:24)
    at async D:\Notes\Node\servertest\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:250:32
    at async ConnectionManager.getConnection (D:\Notes\Node\servertest\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:280:7)
    at async D:\Notes\Node\servertest\node_modules\sequelize\lib\sequelize.js:613:26
    at async MySQLQueryInterface.createTable (D:\Notes\Node\servertest\node_modules\sequelize\lib\dialects\abstract\query-interface.js:225:12)
    at async Function.sync (D:\Notes\Node\servertest\node_modules\sequelize\lib\model.js:1300:5)
    at async Sequelize.sync (D:\Notes\Node\servertest\node_modules\sequelize\lib\sequelize.js:793:35) {
  parent: Error: connect ETIMEDOUT
      at Connection._handleTimeoutError (D:\Notes\Node\servertest\node_modules\mysql2\lib\connection.js:178:17)
      at listOnTimeout (internal/timers.js:554:17)
      at processTimers (internal/timers.js:497:7) {
    errorno: 'ETIMEDOUT',
    code: 'ETIMEDOUT',
    syscall: 'connect',
    fatal: true
  },
  original: Error: connect ETIMEDOUT
      at Connection._handleTimeoutError (D:\Notes\Node\servertest\node_modules\mysql2\lib\connection.js:178:17)
      at listOnTimeout (internal/timers.js:554:17)
      at processTimers (internal/timers.js:497:7) {
    errorno: 'ETIMEDOUT',
    code: 'ETIMEDOUT',
    syscall: 'connect',
    fatal: true
  }
} Something went wrong with the db

對此進行調查,似乎可能發生了幾種可能的事情,包括您的數據庫未運行或您的防火牆不允許訪問。 我看到的另一件事包括在您的配置中添加一個池選項 - Node.js 應用程序中的 SequelizeConnectionError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM