Files
firefrost-operations-manual/docs/services/luckperms-mysql-database.md
Claude 43b8d3b01b docs: Add Vaultwarden, LuckPerms MySQL, and Cloudflare proxy configurations
- Vaultwarden SMTP configured and tested
- Holly and Meg invited to Vaultwarden
- Firefrost Gaming organization created
- LuckPerms MySQL database ready (credentials stored in Vaultwarden)
- 11 web services added to Cloudflare proxy for DDoS protection
- vault.firefrostgaming.com SSL warning resolved
- Comprehensive troubleshooting guides included

All services documented and operational. Ready for Holly's mod deployment.
2026-03-27 02:23:33 +00:00

8.3 KiB

LuckPerms MySQL Database Setup

Date: 2026-03-27
Server: Command Center (63.143.34.217)
Database: luckperms
Purpose: Centralized permission storage for all 13 game servers


Database Configuration

MySQL Installation

Installed: 2026-03-27
Version: MySQL 8.0 (Ubuntu 24.04)
Service: systemd (mysql.service)

Installation Commands:

apt update
apt install mysql-server -y
systemctl start mysql
systemctl enable mysql
mysql_secure_installation

Secure Installation Settings:

  • Password validator: Not enabled (allows custom passwords)
  • Remove anonymous users: Yes
  • Disallow root login remotely: Yes
  • Remove test database: Yes
  • Reload privilege tables: Yes

Root Access:

  • MySQL 8.0 uses auth_socket plugin by default
  • Root can login via: sudo mysql (no password needed)
  • Root cannot login remotely (secure by default)

LuckPerms Database

Database Details

  • Name: luckperms
  • Character Set: utf8mb4
  • Collation: utf8mb4_unicode_ci
  • Created: 2026-03-27

User Credentials

  • Username: luckperms
  • Password: Firefrost1234!!
  • Host: % (allows connections from any IP)
  • Privileges: ALL on luckperms.* database

Creation Commands

-- Access MySQL as root
sudo mysql

-- Create database
CREATE DATABASE luckperms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Create user
CREATE USER 'luckperms'@'%' IDENTIFIED BY 'Firefrost1234!!';

-- Grant permissions
GRANT ALL PRIVILEGES ON luckperms.* TO 'luckperms'@'%';
FLUSH PRIVILEGES;

-- Verify
SHOW DATABASES;
SELECT User, Host FROM mysql.user WHERE User='luckperms';

-- Exit
exit

Connection Details

For LuckPerms Configuration

storage-method: MySQL

data:
  address: 63.143.34.217:3306
  database: luckperms
  username: luckperms
  password: Firefrost1234!!

OR in config format:

storage-method=MySQL
data.address=63.143.34.217:3306
data.database=luckperms
data.username=luckperms
data.password=Firefrost1234!!

Security Considerations

Why Separate Database?

Isolated from Pterodactyl database for:

  1. Security Isolation

    • Pterodactyl database contains sensitive panel data
    • LuckPerms database contains game permissions
    • Compromise of one doesn't affect the other
  2. Performance

    • Pterodactyl handles panel queries
    • LuckPerms handles thousands of permission checks per second across 13 servers
    • Separation prevents performance degradation
  3. Backup/Recovery

    • Can backup game permissions separately
    • Can restore/reset without affecting infrastructure
    • Independent maintenance windows
  4. Best Practice

    • Industry standard: one database per application
    • Prevents dependency conflicts
    • Easier troubleshooting

Network Security

MySQL listens on:

  • Port: 3306 (default)
  • Bind address: 0.0.0.0 (all interfaces - allows remote connections)

Firewall considerations:

  • TX1 Dallas (38.68.14.26) needs access
  • NC1 Charlotte (216.239.104.130) needs access
  • Ensure UFW/iptables allows connections from these IPs

Check current firewall status:

ufw status
# OR
iptables -L -n | grep 3306

If needed, allow specific IPs:

ufw allow from 38.68.14.26 to any port 3306
ufw allow from 216.239.104.130 to any port 3306

Game Server Integration

Servers Using This Database

All 13 Firefrost Gaming servers connect to this central MySQL database:

TX1 Dallas Servers (38.68.14.26):

  1. foundry.firefrostgaming.com
  2. rad2.firefrostgaming.com
  3. stoneblock4.firefrostgaming.com
  4. vanilla.firefrostgaming.com
  5. createplus.firefrostgaming.com
  6. arseclectica.firefrostgaming.com

