Bỏ qua nội dung

Cơ sở dữ liệu

File database-config.yml cấu hình kết nối database. SimpPay hỗ trợ H2 (embedded) và MySQL/MariaDB.

Vị trí file

plugins/SimpPay/database-config.yml

Chọn database

H2 Database - Embedded database, không cần cài đặt thêm

Ưu điểm:

  • ✅ Không cần MySQL server
  • ✅ Setup tức thì, zero configuration
  • ✅ Phù hợp cho server < 100 players
  • ✅ Backup dễ dàng (chỉ cần copy file)

Nhược điểm:

  • ⚠️ Không phù hợp cho server lớn
  • ⚠️ Không thể truy vấn từ bên ngoài
  • ⚠️ Khó scale khi traffic cao

Cấu hình H2

# SimpPay Database Configuration
# Made by typical.smc
# Database type: H2 hoặc MYSQL
type: "H2"
# H2 Configuration
h2:
# File path (relative to plugin folder)
file-path: "database"
# Connection pool settings
pool:
maximum-pool-size: 10
minimum-idle: 2
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000

Chi tiết cấu hình H2

TrườngMô tảMặc định
file-pathTên file database (không cần .mv.db)"database"
maximum-pool-sizeSố connection tối đa10
minimum-idleSố connection idle tối thiểu2
connection-timeoutTimeout khi lấy connection (ms)30000
idle-timeoutTimeout cho idle connection (ms)600000
max-lifetimeThời gian sống tối đa của connection (ms)1800000

Cấu hình MySQL

# SimpPay Database Configuration
# Made by typical.smc
# Database type: H2 hoặc MYSQL
type: "MYSQL"
# MySQL Configuration
mysql:
# Database connection
host: "localhost"
port: 3306
database: "simppay"
username: "root"
password: "your_password_here"
# Connection pool settings
pool:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
# Advanced settings
properties:
useSSL: false
autoReconnect: true
characterEncoding: "utf8mb4"
useUnicode: true

Chi tiết cấu hình MySQL

TrườngMô tảMặc định
hostMySQL server hostname"localhost"
portMySQL server port3306
databaseTên database"simppay"
usernameMySQL username"root"
passwordMySQL password""
maximum-pool-sizeSố connection tối đa20
minimum-idleSố connection idle tối thiểu5
useSSLBật SSL connectionfalse
autoReconnectTự động reconnect khi mất kết nốitrue
characterEncodingCharacter encoding"utf8mb4"

Setup MySQL

Kết nối vào MySQL và tạo database:

CREATE DATABASE simppay CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Database Schema

SimpPay tự động tạo các bảng sau:

sp_player

Lưu thông tin người chơi:

ColumnTypeMô tả
uuidVARCHAR(36)UUID người chơi (PK)
usernameVARCHAR(16)Username hiện tại
created_atTIMESTAMPThời gian tạo

card_payment

Lưu giao dịch thẻ cào:

ColumnTypeMô tả
idBIGINTID giao dịch (PK, auto)
player_uuidVARCHAR(36)UUID người chơi
order_idVARCHAR(255)Mã đơn hàng
card_typeVARCHAR(50)Loại thẻ (VIETTEL, …)
serialVARCHAR(255)Serial thẻ
pinVARCHAR(255)PIN thẻ
amountBIGINTMệnh giá (VNĐ)
statusVARCHAR(50)Trạng thái
gatewayVARCHAR(50)Cổng thanh toán
created_atTIMESTAMPThời gian tạo

banking_payment

Lưu giao dịch QR banking:

ColumnTypeMô tả
idBIGINTID giao dịch (PK, auto)
player_uuidVARCHAR(36)UUID người chơi
order_idVARCHAR(255)Mã đơn hàng
amountBIGINTSố tiền (VNĐ)
statusVARCHAR(50)Trạng thái
gatewayVARCHAR(50)Cổng thanh toán
bank_nameVARCHAR(100)Tên ngân hàng
created_atTIMESTAMPThời gian tạo

player_data

Lưu tổng nạp theo kỳ:

ColumnTypeMô tả
idBIGINTID (PK, auto)
player_uuidVARCHAR(36)UUID người chơi
periodVARCHAR(20)Kỳ (DAILY/WEEKLY/…)
total_amountBIGINTTổng nạp (VNĐ)
card_amountBIGINTTổng nạp thẻ
bank_amountBIGINTTổng nạp bank
period_startTIMESTAMPĐầu kỳ
updated_atTIMESTAMPCập nhật lần cuối

player_streak_payment

Lưu streak nạp liên tiếp:

ColumnTypeMô tả
player_uuidVARCHAR(36)UUID người chơi (PK)
current_streakINTStreak hiện tại
best_streakINTStreak tốt nhất
last_payment_dateDATENgày nạp cuối

milestone_completion

Lưu milestone đã hoàn thành:

ColumnTypeMô tả
idBIGINTID (PK, auto)
player_uuidVARCHAR(36)UUID người chơi (NULL = server)
milestone_nameVARCHAR(255)Tên milestone
milestone_typeVARCHAR(20)Loại (PLAYER/SERVER)
periodVARCHAR(20)Kỳ (DAILY/WEEKLY/…)
completed_atTIMESTAMPThời gian hoàn thành

leaderboard_cache

Cache bảng xếp hạng:

ColumnTypeMô tả
idBIGINTID (PK, auto)
periodVARCHAR(20)Kỳ (DAILY/WEEKLY/…)
rankINTHạng
player_uuidVARCHAR(36)UUID người chơi
player_nameVARCHAR(16)Tên người chơi
amountBIGINTTổng nạp
cached_atTIMESTAMPThời gian cache

Connection Pooling

SimpPay sử dụng HikariCP cho connection pooling. Tối ưu settings:

Server nhỏ (< 50 players)

pool:
maximum-pool-size: 10
minimum-idle: 2

Server trung bình (50-200 players)

pool:
maximum-pool-size: 20
minimum-idle: 5

Server lớn (> 200 players)

pool:
maximum-pool-size: 50
minimum-idle: 10

Backup & Restore

Backup H2

Terminal window
# Copy file database
cp plugins/SimpPay/database.mv.db backups/database-$(date +%Y%m%d).mv.db

Backup MySQL

Terminal window
# Dump database
mysqldump -u simppay -p simppay > backups/simppay-$(date +%Y%m%d).sql

Restore MySQL

Terminal window
# Restore từ backup
mysql -u simppay -p simppay < backups/simppay-20260214.sql

Migration H2 → MySQL

  1. Export data từ H2

    Dùng tool như H2 Console để export sang SQL.

  2. Import vào MySQL

    Terminal window
    mysql -u simppay -p simppay < h2-export.sql
  3. Đổi config

    Sửa database-config.yml:

    type: "MYSQL"
  4. Restart server

Troubleshooting

Connection timeout

Too many connections

Character encoding issues

Xem thêm