Linux Server setup

MySQL installieren

In diesem Kapitel werden wir die relationale Datenbank MySQL installieren und einrichten.


MySQL installieren und einrichten

Als erstes installieren wir MySQL Server:


__$ sudo apt install -y mysql-server
 

MySQL bietet uns eine Prozedur, mit der wir gleich nach der Installation ein paar Sicherheitseinstellungen vornehmen können. Starten lässt sich das mit dem Kommando mysql_secure_installation:


__$ sudo mysql_secure_installation
 

Folgende Einstellungen werden abgefragt:

  • VALIDATE PASSWORD COMPONENT: no (starke Passwörter erzwingen?)
  • Password for root: ***
  • Password repeat: ***
  • Remove anonymous users?: y
  • Disallow root login remotely?: y
  • Remove test database and access to it?: y
  • Reload privilege tables now?: y

Die strenge Passwort Regelung fordert sehr komplexe Passwörter. Ich mache es mir an dieser Stelle einfach und wähle no. Die wichtigste Einstellung ist wohl der Remote Zugriff, den ich deaktiviere. Im Terminal sieht das dann so aus:


Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n
Please set the password for root here.

New password:

Re-enter new password:
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Die Version kann mit --version abgefragt werden:


__$ mysql --version


MySQL Benutzer und Datenbank anlegen

Der MySQL Benutzer root sollte ausschließlich für administrative Zwecke eingesetzt werden.

Wir legen einen neuen Datenbank Benutzer tom an und eine Datenbank MyDatabase, auf die tom Zugriff haben soll.

Starten wir zunächst die MySQL Konsole mit sudo mysql und geben gleich den MySQL root Benutzer mit dem Parameter -u an:


__$ sudo mysql -u root
 

MySQL Konsole:


Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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>

Einen neuen Datenbank Benutzer tom erzeugen, der nur lokal und nicht remote agieren kann. Das Passwort soll Beispielhaft tom123 lauten, was mit IDENTIFIED BY gesetzt wird:


__gt CREATE USER 'tom'@'localhost' IDENTIFIED BY 'tom123';
 

Eine neue Datenbank MyDatabase anlegen:


__gt CREATE DATABASE MyDatabase;
 

Dem Benutzer tom Zugriffsrechte auf die zuvor angelegte Datenbank einräumen:


__gt GRANT ALL PRIVILEGES ON tom.* TO 'tom'@'localhost';
 

Um sicher zu gehen, dass Änderungen übernommen werden, lassen wir die neuen Privilegien mit FLUSH PRIVILEGES neu einlesen:


__gt FLUSH PRIVILEGES;
 

Die MySQL Konsole können wir mit exit wieder verlassen:


__gt exit


MySQL deinstallieren

Wie MySQL deinstalliert wird, soll hier nur der Vollständigkeit halber beschrieben werden.

MySQL stoppen:


__$ sudo systemctl stop mysql
 

MySQL deinstallieren:


__$ sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
__$ sudo apt autoremove
__$ sudo apt autoclean
 

MySQL Daten löschen:


__$ sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
 

Standard Befehle zu MySQL

MySQL starten:


__$ sudo systemctl start mysql
 

MySQL stoppen:


__$ sudo systemctl stop mysql
 

MySQL neustarten:


__$ sudo systemctl restart mysql
 

MySQL Status:


__$ sudo systemctl status mysql
 

MySQL Konsole über die Kommandozeile

MySQL Konsole starten:


__$ sudo mysql
 

Die MySQL Shell:


Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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>

Alle Benutzer anzeigen:


__gt SELECT user from mysql.user;  
 

Alle Datenbanken anzeigen:


__gt SHOW DATABASES;
 

Eine neue Datenbank myDatabase anlegen:


__gt CREATE DATABASE myDatabase;
 

Zur Datenbank myDatabase wechseln:


__gt USE myDatabase;
 

Eine neu Tabelle Users anlegen:


__gt CREATE TABLE Users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  username VARCHAR(50) NOT NULL,
  email TINYTEXT NOT NULL,
  age SMALLINT,
  bio TEXT
);
 

Tabellen auflisten:


__gt SHOW TABLES;
 

Einen Datensatz einfügen:


__gt INSERT INTO Users (username, email, age) VALUES ('tom', 'tom@linuxservrsetup.com', 80);
 

Gesamten Inhalt der Tabelle Users auflisten:


__gt SELECT * FROM Users;
 

Datensatz mit der ID 1 löschen:


__gt DELETE FROM Users WHERE id = 1;
 

Tabelle Users löschen:


__gt DROP TABLE Users;
 

Datenbank myDatabase löschen:


__gt DROP DATABASE myDatabase;
 

Benutzer userA löschen:


__gt DROP USER 'userA'@'localhost';
 

Die MySQL Konsole verlassen:


__gt exit;
 

Einzeiler: MySQL Benutzer jerry mit Zugriff auf gleichnamige Datenbank erzeugen (Passwort: jerry123):


__$ echo "CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerry123';GRANT ALL PRIVILEGES ON jerry.* TO 'jerry'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE jerry;" | sudo mysql