logo_header

icon_register icon_logout

icon_bubbles Forum

icon_bubbles Wiki

icon_bubbles Blogs

icon_bubbles Planet

MySQL richtig konfigurieren

MySQL richtig konfigurieren

Postby Joe User » 2005-08-26 19:55

Moin,

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 (/etc/mysql/my.cnf) bereit. Diese ist für Server ab 2048MB RAM, auf denen neben MySQL 5.1 noch weitere Dienste, beispielsweise Web- und/oder Mailserver, betrieben werden, ausgelegt. Die Pfade sollten selbstverständlich an das jeweilige System angepasst werden und die Datenbanken in UTF-8 vorliegen. Ist Letzteres nicht möglich, weil eine Client-Applikation noch kein UTF-8 ünterstützt, so ist utf8 jeweils durch latin1 zu ersetzen. Desweiteren wird die InnoDB-Engine mit der Collation utf8_bin als Default gesetzt, sollte dies nicht gewünscht sein, so können die beiden entsprechenden Zeilen einfach kommentiert 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 --flush-logs --master-data --lock-all-tables --delete-master-logs --all-databases -uroot -p > /tmp/mysqldump.sql
# Danach die InnoDB-Files löschen
rm /var/lib/mysql/ibdata[0-9] /var/lib/mysql/ib_logfile[0-9]


my.cnf:
Code: Select all
[client]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8
port                            = 3306
socket                          = /var/run/mysqld/mysqld.sock

[mysql]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8
prompt                          = \u@\h [\d]>\_
no_auto_rehash

[mysqladmin]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8

[mysqlcheck]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8

[mysqldump]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8
max_allowed_packet              = 32M
quote_names
quick

[mysqlimport]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8

[mysqlshow]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8

[isamchk]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8
key_buffer_size                 = 256M

[myisamchk]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8
key_buffer_size                 = 256M

[myisampack]
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8

[mysqld_safe]
err_log                         = /var/log/mysql/mysql.err

[mysqld]
user                            = mysql
port                            = 3306
bind-address                    = 127.0.0.1
socket                          = /var/run/mysqld/mysqld.sock
character-sets-dir              = /usr/share/mysql/charsets
character-set-server            = utf8
collation-server                = utf8_bin
default-storage-engine          = InnoDB
basedir                         = /usr
datadir                         = /var/lib/mysql
tmpdir                          = /var/tmp
slave-load-tmpdir               = /var/tmp
language                        = /usr/share/mysql/english
log-bin                         = /var/lib/mysql/mysql-bin
relay-log                       = /var/lib/mysql/relay.log
relay-log-index                 = /var/lib/mysql/relay.index
relay-log-info-file             = /var/lib/mysql/relay.info
master-info-file                = /var/lib/mysql/master.info
#master-host                     = <hostname>
#master-user                     = <username>
#master-password                 = <password>
#master-port                     = 3306
#auto_increment_increment        = 10
#auto_increment_offset           = 1
server-id                       = 1
back_log                        = 50
sync_binlog                     = 1
binlog_cache_size               = 1M
max_binlog_size                 = 100M
binlog-format                   = MIXED
expire_logs_days                = 7
slow-query-log                  = 1
slow-query-log-file             = /var/lib/mysql/slow-query.log
slave_compressed_protocol       = 1
lower_case_table_names          = 1
safe-user-create                = 1
delay-key-write                 = ALL
myisam-recover                  = FORCE,BACKUP
key_buffer_size                 = 256M
join_buffer_size                = 2M
sort_buffer_size                = 2M
read_buffer_size                = 2M
read_rnd_buffer_size            = 8M
myisam_sort_buffer_size         = 64M
max_allowed_packet              = 32M
max_heap_table_size             = 64M
tmp_table_size                  = 64M
table_cache                     = 1024
table_definition_cache          = 1024
query_cache_type                = 1
query_cache_size                = 128M
query_cache_limit               = 16M
thread_concurrency              = 8
thread_cache_size               = 24
max_connections                 = 24
ft_max_word_len                 = 20
ft_min_word_len                 = 3
long_query_time                 = 2
local-infile                    = 0
log-warnings                    = 2
log-slave-updates
log-queries-not-using-indexes
skip-external-locking
skip-character-set-client-handshake
#skip_innodb
innodb_thread_concurrency       = 8
innodb_buffer_pool_size         = 2G
innodb_additional_mem_pool_size = 128M
innodb_data_home_dir            = /var/lib/mysql
innodb_log_group_home_dir       = /var/lib/mysql
innodb_data_file_path           = ibdata1:2000M;ibdata2:10M:autoextend
innodb_flush_method             = O_DIRECT
innodb_log_file_size            = 256M
innodb_log_buffer_size          = 64M
innodb_log_files_in_group       = 2
innodb_flush_log_at_trx_commit  = 2
innodb_max_dirty_pages_pct      = 90
innodb_lock_wait_timeout        = 120
innodb_file_per_table

