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操作数据库
- 数据模型相关介绍和使用请参考: 云数据库/数据模型
- 数据模型 OpenAPI 请参考: 数据模型OpenAPI
1、创建云数据(MySQL型)
创建模式
选择: 创建数据库并配置数据模型创建方式
选择: 从空白创创建写入到数据库
选择: 云数据库(MySQL型)模型名称
填写: 用户模型标识
填写: users添加字段
如下:- 字段1
字段名称
: 姓名字段标识
: name类型
: 文本类型
- 字段2
字段名称
: 年龄字段标识
: age类型
: 数字
- 字段1
2、添加用户
腾讯云开发 -> 扩展能力 -> 云后台管 -> 用户管理 -> 创建用户
3、为用户添加超管角色
腾讯云开发 -> 扩展能力 -> 云后台管 -> 权限控制 -> 系统角色 -> 超级管理员 -> 添加成员 -> 将2创建的用户添加进去即可
4、创建登录函数
在 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
: 腾讯云开发环境 IDUSERNAME
: 2添加的用户名称PASSWORD
: 2添加的用户名密码MODEL_NAME
: 3 创建的数据模型标识, 此处为users
6、部署访问:
启动 express 项目,刚问 http://localhost:3000/apis/users
即可看到返回信息。