> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL

> 将 MySQL 的自定义事件同步到 OneSignal，基于用户行为触发自动化 Journey 和个性化消息活动。

export const PLATFORM_0 = "MySQL"

export const DATA_TYPE_0 = "event data"

export const COLUMN_HEADER_0 = "MySQL Column"

export const PROPERTIES_DESCRIPTION_0 = "Event properties as JSON"

## 概览

OneSignal + MySQL 集成可以将您的 MySQL 数据库中的自定义事件同步到 OneSignal，以基于用户行为触发自动化消息活动和 Journey。

MySQL 是一个广泛使用的开源关系型数据库管理系统，非常适合存储结构化事件数据，可为个性化消息活动提供支持。

## 要求

* 访问自定义事件（目前处于测试阶段）
* [升级账户计划](https://onesignal.com/pricing)（免费应用不可用）。

### MySQL 要求

* **MySQL Community 5.7** 或更高版本，或 **MariaDB** 的最新版本
* 包含结构化行为数据的 **事件表**
* 从 OneSignal 到您的 MySQL 实例的 **网络连接**
* 支持 **TLS v1.2** 或更高版本

***

## 设置

<Steps>
  <Step title="为 OneSignal 创建专用用户">
    创建一个具有只读权限的专用用户账户：

    ```sql theme={null}
    -- 创建能够使用密码登录的 census 用户
    CREATE USER CENSUS IDENTIFIED BY '<strong, unique password>';

    -- 授予对您的事件架构的只读访问权限
    GRANT SELECT ON <your_schema>.* TO CENSUS;
    ```

    <Info>
      如果您有多个包含事件数据的架构，请为每个架构重复 `GRANT SELECT` 语句。
    </Info>
  </Step>

  <Step title="配置 OneSignal 连接">
    在 OneSignal 中，前往 **数据 > 集成**，然后点击 **添加集成**。

    选择 **MySQL** 并提供您的连接详细信息：

    * **主机：** 您的 MySQL 服务器主机名
    * **端口：** MySQL 端口（通常为 3306）
    * **数据库：** 包含您的事件表的数据库名称
    * **用户名：** `CENSUS`
    * **密码：** 您在上面创建的密码
  </Step>

  <Step title="测试连接">
    点击 **测试连接** 以验证 OneSignal 可以成功连接到您的 MySQL 数据库并访问您的事件表。
  </Step>
</Steps>

***

### 事件数据映射

将您的 {PLATFORM_0} {DATA_TYPE_0} 映射到 OneSignal 的自定义事件格式：

| OneSignal 字段  | {COLUMN_HEADER_0} | 描述                         | 必需 |
| ------------- | ----------------- | -------------------------- | -- |
| `name`        | `event_name`      | 事件标识符                      | 是  |
| `external_id` | `user_id`         | 用户标识符                      | 是  |
| `timestamp`   | `event_timestamp` | 事件发生时间                     | 否  |
| `properties`  | `event_data`      | {PROPERTIES_DESCRIPTION_0} | 否  |

### 事件表模式示例

```sql theme={null}
CREATE TABLE user_events (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    event_data JSON,
    session_id VARCHAR(255),
    device_type VARCHAR(50)
);
```

### 表模式

直接选择您的事件表，OneSignal 将所有行同步为单独的事件。

### SQL 查询模式

编写自定义 SQL 查询来转换您的事件数据：

```sql theme={null}
-- 示例：近期高价值事件
SELECT
    event_name,
    user_id,
    created_at as timestamp,
    event_data as payload
FROM user_events
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
    AND JSON_EXTRACT(event_data, '$.value') > 100
ORDER BY created_at DESC;
```

***

## 高级网络配置

OneSignal 可以使用高级网络控制成功连接到 MySQL 实例，包括区域约束、IP 地址允许列表或 SSH 隧道。

OneSignal 支持使用 TLS 版本 1.2 及更高版本的 MySQL 以实现安全连接。

***

## 常见问题

### 支持哪些 MySQL 版本？

OneSignal 支持 MySQL Community 5.7 或更高版本，以及 MariaDB 的最新版本。

### 我可以连接到私有网络中的 MySQL 吗？

是的，OneSignal 支持 SSH 隧道和 IP 允许列表来连接私有网络或防火墙后的 MySQL 实例。

***
