在 Laravel 12 中使用 ‌阿里云 PolarDB‌ 作为数据库

在 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,关键步骤:

  1. 配置 .env 指向 PolarDB 实例地址。
  2. 优化读写分离和连接池。
  3. 利用 PolarDB 的弹性扩展特性提升性能。

如果需要针对 PolarDB PostgreSQL 版 的配置,只需将驱动改为 pgsql,其他步骤类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值