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