kompakte MySQL my.cnf Vorlage für neue Server (MySQL-/MariaDB-/Percona-Server 5.6)
kompakte MySQL my.cnf Vorlage für neue Server (MySQL-/MariaDB-/Percona-Server 5.6)
Diese Anleitung wird nicht weiter aktualisiert. Bitte wechselt auf die Versionen 5.7 oder 8.0
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.0 entspricht etwa MySQL 5.5 mit Backports von MySQL 5.6.
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:
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 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
-
* soft nofile 65535 * hard nofile 65535
Ab Debian Jessie, bzw. Distributionen mit Systemd, muss das Systemd unit file angepasst werden (danach „systemctl daemon-reload“ ausführen). Sollte es dieses File nicht geben (z.B. bei Debian Jessie mit MariaDB 10) siehe nächster Absatz.
- /lib/systemd/system/mysql.service
-
LimitNOFILE=infinity LimitMEMLOCK=infinity
MariaDB / Percona in Debian Jessie hat kein eigenes Service file. Folgendes funktioniert allerdings:
# mkdir /etc/systemd/system/mysql.service.d # vi /etc/systemd/system/mysql.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
-
/var/log/mysql/*.log { daily rotate 7 missingok create 640 mysql adm compress sharedscripts postrotate test -x /usr/bin/mysqladmin || exit 0 if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then # If this fails, check debian.conf! mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs fi endscript }
- /etc/mysql/my.cnf
-
# # The MySQL database server configuration file # # compact version from https://wiki.magenbrot.net/datenbanken/mysql/kompakte_mysql_my.cnf_vorlage_fuer_neue_server_5.6 # # 2016 Oliver Völker <info@ovtec.it> # [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 = 512M 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 = on [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/
No Comments