[mysqlhotcopy]
interactive_timeout


Datenbank-Backup zurückspielen:
Code: Select all
mysql -uroot -p < /tmp/mysqldump.sql



Für das weitere Tuning, sofern noch nötig, sind die Scripte mysqltuner.pl und tuning-primer.sh sowie die offizielle MySQL 5.1 Dokumentation äusserst hilfreich.

Gruss,
Joe User


Letzte Aktualisierung: 03.08.2010
Last edited by Joe User on 2010-08-05 23:02, edited 13 times in total.
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby captaincrunch » 2005-08-26 20:35

Vielleicht sollte man sowas auch mal für ne echte DB (aka Postgres (SCNR)) anbieten. OutOfBound, wie wär's? ;)
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
captaincrunch
Userproject
 
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: MySQL richtig konfigurieren

Postby Joe User » 2005-08-27 19:40

Moin,

wer nicht nur eine optimierte, sondern auch sichere MySQL-Installation möchte, der sollte folgendes Script ausführen und alle Fragen (abgesehen vom MySQL-Root-Passwort) durch ein simples drücken der Return-Taste mit der Standardantwort bestätigen:

Code: Select all
/usr/bin/mysql_secure_installation


Gruss,
Joe User
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby larsinho » 2005-08-27 20:15

Danke für die conf! Eine Anmerkung allerdings: Bei mir hat das skip-name-resolve dazu geführt, dass sich kein User mehr zur DB connecten konnte, da der Zugang nur für 'localhost' erlaubt war. Also Vorsicht mit dem skip-name-resolve :wink:
larsinho
 
Posts: 14
Joined: 2004-04-14 20:21

Re: MySQL richtig konfigurieren

Postby Joe User » 2005-08-27 20:21

Larsinho wrote:da der Zugang nur für 'localhost' erlaubt war.


Das ist so beabsichtigt, schliesslich soll der MySQLd nur von Admins, welche sehr genau wissen was sie machen, von Extern zugänglich gemacht werden, denn ein von Extern zugänglicher MySQLd stellt ein erhebliches Sicherheitsrisiko dar!
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby burn » 2005-09-10 02:30

Meine MySQL-Server sind auch alle an den localhost gebunden, weil ich dank PhpMyAdmin etc. nicht mehr als das brauche, aber da es immer wieder so dargestellt wird: was macht einen nach außen offenen MySQL-Server unsicherer als andere offene Server?
burn
 
Posts: 14
Joined: 2003-02-05 23:34
Location: Hannover

Re: MySQL richtig konfigurieren

Postby Roger Wilco » 2005-09-10 12:48

Burn wrote:was macht einen nach außen offenen MySQL-Server unsicherer als andere offene Server?

Grundsätzlich nichts. Es gab in der (jüngeren) Vergangenheit allerdings einige ausnutzbare Sicherheitslücken, die es dem Angreifer erlaubt haben, Befehle im Kontext des MySQL-Benutzers (unter dem der mysqld läuft) auszuführen.
Desweiteren kann ein Angreifer bei schlecht oder gar nicht gewählten Passwörtern die Datenbanken der jeweiligen Benutzer verändern. Und ohne Ratelimit ist ein Bruteforce Angriff ebenfalls leicht möglich.

