Tag 5
1 Dokumentationsaufträge
1.1 Datentypen recherchiert
1.2 Indexierungstypen recherchiert
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
- Erstellen Sie einen Klon Ihrer MySQL-VM mit neuen MAC-Adressen
- Verbinden Sie die orginale VM mit der geklonten VM in einem NAT-Network <- Testen Sie die Verbindung untereinander
- 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".
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'