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

# MySQL

> Kết nối cơ sở dữ liệu MySQL với CloudThinker để phân tích truy vấn, giám sát hiệu suất và tối ưu cơ sở dữ liệu

Kết nối cơ sở dữ liệu MySQL của bạn để [Tony](/vi/guide/agents/tony) (Database Engineer) có thể phân tích truy vấn, tối ưu hiệu suất và giám sát sức khỏe cơ sở dữ liệu.

## Nền tảng được hỗ trợ

| Nền tảng                     | Hỗ trợ                 |
| ---------------------------- | ---------------------- |
| **MySQL tự host**            | 5.7, 8.0, 8.1+         |
| **MariaDB**                  | 10.x                   |
| **AWS RDS MySQL**            | Tất cả phiên bản       |
| **AWS Aurora MySQL**         | Tất cả phiên bản       |
| **Google Cloud SQL**         | Tất cả phiên bản MySQL |
| **Azure Database for MySQL** | Flexible Server        |

## Điều kiện tiên quyết

* Một instance MySQL có thể tiếp cận từ CloudThinker qua mạng.
* Quyền admin hoặc root để tạo người dùng riêng và cấp đặc quyền.
* Performance Schema được bật (mặc định trong MySQL 5.7+; xác minh trước khi kết nối).

## Thiết lập

<Steps>
  <Step title="Kết nối với tư cách root">
    Kết nối tới MySQL với tư cách root hoặc admin:

    ```bash theme={null}
    mysql -h your-host -u root -p
    ```
  </Step>

  <Step title="Tạo người dùng chỉ đọc">
    Tạo người dùng CloudThinker:

    ```sql theme={null}
    CREATE USER 'cloudthinker_readonly'@'%' IDENTIFIED BY 'your-secure-password';
    ```
  </Step>

  <Step title="Cấp quyền đọc">
    Cấp đặc quyền SELECT và giám sát:

    ```sql theme={null}
    GRANT SELECT ON *.* TO 'cloudthinker_readonly'@'%';
    GRANT SHOW DATABASES ON *.* TO 'cloudthinker_readonly'@'%';
    GRANT PROCESS ON *.* TO 'cloudthinker_readonly'@'%';
    ```
  </Step>

  <Step title="Cấp quyền truy cập Performance Schema">
    Bắt buộc để phân tích truy vấn:

    ```sql theme={null}
    GRANT SELECT ON performance_schema.* TO 'cloudthinker_readonly'@'%';
    FLUSH PRIVILEGES;
    ```
  </Step>

  <Step title="Xác minh Performance Schema được bật">
    ```sql theme={null}
    SHOW VARIABLES LIKE 'performance_schema';
    -- Should return: ON
    ```

    Nếu bị tắt, thêm vào `my.cnf` và khởi động lại:

    ```ini theme={null}
    [mysqld]
    performance_schema = ON
    ```
  </Step>

  <Step title="Cấu hình truy cập mạng">
    Đảm bảo CloudThinker có thể tiếp cận cơ sở dữ liệu:

    * Thêm IP CloudThinker vào security group hoặc firewall
    * Với RDS: bật public access hoặc dùng VPC peering
  </Step>

  <Step title="Thêm kết nối trong CloudThinker">
    Điều hướng đến **Connections → MySQL** và nhập:

    * **Host**: hostname hoặc IP cơ sở dữ liệu
    * **Port**: cổng cơ sở dữ liệu (mặc định: `3306`)
    * **Database**: tên cơ sở dữ liệu
    * **Username**: `cloudthinker_readonly`
    * **Password**: mật khẩu bạn đặt ở trên
    * **SSL**: bật (khuyến nghị)

    Nhấn **Connect**. CloudThinker hiển thị trạng thái **Connected** khi thành công.
  </Step>
</Steps>

## Chi tiết kết nối

| Trường                 | Mô tả                                                | Mặc định |
| ---------------------- | ---------------------------------------------------- | -------- |
| **Host**               | Hostname hoặc IP cơ sở dữ liệu                       | —        |
| **Port**               | Cổng MySQL                                           | `3306`   |
| **Database**           | Tên cơ sở dữ liệu                                    | —        |
| **Username**           | Người dùng riêng, ví dụ: `cloudthinker_readonly`     | —        |
| **Password**           | Mật khẩu người dùng                                  | —        |
| **SSL**                | Bật mã hóa SSL/TLS                                   | Bật      |
| **Connection timeout** | Giây chờ kết nối                                     | `10`     |
| **Read timeout**       | Thời gian chờ kết quả truy vấn tối đa tính bằng giây | `30`     |

Định dạng connection string:

```
mysql://cloudthinker_readonly:your-secure-password@your-host:3306/database-name
```

## Quyền bắt buộc

### Tối thiểu