Selbst wenn ich von extern auf eine MySQL-Datenbank zugreifen müsste, würde ich das nicht ohne SSL-Zertifikat, VPN oder SSH-Tunneling machen. Alles andere ist einfach zu Böse[tm]. YMMV.
Roger Wilco
Administrator
Administrator
 
Posts: 5787
Joined: 2004-05-23 12:53

Re: MySQL richtig konfigurieren

Postby venundo » 2005-10-04 14:56

Ich wollte die Einstellungen meiner my.cnf nun mal mit den hier geposteten vergleichen und musste feststellen, dass viele Angaben in meiner Datei gar nicht vorhanden sind. Z.B. endet meine my.cnf bereits hinter
[isamchk]
key_buffer_size = 64M
sort_buffer_size = 4M
. Danach kommt rein gar nichts mehr.

Hängt das vielleicht vom OS ab? Oder müsste ich nicht vorhandene Parameter einfügen?
venundo
 
Posts: 4
Joined: 2005-09-23 18:44
Location: Geilenkirchen

Re: MySQL richtig konfigurieren

Postby Joe User » 2005-10-04 15:25

Venundo wrote:Hängt das vielleicht vom OS ab?


Vom OS weniger, eher vom Distributoren.

Venundo wrote:Oder müsste ich nicht vorhandene Parameter einfügen?


Jupp.
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby stefan2k1 » 2005-10-09 22:32

Hi,

danke für die config, was könnte man denn noch für Rechner mit 2Gig RAM anpassen an der Config ?

Danke
Stefan
stefan2k1
 
Posts: 24
Joined: 2003-09-09 21:01

Re: MySQL richtig konfigurieren

Postby Joe User » 2005-10-10 10:21

Man könnte ein paar *_buffer_size erhöhen und den QCache vergrössern, wenn die vorgeschlagenen Werte nicht ausreichen sollten. Andererseits habe ich, um den Supportaufwand möglichst gering zu halten, absichtlich schon recht grosszügige Werte gewählt ;)
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby memo1003 » 2005-11-09 17:56

Joe User wrote:Moin,

wer nicht nur eine optimierte, sondern auch sichere MySQL-Installation möchte, der sollte folgendes Script ausführen und alle Fragen (abgesehen vom MySQL-Root-Passwort) durch ein simples drücken der Return-Taste mit der Standardantwort bestätigen:

Code: Select all
/usr/bin/mysql_secure_installation




wenn ich das im nachhinein mache also wenn schon eine menge tabellen bestehen geht das immer noch? oder werden die tabellen dann gelöscht?
memo1003
 
Posts: 24
Joined: 2005-07-08 23:34

Re: MySQL richtig konfigurieren

Postby Joe User » 2005-11-09 18:43

memo1003 wrote:wenn ich das im nachhinein mache also wenn schon eine menge tabellen bestehen geht das immer noch? oder werden die tabellen dann gelöscht?


Ja. Nein.
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby in flames » 2005-11-18 14:23

Ich wollte auch gerade mal diese Config austesten.

Nur startet dann mysql nicht mehr, die Pfade sind korrekt und stimmen mit meinen überein.

Fehlermeldung beim starten:

Starting MySQL database server: mysqld...failed.
Please take a look at the syslog.
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!


Auszug aus der syslog:

Nov 18 13:02:35 debian mysqld[5266]:
Nov 18 13:02:35 debian mysqld_safe[5272]: ended
Nov 18 13:02:41 debian /etc/init.d/mysql[5335]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in
Nov 18 13:02:41 debian /etc/init.d/mysql[5335]: ^G/usr/bin/mysqladmin: connect to server at 'localhost' failed
Nov 18 13:02:41 debian /etc/init.d/mysql[5335]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Nov 18 13:02:41 debian /etc/init.d/mysql[5335]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
Nov 18 13:02:41 debian /etc/init.d/mysql[5335]:



