Ein einfacher Weg MySQL zu installieren ist mit Puppet. Die Argumente für und wider Puppet lassen wir an dieser Stelle beiseite. In einem anderen Beitrag werden wir mehrere MySQL Instanzen auf unterschiedlichen Ports auf einem Server installieren, um zum Beispiel die MySQL Replikation zu verstehen. Puppet bietet einen schönen Ansatz den Überblick zu behalten. Hier einige Beispiele mit Ubuntu 14.04 und Puppet 3.4.
Ubuntu
Installieren wird uns Puppet auf unserem Ubuntu Betriebssystem.
1 |
sudo apt-get install puppet |
Puppet bietet selbst ein fertiges MySQL Puppet Module. Wir wollen dieses Module später verwenden.
1 |
sudo puppet module install puppetlabs-mysql |
Client & Server
Installieren wir uns ein MySQL Client und ein Server. Wir erstellen eine Datei client_server.pp mit dem folgenden Inhalt.
[github file = „https://github.com/schroedingerdb/die-datenbank/blob/master/mysql/installation/client_server.pp“ ]
1 2 3 |
class { 'mysql::server': root_password => 'root' } |
In der Klassendeklartion sehen wir dass das Password für den root User root ist. Führen wir unsere Puppet Konfiguration aus.
1 |
sudo puppet apply client_server.pp |
Ein mögliche Ausgabe wäre diese:
1 2 3 4 5 |
Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults Notice: Compiled catalog for schroedingerdb in environment production in 0.54 seconds Notice: /Stage[main]/Mysql::Server::Install/Package[mysql-server]/ensure: ensure changed 'purged' to 'present' Notice: /Stage[main]/Mysql::Server::Service/File[/var/log/mysql/error.log]/group: group changed 'adm' to 'mysql' Notice: Finished catalog run in 15.01 seconds |
Die Warnung in der ersten Zeile ignorieren wir, denn sie sagt uns lediglich dass puppet die Hiera defaults verwendet. Die wichtige Zeile ist die letzte. Testen wir ob der user und das password funktioniert.
1 |
mysql --user=root --password |
Nach der Eingabe des Passworts root sind wir mit der Datenbank verbunden. Eine mögliche Ausgabe wäre diese:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 60 Server version: 5.5.44-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
Wir sind nun in der Lage ein Client und Server zu installieren. Wenn der Server von Außen erreichbar sein soll, dann müssen wir einen Parameter ändern.
Server Konfiguration
Der Server lässt mit Puppet ebenfalls beliebig konfigurieren. Um das zu demonstrieren wollen wir den Server aus dem letzten Abschnitt nach Außen erreichbar machen. Wir wollen uns zum Beispiel mit der MySQL Workbench oder einem anderen Client verbinden. Versuchen wir uns von einem anderen Computer aus auf den MySQL Server zu verbinden, folgt die Meldung: Can’t connect to MySQL server on ’schroedingerdb‘ (10061). Bevor wir den passenden Parameter ändern, schauen wir uns noch vorher die aktuelle my.cnf an.
1 |
less /etc/mysql/my.cnf |
Die aktuelle Konfiguration sieht so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
### MANAGED BY PUPPET ### [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [isamchk] key_buffer_size = 16M [mysqld] basedir = /usr bind-address = 127.0.0.1 datadir = /var/lib/mysql expire_logs_days = 10 key_buffer_size = 16M log-error = /var/log/mysql/error.log max_allowed_packet = 16M max_binlog_size = 100M max_connections = 151 myisam_recover = BACKUP pid-file = /var/run/mysqld/mysqld.pid port = 3306 query_cache_limit = 1M query_cache_size = 16M skip-external-locking socket = /var/run/mysqld/mysqld.sock ssl = false ssl-ca = /etc/mysql/cacert.pem ssl-cert = /etc/mysql/server-cert.pem ssl-key = /etc/mysql/server-key.pem thread_cache_size = 8 thread_stack = 256K tmpdir = /tmp user = mysql [mysqld_safe] log-error = /var/log/mysql/error.log nice = 0 socket = /var/run/mysqld/mysqld.sock [mysqldump] max_allowed_packet = 16M quick quote-names !includedir /etc/mysql/conf.d |
Das sind viele Parameter. Der für uns wichtige ist bind-address. Er ist im Moment so eingestellt dass die Datenbank nur auf localhost, also auf 127.0.0.1 hört. Nicht nur die gesamte Datenbank sondern auch den Datenbankbenutzern kann der Zugang von Außen verboten werden. Die Standardeinstellung des root users ist ebenfalls auf localhost gestellt. In Puppet ändern wir nun beides in einer Puppet Konfiguration open_server.pp.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$override_options = { 'mysqld' => { 'bind-address' => '0.0.0.0', } } $users = { 'root@%' => { ensure => 'present' } } class { '::mysql::server': root_password => 'root', override_options => $override_options, users => $users } |
Führen wir Puppet aus:
1 2 3 4 5 6 7 |
sudo puppet apply open_server.pp Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults Notice: Compiled catalog for schroedingerdb in environment production in 0.58 seconds Notice: /Stage[main]/Mysql::Server::Config/File[mysql-config-file]/content: content changed '{md5}790c6c49aed83ee9b81fa3c7360898c8' to '{md5}750b8ea845b2d8960680dad20f306b3e' Notice: /Stage[main]/Mysql::Server::Providers/Mysql_user[root@%]/ensure: created Notice: Finished catalog run in 0.21 seconds |
Der Paramter bind-address hat sich dadurch in der MySQL Konfiguration /etc/mysql/my.cnf geändert und der root user hat nun Zugang auch von Außen. Die Verbindung mit der MySQL Workbench oder einem PHP Client funktioniert nun.
Ein wichtiger Hinweis noch: diese Konfiguration sollte nicht für ein Produktivsystem verwendet werden. Der root user darf von Außen nicht auf die Datenbank kommen.