### 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 ```