Die mysqld.sock wird auch nicht erstellt.

Hier ist mal meine bisherige my.cnf:

http://www.bm-community.de/my.cnf

Ich bedanke mich
in flames
 
Posts: 70
Joined: 2003-12-24 23:33

Re: MySQL richtig konfigurieren

Postby philipp » 2005-12-10 03:10

In Flames wrote:Ich wollte auch gerade mal diese Config austesten.

Nur startet dann mysql nicht mehr, die Pfade sind korrekt und stimmen mit meinen überein.

Fehlermeldung beim starten:

Starting MySQL database server: mysqld...failed.
Please take a look at the syslog.
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!


suche in der neuen my.cnf nach
Code: Select all
#skip-innodb

und mach ein
Code: Select all
skip-innodb

draus.
philipp
 
Posts: 52
Joined: 2003-06-19 19:36
Location: Hannover

Re: MySQL richtig konfigurieren

Postby adjustman » 2005-12-18 00:37

und warum funktioniert das bei ihm nicht? Oder bei mir. Hab das gleiche
adjustman
 
Posts: 1099
Joined: 2003-03-27 00:29
Location: SA

Re: MySQL richtig konfigurieren

Postby n0fear » 2006-01-12 19:33

Hatte die Datei angepasst und auf nem Server mit Plesk installed.. also die Webseiten sind nun pfeilschnell ;) ABER Plesk admin Oberfläche will nicht mehr

ERROR: Unable to query: Can't find file: 'misc.MYI' (errno: 2) 0: /usr/local/psa/admin/plib/common_func.php3:203 psaerror(string "Unable to query: Can't find file: 'misc.MYI' (errno: 2)") 1: /usr/local/psa/admin/plib/common_func.php3:390 db_query(string "select param, val from misc") 2: /usr/local/psa/admin/plib/class.Session.php:113 get_param(string "login_timeout") 3: /usr/local/psa/admin/auto_prepend/auth.php3:139 Session->Session()


Nach Entfernen des gesammten Bereichs innodb_ rennt es... für was brauch ich die innodb denn? (dumm frag)


Frage 2: /usr/bin/mysql_secure_installation was mache ich wenn ich keinen mysql root habe sondern der default admin heist?
n0fear
 
Posts: 6
Joined: 2005-12-03 18:43

Re: MySQL richtig konfigurieren

Postby Joe User » 2006-01-12 21:28

n0fear wrote:Nach Entfernen des gesammten Bereichs innodb_ rennt es... für was brauch ich die innodb denn? (dumm frag)


Wenn Du die InnoDB-Engine nicht nutzt, für Nichts. Allerdings wird von den MySQL-Entwicklern empfohlen, die InnoDB-Engine grundsätzlich miteinzukompilieren, daher der Konfigurationsabschnitt.

n0fear wrote:Frage 2: /usr/bin/mysql_secure_installation was mache ich wenn ich keinen mysql root habe sondern der default admin heist?


Entweder den User anlegen, oder das Script anpassen, oder http://www.rootforum.org/forum/view ... 232#240232
User avatar
Joe User
Administrator
Administrator
 
Posts: 9220
Joined: 2003-02-27 02:00
Location: Schleswig-Holstein

Re: MySQL richtig konfigurieren

Postby Guest » 2006-01-18 22:43

Hallo,

ich habe seit kurzem einen Server bei strato mit folgender konfig:

Opteronâ?¢148
2 GB RAM
2x160GB Raid

SuSE 9.3
Plesk 7.5

da ich des öffteren einen zu hohen load auf dem server habe, bin auf daiese my.conf hier gestossen und wollte sie mal ausprobieren.
Das Problem ist, wenn ich wie mein vorgänger den InnoDB-Teil herausnehme funktioniert mein mail-server nicht mehr, was ich vorher schon vermutet habe, wenn ich das #skip-innodb so lasse wie es ist, startet MySQL nicht mehr.