```sql theme={null}
GRANT SELECT ON your_database.* TO 'cloudthinker_readonly'@'%';
GRANT PROCESS ON *.* TO 'cloudthinker_readonly'@'%';
```

### Khuyến nghị (phân tích toàn diện)

```sql theme={null}
-- All of the above, plus:
GRANT SELECT ON performance_schema.* TO 'cloudthinker_readonly'@'%';
GRANT SELECT ON mysql.* TO 'cloudthinker_readonly'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'cloudthinker_readonly'@'%';
```

<Tip>
  Bắt đầu với các grant tối thiểu. Thêm `performance_schema` và `REPLICATION CLIENT` để mở khóa dữ liệu slow query và giám sát replication.
</Tip>

## Khả năng của agent

Sau khi kết nối, Tony có thể:

| Khả năng                 | Mô tả                                                       |
| ------------------------ | ----------------------------------------------------------- |
| **Phân tích truy vấn**   | Xác định slow query từ slow query log và Performance Schema |
| **Khuyến nghị index**    | Tìm index còn thiếu, xác định index dư thừa                 |
| **Metrics hiệu suất**    | Giám sát kết nối, buffer pool và query cache                |
| **Thống kê bảng**        | Phân tích kích thước bảng, phân mảnh và trạng thái engine   |
| **Giám sát replication** | Kiểm tra trạng thái replica, lag và lỗi                     |

### Xác minh kết nối

```text theme={null}
@tony #report check MySQL connection health and show current active sessions
```

### Ví dụ prompt

```text theme={null}
@tony #report analyze slow queries on the production MySQL instance
@tony #recommend find missing indexes for high-frequency queries
@tony #dashboard show buffer pool usage and connection statistics
```

## Khắc phục sự cố

<Accordion title="Connection refused">
  * Xác minh host và port chính xác
  * Kiểm tra security group hoặc firewall cho phép IP CloudThinker
  * Với RDS: đảm bảo "Publicly accessible" được bật hoặc dùng VPC peering
  * Xác nhận MySQL đang lắng nghe trên interface đúng (`bind-address` trong `my.cnf`)
</Accordion>

<Accordion title="Access denied">
  * Xác minh username và password chính xác
  * Kiểm tra người dùng có đúng host specification (`'user'@'%'` so với `'user'@'localhost'`)
  * Đảm bảo lệnh `GRANT` đã được thực hiện sau `FLUSH PRIVILEGES`
</Accordion>

<Accordion title="Performance Schema bị tắt">
  * Kiểm tra bằng: `SHOW VARIABLES LIKE 'performance_schema';`
  * Bật trong `my.cnf` và khởi động lại MySQL
  * Với RDS: sửa parameter group và reboot instance
</Accordion>

<Accordion title="Thiếu dữ liệu slow query">
  * Bật slow query log: `SET GLOBAL slow_query_log = 'ON';`
  * Đặt ngưỡng: `SET GLOBAL long_query_time = 1;`
  * Với RDS: sửa parameter group
</Accordion>

## Bảo mật

* **Quyền tối thiểu** — chỉ cấp các quyền mà agent cần cho trường hợp sử dụng của bạn; bắt đầu với quyền chỉ đọc và mở rộng sau.
* **Chỉ đọc theo mặc định** — sử dụng thông tin xác thực chỉ đọc trừ khi bạn muốn agent thực hiện thay đổi qua kết nối này.
* **Xoay vòng thông tin xác thực** — xoay vòng khóa và token theo lịch trình thông thường của bạn; CloudThinker sẽ lấy giá trị mới khi bạn cập nhật kết nối.
* **Thu hồi khi bàn giao** — xóa thông tin xác thực tại nhà cung cấp khi bạn xóa một kết nối hoặc khi đồng nghiệp rời nhóm.

- **Bắt buộc SSL** — luôn bật SSL để mã hóa dữ liệu truyền tải.
- **Grant tối thiểu** — chỉ cấp `SELECT` cho người dùng CloudThinker; không bao giờ cấp quyền ghi.

## Liên quan

<CardGroup cols={2}>
  <Card title="Tony Agent" icon="database" href="/vi/guide/agents/tony">
    Agent tối ưu cơ sở dữ liệu
  </Card>

  <Card title="Kết nối PostgreSQL" icon="https://mintcdn.com/cloudthinker/aLd-ttc-SCW-aFky/images/icons/postgresql.svg?fit=max&auto=format&n=aLd-ttc-SCW-aFky&q=85&s=8bb2ac033d0a2ccbef51154a76e1e819" href="/vi/guide/connections/postgresql" width="24" height="24" data-path="images/icons/postgresql.svg">
    Thiết lập tương tự cho cơ sở dữ liệu PostgreSQL
  </Card>
</CardGroup>
