在 Laravel 12 中使用 阿里云 PolarDB(兼容 MySQL/PostgreSQL 协议)作为数据库,可以通过以下步骤完成配置和优化。PolarDB 是阿里云自研的云原生数据库,支持高并发、弹性扩展,且完全兼容开源数据库(MySQL 或 PostgreSQL),因此 Laravel 可直接通过标准驱动连接。
1. 选择 PolarDB 兼容模式
PolarDB 提供两种兼容模式,根据你的需求选择:
- PolarDB MySQL 版(推荐,兼容 MySQL 5.6/5.7/8.0)
- PolarDB PostgreSQL 版(兼容 PostgreSQL 11+)
以下以 PolarDB MySQL 版 为例(PostgreSQL 版配置类似,只需替换驱动为 pgsql
)。
2. 配置 Laravel 连接 PolarDB
(1) 修改 .env
文件
配置 PolarDB 的连接信息(从阿里云控制台获取):
DB_CONNECTION=mysql
DB_HOST=your_polardb_endpoint # PolarDB 实例地址(如:pc-xxx.rwlb.rds.aliyuncs.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',
'url' => env('DATABASE_URL'),
'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' => null,
'options' => extension_loaded('pdo_mysql')
? [PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA')]
: [],
],
3. 测试数据库连接
(1) 命令行测试
php artisan db:show
或通过 Tinker 执行原生 SQL:
php artisan tinker
>>> DB::select('SELECT version()');
(2) 检查 PolarDB 性能
PolarDB 支持读写分离和弹性扩展,可通过以下方式验证:
// 写入测试
DB::table('test')->insert(['name' => 'Laravel']);
// 读取测试
DB::table('test')->get();
4. 优化 PolarDB 性能
(1) 启用读写分离
PolarDB 默认提供读写分离功能,只需在 Laravel 中配置多个连接:
// config/database.php
'mysql' => [
'read' => [
'host' => 'your_polardb_read_endpoint', # 只读地址(从阿里云控制台获取)
],
'write' => [
'host' => 'your_polardb_write_endpoint', # 主地址
],
// 其他配置...
],
(2) 连接池配置
PolarDB 建议使用连接池(如 ProxySQL)避免短连接开销。可在 Laravel 中调整:
'options' => [
PDO::ATTR_PERSISTENT => true, // 启用持久连接
PDO::ATTR_TIMEOUT => 30,
],
(3) 使用 Laravel 缓存加速
对高频查询结果缓存:
$users = Cache::remember('active_users', 3600, function () {
return DB::table('users')->where('active', 1)->get();
});
5. 数据迁移与模型操作
(1) 创建迁移文件
php artisan make:migration create_posts_table
编辑迁移文件(如 database/migrations/2025_05_12_create_posts_table.php
):
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
$table->index('title'); // 为 PolarDB 添加索引
});
}
public function down()
{
Schema::dropIfExists('posts');
}
};
执行迁移:
php artisan migrate
(2) 使用 Eloquent 模型
php artisan make:model Post
模型会自动关联 PolarDB 的 posts
表:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
6. 注意事项
(1) 安全配置
- SSL 加密:从阿里云控制台下载 CA 证书,并在 Laravel 中启用:
MYSQL_ATTR_SSL_CA=/path/to/aliyun-rds-ca.pem
- 白名单设置:在 PolarDB 控制台添加 Laravel 服务器的 IP 到白名单。
(2) 备份与监控
- 自动备份:通过阿里云控制台设置 PolarDB 的自动备份策略。
- 慢查询分析:使用 PolarDB 的
Performance Insights
功能优化 SQL。
(3) 兼容性问题
- 如果从本地 MySQL 迁移到 PolarDB,需检查:
- 存储引擎(建议 InnoDB)。
- 自增字段和字符集(PolarDB 默认
utf8mb4
)。
总结
Laravel 12 通过标准 MySQL 驱动即可无缝接入 PolarDB,关键步骤:
- 配置
.env
指向 PolarDB 实例地址。 - 优化读写分离和连接池。
- 利用 PolarDB 的弹性扩展特性提升性能。
如果需要针对 PolarDB PostgreSQL 版 的配置,只需将驱动改为 pgsql
,其他步骤类似。