# kompakte MySQL my.cnf Vorlage für neue Server (MySQL-/MariaDB-/Percona-Server 5.7) Dieses Beispiel ist für kleine bis mittelgroße Setups geeignet. Die Vorlage kann einfach nach /etc/mysql/my.cnf kopiert werden. Sofern die Datenbankengine MyISAM nicht benötigt wird, kann diese über „skip-myisam“ im \[mysqld\]-Bereich entfernt werden. MariaDB 10.1 entspricht etwa MySQL 5.6 mit Backports von MySQL 5.7. Um die neuen Einstellungen zu aktiveren, müssen sehr wahrscheinlich (bei Percona Server 5.6 und 5.7 ist es nicht notwendig!) einmal die InnoDB-Logfiles gelöscht werden (MySQL läßt sich sonst nicht starten). Diese werden dann beim nächsten Start der Datenbank neu angelegt. Je nach Größe kann das auch länger dauern, das Init-Script beendet sich dann gerne mit einem Fehler. Den aktuellen Status sieht man im MySQL-Logfile (bzw. /var/log/syslog). Die Logfiles werden wie folgt gelöscht: ```code service mysql stop rm -f /var/lib/mysql/ib_logfile* service mysql start ```

**Sämtliche Einstellungen sind von Dir dann natürlich nochmals zu überprüfen**, insbesondere Caches und Speicherverbrauch. Dabei kann dann auch das Tool [mysqltuner.pl](http://mysqltuner.pl/ "http://mysqltuner.pl") helfen. Mein Beispiel ist auf ein Hot-Dataset von 2GB InnoDB Daten ausgelegt.

Bei **Debian Wheezy**: Anpassung der Systemlimits, diese Zeilen am Ende vor der letzten Zeile ergänzen:
[/etc/security/limits.conf](https://test.ovtec.it/_export/code/datenbanken/mysql/kompakte_mysql_my.cnf_vorlage_fuer_neue_server_5.7?codeblock=1 "Schnipsel herunterladen")
``` * soft nofile 65535 * hard nofile 65535 ```
Zum anpassen der Limits in Systemd ist ein Drop-In Unitfile anzulegen (das mitgelieferte Unitfile muss dafür nicht angepasst werden): ```code # mkdir /etc/systemd/system/mysql.service.d && vi /etc/systemd/system/mysql.service.d/limits.conf # bzw. für MariaDB: # mkdir /etc/systemd/system/mariadb.service.d && vi /etc/systemd/system/mariadb.service.d/limits.conf [Service] LimitNOFILE=infinity LimitMEMLOCK=infinity # systemctl daemon-reload # systemctl status mysql.service es sollten folgende Zeilen auftauchen: Drop-In: /etc/systemd/system/mysql.service.d └─limits.conf ``` Da sich die Pfade zu den Logfiles in meiner Config vom Standard unterscheiden, sollte noch der Inhalt von /etc/logrotate.d/mysql ausgetauscht werden:
[/etc/logrotate.d/mysql](https://test.ovtec.it/_export/code/datenbanken/mysql/kompakte_mysql_my.cnf_vorlage_fuer_neue_server_5.7?codeblock=3 "Schnipsel herunterladen")
``` /var/log/mysql/*.log { daily rotate 7 missingok create 640 mysql adm compress sharedscripts postrotate test -x /usr/bin/mysqladmin || exit 0 # If this fails, check debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then # Really no mysqld or rather a missing debian-sys-maint user? # If this occurs and is not a error please report a bug. #if ps cax | grep -q mysqld; then if killall -q -s0 -umysql mysqld; then exit 1 fi else $MYADMIN flush-logs fi endscript } ```
[/etc/mysql/my.cnf](https://test.ovtec.it/_export/code/datenbanken/mysql/kompakte_mysql_my.cnf_vorlage_fuer_neue_server_5.7?codeblock=4 "Schnipsel herunterladen")
``` # # The MySQL database server configuration file # # compact version from https://wiki.magenbrot.net/datenbanken/mysql/kompakte_mysql_my.cnf_vorlage_fuer_neue_server_5.7 # # 2016 Oliver Völker # [client] port = 3306 socket = /var/run/mysqld/mysqld.sock default_character_set = utf8 [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # basic settings user = mysql pid_file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock bind_address = 127.0.0.1 port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp event_scheduler = 0 explicit_defaults_for_timestamp = true skip_external_locking skip_name_resolve #skip_myisam # charset and collation character_set_server = utf8 collation_server = utf8_general_ci # os related open_files_limit = 8192 # should be around 3x table_open_cache, also set limits.conf # networking max_connections = 250 max_connect_errors = 1000000 max_allowed_packet = 128M connect_timeout = 10 wait_timeout = 180 # could cause problems if too strict (default: 28800) net_read_timeout = 30 net_write_timeout = 60 interactive_timeout = 600 slave_net_timeout = 60 back_log = 50 # fine tuning key_buffer_size = 16M thread_stack = 256K thread_cache_size = 8 thread_pool_size = 16 sort_buffer_size = 1M read_buffer_size = 128k read_rnd_buffer_size = 256k join_buffer_size = 128k query_cache_type = 0 query_cache_limit = 0 query_cache_size = 0 table_open_cache = 256 tmp_table_size = 32M max_heap_table_size = 32M bulk_insert_buffer_size = 16M auto_increment_increment = 1 auto_increment_offset = 1 concurrent_insert = 2 ft_min_word_len = 3 # MyISAM options myisam_recover_options = FORCE,BACKUP myisam_sort_buffer_size = 8M # logging general_log_file = /var/log/mysql/mysql.log general_log = 0 log_error = /var/log/mysql/error.log slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 # replication settings server_id = 1 # set to 2 or higher in replication slaves log_bin = mysql-bin #binlog_format = statement binlog_format = mixed log_slave_updates = false expire_logs_days = 3 max_binlog_size = 1G binlog_cache_size = 32K sync_binlog = 1 #relay_log = mysqld-relay-bin # enable on replication slaves #read_only = true # only on replication slaves # InnoDB options innodb_data_home_dir = /var/lib/mysql/ innodb_log_group_home_dir = /var/lib/mysql innodb_table_locks = true innodb_lock_wait_timeout = 50 innodb_thread_concurrency = 9 innodb_commit_concurrency = 0 innodb_support_xa = true innodb_buffer_pool_size = 2G innodb_buffer_pool_instances = 2 innodb_log_file_size = 50M innodb_data_file_path = ibdata1:10M:autoextend innodb_flush_log_at_trx_commit = 1 innodb_flush_method = O_DIRECT innodb_log_buffer_size = 8M innodb_open_files = 8192 innodb_file_per_table = true innodb_large_prefix = true innodb_file_format = barracuda [mysqldump] quick quote_names max_allowed_packet = 128M [mysql] [isamchk] key_buffer_size = 16M myisam_sort_buffer_size = 16M myisam_max_sort_file_size = 2147483648 myisam_repair_threads = 1 myisam_recover_options = FORCE,BACKUP # include *.cnf files, overwriting settings from here !includedir /etc/mysql/conf.d/ ```