Gibt es eine Lösung hierfür?
Guest
 

Re: MySQL richtig konfigurieren

Postby braindead » 2006-01-19 23:00

poste doch einfach mal die Error-Logs von mysql, dann kann man auch mehr sagen.
braindead
RSAC
 
Posts: 257
Joined: 2002-10-22 09:49
Location: vorm Rechner

Re: MySQL richtig konfigurieren

Postby seb » 2006-01-21 15:11

hallihallo, bin auf den thread durch die suche gelandet...

bei mir hört die my.cnf auch schon bei
Code: Select all
[isamchk]
key_buffer = 16M


auf, das issen RootDS also nen größerer vServer mit Debian 3.1 Stable und Plesk 7.5

da einige hier schon von problemen berichten mit Plesk...
bei mir liegt die my.cnf in /etc/mysql/my.cnf

und manche sachen sind auch anders...

Code: Select all
# Instead of skip-networking the default is now to listen only on localhost which is more comatible and is not less secure.
bind-address = 127.0.0.1


also skip bräucht man garnicht mehr eintragen?
seb
 
Posts: 24
Joined: 2002-09-06 05:16

Windows?

Postby dasilva » 2006-03-11 14:46

Gibt es sowas auch für Windows?
Kann die Datei nicht finden.
dasilva
 
Posts: 22
Joined: 2006-03-09 21:30

Re: Windows?

Postby flo » 2006-03-11 15:33

DaSilva wrote:Gibt es sowas auch für Windows?
Kann die Datei nicht finden.


@ DaSilva:

Hier geht es nicht um Windows, aber die meisten Einträge dieser my.cnf dürften wohl auch unter Windows laufen - mehr sagt Dir das Handbuch.

Bitte gib weitere wenig nützliche Kommentare in eigene Threads, die kann man wenigstens verschieben.

flo.
flo
RSAC
 
Posts: 2298
Joined: 2002-07-28 13:02
Location: Berlin

Re: Windows?

Postby isotopp » 2006-03-11 22:03

DaSilva wrote:Gibt es sowas auch für Windows?
Kann die Datei nicht finden.


Ein mysqld sucht seine Datei in den angebenenen Verzeichnissen, wenn man ihn nicht zwingt, woanders nachzusehen. Du kannst also mal "C:ProgrammeMySQLMySQL Server 5.0binmysql.exe --help --verbose" aufrufen und dort nachsehen, wo Dein mysqld.exe seine Konfiguration sucht. Es wird my.ini und my.cnf in C:, in C:WINDOWSirgendwas und so weiter gesucht.

Wenn Du jedoch MySQL als Dienst installiert hast (Kannst Du im Dienstekontroll-Plugin nachsehen), dann solltest Du Dir mal die Eigenschaften von dem Dienst ansehen (RMB auf den Dienst, Eigenschaften). Dort findest Du den Kontrollstring für den Dienst, und da ist mit "--default-file=..." der Pfadname Deiner my.ini eingetragen. Die in mysqld.exe eingebauten Defaults werden dann nicht verwendet.
User avatar
isotopp
RSAC
 
Posts: 481
Joined: 2003-08-21 10:21
Location: Berlin

Re: MySQL richtig konfigurieren

Postby bravesurfer » 2006-04-11 16:21

Ich habe o.g. Konfiguration auf mehreren Root-Servern P IV 3 GHZ, 1024 MB Speicher getestet. Die Serverlast geht hierdurch jedoch deutlich in die Höhe, weshalb ich wieder auf die "Standardwerte" meiner Linux Distrubtion (Suse 9.3 / MySQL 4.1) umgestellt habe, die bezüglich Speicherzuweisung in vielen Punkten deutlich unter den o.g. Werten liegt.

Konnte jemand ähnliche Erfahrungen machen?
bravesurfer
 
Posts: 170
Joined: 2003-05-08 12:17
Location: Stuttgart

Next

Return to MySQL

Who is online

Users browsing this forum: No registered users and 0 guests