NC1 Charlotte Servers (216.239.104.130):

  1. reclamation.firefrostgaming.com
  2. society.firefrostgaming.com
  3. emberproject.firefrostgaming.com
  4. minecolonies.firefrostgaming.com
  5. homestead.firefrostgaming.com
  6. emcsubterratech.firefrostgaming.com
  7. atm10.firefrostgaming.com

Configuration Per Server

Each server's LuckPerms config at /config/luckperms/luckperms.conf:

storage-method = mysql

data {
  address = "63.143.34.217:3306"
  database = "luckperms"
  username = "luckperms"
  password = "Firefrost1234!!"
  
  # Connection pool settings
  pool-settings {
    maximum-pool-size = 10
    minimum-idle = 10
    maximum-lifetime = 1800000
    keepalive-time = 0
    connection-timeout = 5000
  }
}

Deployment Status

Implementation Plan

Phase 1: Prerequisites (COMPLETE )

  • MySQL server installed on Command Center
  • Database created
  • User credentials configured
  • Credentials stored in Vaultwarden

Phase 2: Mod Deployment (IN PROGRESS )

  • Responsible: Holly (unicorn20089)
  • Status: Delegated 2026-03-27
  • Guide Provided: docs/guides/server-side-mod-deployment-guide.md
  • Tasks:
    • Download required mods per server Minecraft version
    • Upload mods to each server via Pterodactyl Panel
    • Configure LuckPerms MySQL connection
    • Test each server
    • Repeat for all 13 servers

Phase 3: Testing (PENDING)

  • Verify all servers connect to MySQL
  • Test permission sync across servers
  • Verify rank system works

Maintenance

Backup Procedures

Manual Backup:

# On Command Center
mysqldump -u luckperms -p luckperms > luckperms-backup-$(date +%Y%m%d).sql

Restore from Backup:

mysql -u luckperms -p luckperms < luckperms-backup-YYYYMMDD.sql

Automated Backup (Recommended):

# Add to crontab
0 2 * * * mysqldump -u luckperms -p'Firefrost1234!!' luckperms | gzip > /root/backups/luckperms-$(date +\%Y\%m\%d).sql.gz

Monitoring

Check database size:

sudo mysql -e "SELECT table_schema AS 'Database', ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.tables WHERE table_schema = 'luckperms' GROUP BY table_schema;"

Check active connections:

sudo mysql -e "SHOW PROCESSLIST;" | grep luckperms

Check table status:

sudo mysql luckperms -e "SHOW TABLES;"
sudo mysql luckperms -e "SELECT COUNT(*) FROM luckperms_players;"
sudo mysql luckperms -e "SELECT COUNT(*) FROM luckperms_permissions;"

Troubleshooting

Connection Refused

Symptoms: Game server can't connect to MySQL

Checks:

  1. MySQL service running: systemctl status mysql
  2. MySQL listening on 3306: netstat -tlnp | grep 3306
  3. Firewall allows connections: ufw status
  4. Credentials correct in server config

Solution:

# Ensure MySQL is running
systemctl start mysql

# Check bind address (should be 0.0.0.0 or specific IP)
grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf

# If bind-address is 127.0.0.1, change to 0.0.0.0
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Change: bind-address = 0.0.0.0
sudo systemctl restart mysql

Access Denied for User

Symptoms: "Access denied for user 'luckperms'@'host'"

Checks:

  1. Password correct
  2. User has permissions
  3. Host wildcard allows connection

Solution:

-- Verify user exists and host is '%'
SELECT User, Host FROM mysql.user WHERE User='luckperms';

-- Re-grant permissions if needed
GRANT ALL PRIVILEGES ON luckperms.* TO 'luckperms'@'%';
FLUSH PRIVILEGES;

-- If still failing, recreate user
DROP USER 'luckperms'@'%';
CREATE USER 'luckperms'@'%' IDENTIFIED BY 'Firefrost1234!!';
GRANT ALL PRIVILEGES ON luckperms.* TO 'luckperms'@'%';
FLUSH PRIVILEGES;

Slow Queries

Symptoms: Permission checks lag, server TPS drops

Diagnosis:

-- Enable slow query log
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';

-- Check slow queries
sudo tail -f /var/log/mysql/slow-query.log

Solutions:

  1. Increase connection pool size in LuckPerms config
  2. Optimize MySQL configuration
  3. Add database indexes (LuckPerms handles this automatically)
  4. Upgrade server hardware if needed


Last Updated: 2026-03-27
Documented By: The Verifier (Chronicler #42)
Status: Database ready, awaiting mod deployment by Holly