da viele User die MySQL-Dokumentation nicht oder nur oberflächlich lesen und sich über einen langsamen MySQLd wundern, stelle ich hier eine vollständige und bewährte Konfiguration (my.cnf) bereit. Diese ist für dedizierte Server ab 4096MB RAM auf denen neben MySQL 5.6/5.7 noch weitere Dienste, beispielsweise Web- und/oder Mailserver, betrieben werden ausgelegt. Die Pfade sollten selbstverständlich an das jeweilige System angepasst werden. Desweiteren ist zu beachten, dass vor dem Einspielen dieser Konfiguration ein mysqldump zwingend notwendig ist. Danach müssen auch die bisherigen InnoDB-Files gelöscht werden, diese werden beim nächsten Start automatisch neu angelegt:
Code: Select all
# Zuerst ein Backup der Datenbanken anlegen
mysqldump --defaults-file=/etc/mysql/my.cnf --master-data=2 --delete-master-logs --flush-logs --add-locks --create-options --allow-keywords --complete-insert --triggers --routines --events --order-by-primary --set-gtid-purged=OFF --tz-utc --hex-blob --lock-all-tables --all-databases -uroot -p > /tmp/mysqldump.sql
# MySQL stoppen
# Pfade selbst anpassen
# Die InnoDB-Files löschen
rm -f /var/lib/mysql/ibdata[0-9]
rm -f /var/lib/mysql/ib_logfile[0-9]
rm -f /var/lib/mysql/ib_buffer_pool
rm -f /var/lib/mysql/ibtmp[0-9]
# my.cnf anlegen/anpassen
Code: Select all
mkdir -p /var/lib/mysql
chmod 0755 /var/lib/mysql
chown mysql:mysql /var/lib/mysql
mkdir -p /var/lib/mysql_secure
chmod 0750 /var/lib/mysql_secure
chown mysql:mysql /var/lib/mysql_secure
mkdir -p /var/lib/mysql_tmpdir
chmod 0750 /var/lib/mysql_tmpdir
chown mysql:mysql /var/lib/mysql_tmpdir
Code: Select all
[client]
port = 3306
socket = /tmp/mysql.sock
[mysql]
prompt = \u@\h [\d]>\_
no_auto_rehash
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
bind-address = 127.0.0.1
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /var/lib/mysql_tmpdir
slave-load-tmpdir = /var/lib/mysql_tmpdir
secure-file-priv = /var/lib/mysql_secure
log-bin = /var/lib/mysql/mysql-bin
log-output = TABLE
master-info-repository = TABLE
relay-log-info-repository = TABLE
relay-log-recovery = 1
general-log = 0
general-log-file = /var/lib/mysql/general.log
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/slow-query.log
default_authentication_plugin = mysql_native_password
default_password_lifetime = 0
server-id = 1
sync_binlog = 1
sync_relay_log = 1
binlog_cache_size = 16M
expire_logs_days = 30
enforce-gtid-consistency = 1
gtid-mode = ON
safe-user-create = 1
lower_case_table_names = 1
explicit-defaults-for-timestamp = 1
myisam-recover-options = FORCE,BACKUP
net_retry_count = 16384
open_files_limit = 32768
table_open_cache = 16384
table_definition_cache = 8192
max_allowed_packet = 64M
key_buffer_size = 256M
myisam_sort_buffer_size = 16M
bulk_insert_buffer_size = 64M
join_buffer_size = 512K
sort_buffer_size = 4M
read_buffer_size = 256K
read_rnd_buffer_size = 512K
max_heap_table_size = 256M
tmp_table_size = 256M
query_cache_type = 0
query_cache_size = 0
long_query_time = 0.05
innodb_thread_concurrency = 8
innodb_buffer_pool_size = 2G
innodb_buffer_pool_dump_pct = 100
innodb_data_home_dir = /var/lib/mysql
innodb_log_group_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:1G;ibdata2:1G;ibdata3:128M:autoextend
innodb_temp_data_file_path = ibtmp1:128M:autoextend
innodb_flush_method = O_DIRECT
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_timeout = 2
innodb_flush_log_at_trx_commit = 2
innodb_disable_sort_file_cache = 1
innodb_write_io_threads = 4
innodb_read_io_threads = 8
innodb_autoinc_lock_mode = 2
innodb_max_dirty_pages_pct = 0
skip-symbolic-links
#skip-name-resolve
[mysqldump]
max_allowed_packet = 256M
quote_names
quick
Datenbank-Backup zurückspielen:
Code: Select all
# Backup zurückspielen
mysql -uroot -p < /tmp/mysqldump.sql
# mysql_upgrade ausführen
mysql_upgrade --force
Für das weitere Tuning, sofern noch nötig, sind die Scripts mysqltuner.pl und tuning-primer.sh sowie die offizielle MySQL 5.7 Dokumentation äusserst hilfreich.
Gruss,
Joe User
Letzte Aktualisierung: 08.04.2017