跳到主要内容

MySQL

目前腾讯云托管不提供 MySQL 数据库的托管托管功能,业务如需直接使用数据库,需要客户自行提供或购买 MySQL, 您也可使用腾讯云数据模型服务, 使用云托管调用数据模型OpenAPI来完成相关操作。

Note: 下示例我们在创建一个Express应用中完成。

通过公网连接数据库

1、创建一个名为express_dev的数据库, 创建一个用户表, 表结构如下:

CREATE TABLE persons (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT NOT NULL
);

说明:

  • id: 自增主键, 唯一标识每条记录。
  • name: 人名,最长 100 个字符,不允许为空。
  • age: 年龄,整数类型,不允许为空。

2、安装 mysql2 包

npm i mysql2

3、打开 routes/index.js 文件,修改为以下内容:

const express = require('express');
const mysql = require('mysql2/promise');
const router = express.Router();

// 创建 MySQL 连接池
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
port: process.env.DB_PORT ? Number(process.env.DB_PORT) : 3306,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});

/* GET home page. */
router.get('/', function(req, res, next) {
try {
const connection = await pool.getConnection();
const [rows] = await connection.query('SELECT * FROM persons LIMIT 10');
} cache (err) {
console.error(err)
res.status(500).json({ error: '数据库查询失败' })
}
});

module.exports = router;

上面的代码设置了一个简单的 Express 应用,其中包含主页的路由处理程序。它使用mysql2连接到 MySQL 数据库,并使用运行查询以从数据库中获取到persons表中的前10条用户信息。

4、部署

部署前需要在云托管中设置以下环境变量:

  • DB_HOST: 数据库连接地址,填写真实的数据库连接地址
  • DB_USER: 数据库用户,填写真实的数据库用户名称
  • DB_PASSWORD: 数据库用户密码,填写真实的数据库用户密码
  • DB_NAME: 数据库名称,示例中为 express_dev
  • DB_PORT: 数据库连接端口,默认为 3306

必须填写以上环境变量,否则服务会连接失败,导致无法访问。

通过内网连接数据库

该方式仅限于您在腾讯云且在上海区域购买 MySQL 数据库实例。您可以在腾讯云上海区域购买 MySQL 实例,然后通过腾讯云托管 VPC 内网互联功能,创建相关规则后,通过 MySQL 内网 IP 进行访问。

通过数据模型OpenAPI操作数据库

1、创建云数据(MySQL型)

  • 创建模式选择: 创建数据库并配置数据模型
  • 创建方式选择: 从空白创创建
  • 写入到数据库选择: 云数据库(MySQL型)
  • 模型名称填写: 用户
  • 模型标识填写: users
  • 添加字段如下:
    • 字段1
      • 字段名称: 姓名
      • 字段标识: name
      • 类型: 文本类型
    • 字段2
      • 字段名称: 年龄
      • 字段标识: age
      • 类型: 数字

2、添加用户

腾讯云开发 -> 扩展能力 -> 云后台管 -> 用户管理 -> 创建用户

3、为用户添加超管角色

腾讯云开发 -> 扩展能力 -> 云后台管 -> 权限控制 -> 系统角色 -> 超级管理员 -> 添加成员 -> 将2创建的用户添加进去即可

4、创建登录函数

用户密码登录OpenAPI

在 routes 目录下创建 users.js, 内容如下:

const express = require('express');
const router = express.Router();
const axios = require('axios');

// 从环境变量读取
const envId = process.env.ENV_ID;
const username = process.env.USERNAME;
const password = process.env.PASSWORD;
const verification_token = '';
const modelName = process.env.MODEL_NAME;

// signin 函数
async function signin(envId, username, password, verification_token) {
const url = `https://${envId}.api.tcloudbasegateway.com/auth/v1/signin`;

try {
const response = await axios.post(
url,
{ username, password, verification_token },
{
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}
);

const data = response.data;
if (!data.token_type || !data.access_token) {
throw new Error('返回数据缺少 token_type 或 access_token');
}

return `${data.token_type} ${data.access_token}`;
} catch (error) {
throw error.response?.data || error;
}
}

// getModelList 函数
async function getModelList(envId, modelName, token) {
const url = `https://${envId}.api.tcloudbasegateway.com/v1/model/prod/${encodeURIComponent(modelName)}/list`;

try {
const response = await axios.get(url, {
headers: {
'Accept': 'application/json',
'Authorization': token
}
});

return response.data.data;
} catch (error) {
throw error.response?.data || error;
}
}

// 定义路由 POST /model/list
router.post('', async (req, res) => {
if (!envId || !username || !password || !verification_token || !modelName) {
return res.status(400).json({ error: '缺少必要参数' });
}

try {
// 先登录获取 token
const token = await signin(envId, username, password, verification_token);

// 使用 token 获取模型列表
const data = await getModelList(envId, modelName, token);

res.json({ success: true, data });
} catch (err) {
res.status(500).json({ success: false, error: err });
}
});

module.exports = router;

5、环境变量

  • ENV_ID: 腾讯云开发环境 ID
  • USERNAME: 2添加的用户名称
  • PASSWORD: 2添加的用户名密码
  • MODEL_NAME: 3 创建的数据模型标识, 此处为 users

6、部署访问:

启动 express 项目,刚问 http://localhost:3000/apis/users 即可看到返回信息。

连接腾讯云开发 MySQL 数据库(规划中)