LeanDB MySQL 使用指南
LeanDB MySQL 是云引擎提供的托管数据库,开发者可以在云引擎中使用 MySQL 客户端类库连接,访问完整的 MySQL 功能,更多其他托管数据库请查看 云引擎服务总览。
创建和管理实例
开发者可以在 开发者中心 > 你的游戏 > 游戏服务 > 云服务 > 云引擎 > 数据库 > MySQL 页面创建和管理 LeanDB MySQL 实例。
创建实例
点击 创建实例 可在控制台中看到一些配置项:
- 实例名称 用于在云引擎中通过环境变量引用到该 LeanDB 实例,在账户下需唯一。
- 内存规格 目前提供
0.5GB
、1GB
、2GB
、4GB
几种,代表不同的运算能力,是计费的基础。 - 存储空间 每个实例默认有 20G 的存储空间,可以选配 100G 或者 500G 的存储空间。
在调整好规格后,可以在控制台上看到当前规格的价格。
点击展开 LeanDB 计费详情
LeanDB 按天进行扣费,使用时间不足一天也按一天计费,每天扣除前一天的费用。LeanDB 基于开发者选择的实例规格进行计费,与实际用量无关(即使创建后未使用也会计费)。各规格的价格可以在创建 LeanDB 时或价格页面查看,扣费记录可在开发者中心的账单中查看。
MySQL 版本
目前 LeanDB 仅提供 MySQL 5.6 版本。
在线扩容
目前 LeanDB MySQL 不提供自助扩容的能力,如需扩容请提交工单联系我们的技术支持。
管理共享
可以使用控制台上的「管理共享」功能将 LeanDB 实例共享给其他应用,被共享的应用的 LeanDB 页面可能看到这个实例,相关的环境变量也会出现在其他应用的云引擎中。
在云引擎中使用
LeanDB 所在的应用的云引擎在部署时,会被注入几个包含 MySQL 连接信息的环境变量,包括:
MYSQL_HOST_<NAME>
MYSQL_PORT_<NAME>
MYSQL_ADMIN_USER_<NAME>
MYSQL_ADMIN_PASSWORD_<NAME>
其中 <NAME>
是你在创建 LeanDB 时为它指定的名字,如果你的 LeanDB 名为 MYRDB
的话,就会有名为 MYSQL_HOST_MYRDB
的环境变量(以及其他三个)。
- Node.js
- Python
- PHP
- Java
- .NET (C#)
在 Node.js 中你可以这样连接到 MySQL:
const mysql = require("mysql");
const Promise = require("bluebird");
const mysqlPool = Promise.promisifyAll(
mysql.createPool({
host: process.env["MYSQL_HOST_MYRDB"],
port: process.env["MYSQL_PORT_MYRDB"],
user: process.env["MYSQL_ADMIN_USER_MYRDB"],
password: process.env["MYSQL_ADMIN_PASSWORD_MYRDB"],
database: "test",
connectionLimit: 10,
})
);
mysqlPool
.queryAsync("SELECT 1 + 1 AS solution")
.then((rows) => {
console.log("The solution is", rows[0].solution);
})
.catch((err) => {
console.error(err);
});
- 你需要运行
npm install --save mysql bluebird
来安装上面代码中用到的依赖 - 更多的用法请参考 mysqljs/mysql 的文档
在 Python 中你可以这样连接到 MySQL:
import os
import mysql.connector
result = ''
host = os.environ['MYSQL_HOST_MYRDB']
port = os.environ['MYSQL_PORT_MYRDB']
user = os.environ['MYSQL_ADMIN_USER_MYRDB']
password = os.environ['MYSQL_ADMIN_PASSWORD_MYRDB']
try:
cnx = mysql.connector.connect(
user=user, password=password, database='test', host=host, port=port)
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("username or password error")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
cursor = cnx.cursor()
cursor.execute('SELECT 1 + 1 AS solution')
for row in cursor:
result = "The solution is {}".format(row[0])
cursor.close()
cnx.close()
- 上面用的是 MySQL 官方的 python driver,你需要在
requirements.txt
中列出这一依赖,例如:mysql-connector-python>=8.0.16,<9.0.0
- 更多的用法请参考 MySQL Connector/Python 文档
在 PHP 中你可以这样连接到 MySQL:
try {
$mysqlHost = getenv('MYSQL_HOST_MYRDB');
$mysqlPort = getenv('MYSQL_PORT_MYRDB');
$pdo = new PDO("mysql:host=$mysqlHost:$mysqlPort;dbname=test", getenv('MYSQL_ADMIN_USER_MYRDB'), getenv('MYSQL_ADMIN_PASSWORD_MYRDB'));
foreach($pdo->query('SELECT 1 + 1 AS solution') as $row) {
print "The solution is {$row['solution']}";
}
} catch (PDOException $e) {
print $e->getMessage();
}
- 更多的用法请参考 PDO 的文档
在 Java 中你可以这样连接到 MySQL:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
String host = System.getenv("MYSQL_HOST_MYRDB");
String port = System.getenv("MYSQL_PORT_MYRDB");
String user = System.getenv("MYSQL_ADMIN_USER_MYRDB");
String password = System.getenv("MYSQL_ADMIN_PASSWORD_MYRDB");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception ex) {
// 处理异常
}
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/test?" +
"user=" + user + "&password=" + password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT 1 + 1 AS solution");
resultSet.first();
System.out.format("The solution is %d", resultSet.getInt("solution"));
} catch (SQLException ex) {
// 处理异常
}
- 需要在
pom.xml
中加入 mysql connector 依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
- 更多的用法请参考 MySQL Connector/J 文档
在 .NET 中你可以这样连接到 MySQL:
string host = Environment.GetEnvironmentVariable("MYSQL_HOST_mysql");
string port = Environment.GetEnvironmentVariable("MYSQL_PORT_mysql");
string uid = Environment.GetEnvironmentVariable("MYSQL_ADMIN_USER_mysql");
string password = Environment.GetEnvironmentVariable("MYSQL_ADMIN_PASSWORD_mysql");
string connectionString = $"server={host};port={port};uid={uid};pwd={password};database=leancloud";
MySqlConnection conn = new MySqlConnection(connectionString);
conn.Open();
string sql = "SELECT * FROM hello";
MySqlCommand command = new MySqlCommand(sql, conn);
MySqlDataReader reader = command.ExecuteReader();
StringBuilder sb = new StringBuilder();
while (reader.Read()) {
sb.AppendLine($"{reader[0]} -- {reader[1]}");
}
Console.WriteLine(sb.ToString());
- 更多的用法请参考 MySQL Connector .NET 文档
管理数据
除了在云引擎中通过编程的方式访问 LeanDB,我们还提供了用于进行管理、调试或一次性数据操作的方式。
在线管理面板
为方便开发和调试,我们为开发者提供了一个 Web 界面来对 MySQL 进行管理,你可以在控制台上点击「管理员面板」链接来访问这个 Web 界面。
开发者可以在这个页面上进行 SQL 查询和更新,创建和管理数据库,创建和管理索引等操作。
使用命令行工具连接
使用 命令行工具 CLI 提供的 tds db shell
可以打开一个连接到云端 LeanDB 的交互式 shell,用于执行查询:
$ tds db shell mysqldb
Welcome to the MySQL monitor.
Your MySQL connection id is 3450564
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Database changed
mysql> insert into users set name = 'leancloud';
Query OK, 1 row affected (0.04 sec)
mysql> select * from users;
+------+-----------+
| id | name |
+------+-----------+
| 1 | zhenzhen |
| 2 | leancloud |
+------+-----------+
2 rows in set (0.06 sec)
使用 tds db proxy
可以将云端 LeanDB 导出到本地的一个端口,供本地的程序或图形化的数据库客户端连接:
$ tds db proxy myredis
[INFO] Now, you can connect myredis via [redis-cli -h 127.0.0.1 -a hsdt9wIAuKcTZmpg -p 5678]
保持这个终端运行(不要关闭),就可以在本地的 5678 端口访问到云端的 LeanDB 了。你可以使用本地的 GUI 客户端来浏览操作云端的 LeanDB。在使用 tds up
进行开发测试时,也可以使用这个功能连接到云端的 LeanDB,设置环境变量(来自前面 tds db proxy
的输出):
export REDIS_URL_myredis=redis://default:hsdt9wIAuKcTZmpg@127.0.0.1:5678
tds db
命令访问云端 LeanDB 实例仅用于本地开发和测试,连接会偶尔断开(部分客户端可以自动重连),请不要用于生产环境。