Zum Hauptinhalt springen

Tag 5

1 Dokumentationsaufträge

1.1 Datentypen recherchiert

Tag 4 - Kapitel 2.1.3

1.2 Indexierungstypen recherchiert

Tag 4 - Kapitel 2.1.4

2 Übungen

2.1 SQL Import

Importieren Sie den SQL-Dump in Ihr DBMS

Datenbank erstellen:

CREATE DATABASE poke_db;

Import durchführen (ausserhalb MySQL Server):

sudo mysql -u root -p poke_db < poke_db.sql

Kontrollieren Sie ob der Import erfolgreich war

Sind die Tabellen erstellt?

USE poke_db;
SHOW TABLES;

Datenstruktur von einer Tabelle überprüfen:

DESCRIBE abilities;

Daten in Tabelle überpüfen:

SELECT * FROM pokemon LIMIT 5;

2.2 CSV Export (Select)

Exportieren Sie eine CSV-Datei aus allen Pokemons, die einen "fire-punch" als Move durchführen können

SELECT p.pok_name
FROM pokemon p
JOIN pokemon_moves pm ON p.pok_id=pm.pok_id
JOIN moves m ON pm.move_id=m.move_id
WHERE m.move_name
LIKE "fire-punch"
INTO OUTFILE '/var/lib/mysql-files/poke_fire-punch.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
LINES TERMINATED BY '\n';

2.3 Lokales Backup

Richten Sie auf Ihrem Server ein Backup-Script, gemäss der Vorlage, ein. Testen Sie das Script aus ob der Export funktioniert und Sie die Daten auch wieder importieren können ("Niemand will Backup - alle wollen restore")

#!/bin/bash
# Add the backup dir location, MySQL root password, MySQL and mysqldump location
DATE=$(date +%d-%m-%Y)
BACKUP_DIR="/tmp/test-backup"
MYSQL_USER='root'
MYSQL_PASSWORD='MySQL_M141#'
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

# To create a new directory in the backup directory location based on the date
mkdir -p $BACKUP_DIR/$DATE

# To get a list of databases
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"`

# To dump each database in a separate file
for db in $databases; do
echo $db
$MYSQLDUMP --single-transaction --force --opt --skip-lock-tables --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Delete the files older than 10 days
find $BACKUP_DIR/* -mtime +10 -exec rm {} \;

Import testen (Datebank zerstören (z.B. löschen)):

cp /tmp/test-backup/DATE/demo_db.sql.gz ~
gzip -d demo_db.sql.gz
sudo mysql -u root -p < demo_db.sql

2.4 mydumper und myloader

mydumper und myloader installieren:

wget https://github.com/mydumper/mydumper/releases/download/v0.12.1/mydumper_0.12.1-1-zstd.focal_amd64.deb
sudo dpkg -i mydumper_0.12.1-1-zstd.focal_amd64.deb

Führen Sie mittels mydumper ein DB-Backup von Ihrem Pokemon-Datenbank durch. Achtung:
- Benutzen Sie für das Backup 6 parallele Threads
- Komprimieren Sie das Backup

sudo mydumper --database poke_db -c --threads 6
sudo chown -R vagrant:vagrant EXPORT-FOLDER

Löschen Sie die orginale DB

DROP DATABASE poke_db;

Restoren Sie die DB aus Ihrem Backup

sudo myloader -d EXPORT-FOLDER --threads 6 -v 3

2.5 Migration auf entfernten Server

Vorbereitung
  1. Erstellen Sie einen Klon Ihrer MySQL-VM mit neuen MAC-Adressen
  2. Verbinden Sie die orginale VM mit der geklonten VM in einem NAT-Network <- Testen Sie die Verbindung untereinander
  3. Testen Sie die SSH-Verbindung zwischen den VMs

Führen Sie einen entfernten Backup mittels SSH, gemäss den Anleitung von oben, durch. Nutzen Sie das Beispiel "Verbindung zwischen den Servern per SSH möglich".

Schrittweises Vorgehen:

SSH auf den Export-Server Dump durchführen und Ausabe auf PIPE umleiten die PIPE umleiten auf die SSH-Verbindung zum Import-Server

Auf Export-Server:

sudo mysqldump --single-transaction -u root -pMySQL_M141# poke_db | ssh vagrant@10.0.2.15 'sudo mysql -u root -pMySQL_M141# -e "CREATE DATABASE poke_db"; sudo mysql -u root -pMySQL_M141# poke_db'