Files
Epicnabbo-Catalogus-Updated…/extra tuts/Best mysql 32gb ram vps settings.md
T
2025-09-21 13:18:46 +02:00

109 lines
3.0 KiB
Markdown

### Understanding the Basics
With a 32 GB RAM server, your primary goal is to maximize the use of available memory to reduce disk I/O, which is the slowest part of database operations. The main setting to focus on is the size of the InnoDB buffer pool.
Open your MySQL configuration file, which is typically `my.cnf`. Common locations include:
* `/etc/mysql/my.cnf`
* `/etc/my.cnf`
* `/etc/mysql/mysql.conf.d/mysqld.cnf`
Always make a backup of the original file before making any changes.
```bash
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
sudo nano /etc/mysql/my.cnf
```
-----
### Key Settings for 32 GB RAM
Add or adjust the following lines under the `[mysqld]` section of the configuration file. These settings are optimized for a **dedicated database server**. If your server hosts other resource-intensive applications, you should slightly decrease these values.
#### 1\. InnoDB Buffer Pool Size
The **InnoDB buffer pool** is the most critical setting. It's the cache for your data and indexes. A larger buffer pool means MySQL can keep more of your active dataset in fast RAM, drastically improving performance.
For a 32 GB server, allocating about 70-80% of the total RAM is ideal. This leaves enough memory for the operating system and other processes.
```ini
innodb_buffer_pool_size = 24G
```
#### 2\. Query Cache
The query cache is known to cause performance issues on busy servers, and it has been removed in MySQL 8.0. **It's best to disable it** on modern systems.
```ini
query_cache_type = 0
query_cache_size = 0
```
#### 3\. Thread Cache Size
The **thread cache** stores threads for reuse, which avoids the overhead of creating new threads for each connection. A higher value is beneficial for a server with many concurrent connections.
```ini
thread_cache_size = 256
```
#### 4\. Max Connections
Set `max_connections` to a value that reflects the expected number of concurrent users or application connections. A value of 500 is a good starting point for a busy server.
```ini
max_connections = 500
```
-----
### Complete `my.cnf` Example
Here is a summary of the recommended settings. Copy and paste these into your `my.cnf` file under the `[mysqld]` section.
```ini
[mysqld]
# Basic settings
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
# Memory & InnoDB settings
innodb_buffer_pool_size = 24G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
# Concurrency & Performance
max_connections = 500
thread_cache_size = 256
# Query Cache (recommended to disable)
query_cache_type = 0
query_cache_size = 0
# MyISAM (if applicable)
key_buffer_size = 128M
# Logging
log_error = /var/log/mysql/error.log
```
-----
### Applying the Changes
After saving your changes, you must restart the MySQL service to apply the new settings.
```bash
sudo systemctl restart mysql
```
You can then check the status of the service to ensure it started successfully.
```bash
sudo systemctl status mysql
```