在 Laravel 12 中使用 腾讯云 TDSQL(兼容 MySQL/PostgreSQL 协议)作为数据库,可以通过以下步骤完成配置和优化。TDSQL 是腾讯云自研的分布式数据库,支持金融级高一致性和弹性扩展,完全兼容开源数据库协议(MySQL 或 PostgreSQL),因此 Laravel 可直接通过标准驱动连接。
1. 选择 TDSQL 兼容模式
TDSQL 提供两种兼容模式,根据需求选择:
- TDSQL MySQL 版(推荐,兼容 MySQL 5.7/8.0)
- TDSQL PostgreSQL 版(兼容 PostgreSQL 10+)
以下以 TDSQL MySQL 版 为例(PostgreSQL 版配置类似,替换驱动为 pgsql
即可)。
2. 配置 Laravel 连接 TDSQL
(1) 修改 .env
文件
配置 TDSQL 的连接信息(从腾讯云控制台获取):
DB_CONNECTION=mysql
DB_HOST=your_tdsql_proxy_address # TDSQL 代理地址(如:tdsql-xxxxxx.proxy.tencentcdb.com)
DB_PORT=3306 # 默认端口(MySQL)
DB_DATABASE=your_database # 数据库名
DB_USERNAME=your_username # 账号(建议使用主账号)
DB_PASSWORD=your_password # 密码
(2) 检查 config/database.php
确保 mysql
配置项与 .env
一致,并优化连接参数:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => 'InnoDB', // TDSQL 推荐使用 InnoDB
'options' => [
PDO::ATTR_PERSISTENT => true, // 启用持久连接,减少短连接开销
PDO::ATTR_TIMEOUT => 30, // 超时设置
],
],
3. 测试数据库连接
(1) 命令行测试
php artisan db:show
或通过 Tinker 执行原生 SQL:
php artisan tinker
>>> DB::select('SELECT version()');
(2) 验证分布式事务
TDSQL 支持分布式事务(XA),可通过 Laravel 测试:
DB::transaction(function () {
DB::table('orders')->insert(...);
DB::table('payments')->insert(...); // 跨分片事务
});
4. 优化 TDSQL 性能
(1) 读写分离配置
TDSQL 默认提供读写分离代理地址,在 Laravel 中配置:
// config/database.php
'mysql' => [
'read' => [
'host' => 'your_tdsql_read_proxy', // 只读代理地址
],
'write' => [
'host' => 'your_tdsql_write_proxy', // 读写代理地址
],
// 其他配置...
],
(2) 分片表支持
如果使用 TDSQL 分片功能,需在模型中指定分片键:
class Order extends Model
{
protected $shardKey = 'user_id'; // 分片字段
}
并通过原生 SQL 操作分片:
DB::statement("SHOW NODES"); // 查看分片节点
(3) 连接池建议
TDSQL 对短连接敏感,建议:
- 使用连接池中间件(如 ProxySQL)。
- 在 Laravel 中调整
config/database.php
的options
:'options' => [ PDO::ATTR_PERSISTENT => true, PDO::ATTR_TIMEOUT => 30, ],
5. 数据迁移与模型操作
(1) 创建迁移文件
php artisan make:migration create_orders_table
编辑迁移文件(如 2025_05_12_create_orders_table.php
):
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id'); // 分片键
$table->decimal('amount', 10, 2);
$table->timestamps();
$table->index('user_id'); // 为分片字段添加索引
});
执行迁移:
php artisan migrate
(2) 使用 Eloquent 模型
php artisan make:model Order
模型自动关联 TDSQL 表:
class Order extends Model
{
protected $fillable = ['user_id', 'amount'];
}
6. 注意事项
(1) 安全配置
- SSL 加密:从腾讯云控制台下载 CA 证书,并在 Laravel 中启用:
MYSQL_ATTR_SSL_CA=/path/to/tencent-ca.pem
- IP 白名单:在 TDSQL 控制台添加 Laravel 服务器 IP。
(2) 备份与监控
- 自动备份:通过腾讯云控制台设置 TDSQL 的备份策略。
- 慢查询分析:使用 TDSQL 的「性能监控」功能优化 SQL。
(3) 兼容性检查
- 从本地 MySQL 迁移到 TDSQL 时,需验证:
- 存储引擎(仅支持 InnoDB)。
- 自增字段和字符集(默认
utf8mb4
)。
总结
Laravel 12 通过标准 MySQL 驱动即可连接 TDSQL,关键步骤:
- 配置
.env
指向 TDSQL 代理地址。 - 优化读写分离和分片键(如需分布式扩展)。
- 结合 TDSQL 的金融级特性(如 XA 事务)设计业务逻辑。
如果需要针对 TDSQL PostgreSQL 版 的配置,只需替换驱动为 pgsql
,其他步骤类似。