Every domain hosted on WinWinHost includes an integrated Database Manager for provisioning relational databases, isolating application credentials, and managing connection permissions. This guide walks through the 7-step visual database setup inside the WinWinHost control panel alongside production MySQL 8.0 / MariaDB engineering best practices—covering utf8mb4_0900_ai_ci Unicode collations, least-privilege SQL grants, InnoDB buffer pool tuning, and non-locking online backups.
Part 1: 7-Step Visual Control Panel Database Creation Walkthrough
Whether you are deploying a custom Node.js, PHP, or Python application on WinWinHost Unlimited Web Hosting or Managed WordPress, follow these seven steps to initialize a new MySQL database and bind a dedicated user account:
1. Select Your Domain from the Domains Menu
In the Domains section of your WinWinHost control panel, click on the domain name where your application is hosted:
2. Review Domain Properties & Management Icons
The domain overview screen displays all active services, storage quotas, and management modules for the selected domain:
3. Open the Database Manager
Click on the Database Manager icon to view existing relational databases and user accounts tied to your domain:
4. Click Add New Database
Click the Add New button in the top toolbar to initialize a new database schema:
5. Choose the MySQL Database Engine & Name
Select MySQL Database from the engine dropdown, enter a descriptive snake_case schema name (for example, app_production), and click Save:
6. Add a Dedicated Database User
Once the schema is provisioned, click Add New under the Database Users panel to create an isolated credential pair for your web application:
7. Assign a Strong Password & Save
Enter your database username, generate a high-entropy password (at least 24 alphanumeric characters), confirm it, and click Save. Your database is immediately ready for application connections on 127.0.0.1:3306:
Part 2: Choosing Character Sets, Collations & Storage Engines in MySQL 8.0
Legacy MySQL installations defaulted to latin1 or 3-byte utf8mb3, which silently truncated 4-byte UTF-8 sequences such as modern symbols, mathematical notation, and international CJK characters. All new databases on WinWinHost use full 4-byte utf8mb4 encoding with the InnoDB transactional storage engine:
| Configuration Parameter | Recommended Production Default | Legacy / Deprecated Setting | Technical Rationale |
|---|---|---|---|
| Character Set | utf8mb4 (1–4 bytes per character) |
utf8 / utf8mb3 / latin1 |
Full Unicode compliance including 4-byte supplementary planes without truncation errors |
| Collation | utf8mb4_0900_ai_ci (or utf8mb4_unicode_ci) |
utf8_general_ci |
Implements Unicode Collation Algorithm (UCA) 9.0.0 for accurate multilingual sorting |
| Storage Engine | InnoDB |
MyISAM |
Provides ACID transactions, row-level locking, foreign key constraints, and crash recovery |
| Bind Address | 127.0.0.1 (Loopback / Unix Socket) |
0.0.0.0 (Public Internet) |
Prevents external port 3306 brute-force scanning; remote admin uses SSH port forwarding |
Part 3: CLI Provisioning & Principle of Least Privilege SQL Grants
If you manage your own MySQL 8.0 instance on a Dedicated KVM Slice or consult with our Managed MySQL Database Consulting team, never connect web applications as the administrative root user. Instead, scope application users strictly to 127.0.0.1 / localhost with only the DML/DDL privileges required for runtime execution:
-- 1. Create schema with explicit 4-byte UTF-8 character set and UCA 9.0.0 collation
CREATE DATABASE IF NOT EXISTS app_production
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 2. Create isolated application user bound strictly to loopback
CREATE USER IF NOT EXISTS 'app_web'@'127.0.0.1'
IDENTIFIED BY 'ReplaceWith24CharRandomSecret!';
-- 3. Grant least-privilege runtime permissions (no SUPER, FILE, or GRANT OPTION)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, EXECUTE
ON app_production.* TO 'app_web'@'127.0.0.1';
-- 4. Create dedicated read-only backup user for non-locking mysqldump jobs
CREATE USER IF NOT EXISTS 'app_backup'@'localhost'
IDENTIFIED BY 'ReplaceWithBackupSecret!';
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT
ON app_production.* TO 'app_backup'@'localhost';
FLUSH PRIVILEGES;
Part 4: Application Connection Pooling & Non-Locking Online Backups
In Node.js (mysql2/promise) and PHP 8.4 (PDO) applications, reuse a bounded connection pool rather than opening a new TCP handshake on every HTTP request, and use mysqldump --single-transaction --no-tablespaces for zero-downtime nightly snapshots:
# Perform a consistent, non-locking online InnoDB backup without table locks
mysqldump --defaults-extra-file=/root/.my.cnf \
--single-transaction \
--quick \
--routines \
--triggers \
--no-tablespaces \
app_production | gzip -9 > /var/backups/mysql/app_production_$(date +%F).sql.gz
# Verify backup archive integrity
gzip -t /var/backups/mysql/app_production_$(date +%F).sql.gz
Frequently Asked Questions (MySQL Databases)
What database hostname should I use in my application config (wp-config.php or .env)?
Use 127.0.0.1 (TCP loopback) or localhost (Unix domain socket /var/run/mysqld/mysqld.sock) when your web application runs on the same WinWinHost server as your MySQL database.
How should I size innodb_buffer_pool_size on a dedicated server?
On a dedicated database server, allocate 60%–75% of physical RAM to innodb_buffer_pool_size so active InnoDB data pages and secondary B-tree indexes remain cached in memory. On shared or multi-service nodes running Nginx, Node.js, and MySQL together, allocate 25%–35% of RAM.
Where can I find more server administration tutorials?
Read our companion guides on Installing an SSL/TLS Certificate, Configuring Authoritative DNS & BIND9 Zones, and Managed MySQL Tuning Services, or browse the complete WinWinHost Tutorials & Knowledge Base.