Kategorie: Linux

Update von MySQL image in Docker

Wir wollen in Docker ein MySQL container auf die letzte Verion updaten. Wichtig dafür ist, das unsere Daten nicht in dem Container gespeichert werden, sondern auf dem Host im Verzeichnis /my/data/

1. Letzte MySQL Version hinzufügen

docker pull mysql:latest

2. Container stoppen

docker stop mysql1

3. Container löschen

docker rm mysql1

4. Neuen Container erstellen

docker run --name=mysql1 --restart=always -e MYSQL_ROOT_PASSWORD=mypwd -v /my/data:/var/lib/mysql -d mysql

Will man sich mit dem Container verbinden, dann verwendet man…

docker exec -it mysql1 bash

…oder man öffnet das MySQL Kommando.

docker exec -it mysql1 mysql -u root -p'mypwd'

Backup aller Datenbanken erstellen.

docker exec mysql1 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > /home/user/all-databases.sql.gz

MySQL im Docker HUB

XML SOAP Request senden

Wer einen WebService verwendet, muß nicht immer gleich einen eigenen Client entwickeln. Es ist auch möglich SOAP Request mit Tools zu senden. In diesem Beispiel wird ein WebService zum Löschen von Nachrichten angesprochen.

Zu erst erstellen Datei mit dem XML SOAP Request.

vim soap_request.xml



4860



Mit dem Tool curl senden wir einen HTTP Post Request, als HTTP Header wird die Methode „removeNachricht“ von dem WebService gesendet.

curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: removeNachricht" -d @soap_request.xml -X POST http://localhost:7010/soa-infra/services/StorageService/StorageWebService

Wenn wir eine Liste von Nachrichten löschen wollen, können wir diese Shell Script verwenden. Die NachrichtenID werden in der Datei „list.txt“ gespeichert. Die SOAP Datei wird immer wieder kopiert und in der Datei die ID ersetzt.

#!/bin/sh
URL=http://localhost:7010/soa-infra/services/StorageService/StorageWebService

cat list.txt | while read ID
do
 echo "Delete Nachricht: ${ID}"
 cp soap_request.xml.org soap_request.xml
 sed -i s/##NACHRICHT_ID##/${ID}/g soap_request.xml
 curl \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: removeNachricht" \
  -d @soap_request.xml -X POST ${URL}
 sleep 2
done

Große Dateien teilen und übertragen

Wenn man eine große Datei über das Internet übertragen will, kann das lange dauern. Eine Unterbrechung der Netzwerkverbindung kann ein Problem dar stellen. Besser ist es, die Datei zu erst zu packen und in kleine Teile zu trennen. Dann kann man diese kleinen Dateien einzeln übertragen und wieder zusammen setzten.

0. 500MB Testdatei erstellen

dd if=/dev/urandom of=myfile.out bs=1M count=500

1. Packen und teilen

gzip -c myfile.out | split -b 20M - myfile.gz_

2. Übertragen

rsync -avzP myfile.gz_* -e ssh user@hostname:/tmp/

3. Zusammensetzen

cat myfile.gz_* | gunzip -c > myfile.out

In Windows kann man die Dateien zusammen kopieren.

copy /b file1 + file2 + file3 + file4 filetogether

Monitoring für das Terminal und Konsole

Heute möchte ich einige nützliche Tools für das Realtime-Monitoring in der Text-Console vorstellen. Die häufisten Fragen sind die Auslastung der CPU, Festplatte und des Netzwerk. Dafür gibt es folgende Tools.

htop – CPU / Auslastung / Prozesse Monitoring
iotop – Input/Output HDD Monitoring
iftop – Netzwerk Monitoring

sudo apt-get install htop iotop iftop

Logrotate

Mit Hilfe von Logrotate werden die Log-Datien aus dem Verzeichnis /var/log/ gepackt.

Im Verzeichnis /etc/cron.daily/logrotate ist ein Script gespeichert, welches Logrotate jeden Tag startet. Die Einstellung für Logrotate liegen in der Konfiguration /etc/logrotate.conf gespeichert.

sudo vim /etc/logrotate.d/dpkg

/var/log/dpkg.log {
  monthly                   # Monatlich
  rotate 12                 # Behalte 12 Stück
  compress                  # Komprimiert
  delaycompress             # Komprimiert nach dem verschieben
  missingok                 # Es ist OK, wenn kein Log da ist.
  notifempty                # Leere Dateien werden nicht verschoben
  create 644 root root      # Rechte ändern
}

Gepackte Logdateien ansehen

Log-Dateien im Verzeichnis /var/log/ werden per Log-Rotate nach einem Tag mit GNU ZIP gepackt. Will man sich den Inhalt ansehen, gibt es praktische Tools.

zless /var/log/syslog.1.gz
zcat /var/log/syslog.1.gz
zgrep "failed" /var/log/syslog.1.gz

NetworkManager entfernen

Wenn man vom NetworkManager zurück zu Network wecheln will, sind drei Schritt aus zu führen.

sudo service NetworkManager stop
sudo service network start
sudo apt-get remove NetworkManager

Erstellen Sie auch die Konfiguration für Network.

sudo vim /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

NetworkManager ohne GUI verwalten

Wenn man den NetworkManager (NM) ohne eine GUI verwenden will, kann man das Programm nmcli verwenden.

nmcli device status
nmcli device show eth0
nmcli connection show
nmcli general

Es ist auch möglich die Verbindung zu trennen und zu ändern.

nmcli device [connect/disconnect] eth0

Die Einstellung werden gespeichert im Verzeichnis /etc/NetworkManager/system-connections/.

sudo vim /etc/NetworkManager/system-connections/Kabelnetzwerkverbindung

[connection]
id=Kabelnetzwerkverbindung
uuid=245e5-2e4f-25ef-4c55-56ede3
type=ethernet
permissions=
secondaries=
timestamp=1453713048

[ethernet]
duplex=full
mac-address=F0:DE:F1:XX:XX:XX

[ipv4]
method=auto

[ipv6]
ip6-privacy=0
method=auto

Ubuntu – Systemd Netzwerknamen

Seit der Umstellung auf Systemd haben sich die Namen der Netzwerk-Adapter geändert. Die Schnittstellt hatte früher den Namen „eth0“, „eth1“ und heißt jetzt zum Beispiel „enp0s5“. Der Aufbau der Namen folgt einem Standard.

Der Aufbau ist wie folgt:

Two character prefixes based on the type of interface:
en -- Ethernet
sl -- serial line IP (slip)
wl -- wlan
ww -- wwan

Type of names:

b                          -- BCMA bus core number
c                          -- CCW bus group name
o[d]              -- on-board device index number
s[f][d]  -- hotplug slot index number
x                             -- MAC address

ps[f][d]  -- PCI geographical location
ps[f][u][..][c][i]  -- USB port number chain

Das Beispiel „enp0s5“ ist eine Ethernet Karte PCI am Bus 0 Slot 5.

Doch wie kann man diese Namen finden, wenn man eine Karte neu installiert hat?

Der Befehl ifconfig mit der Option -a zeigt all Netzwerk-Geräte an, auch wenn Sie noch nicht konfiguriert sind.

ifconfig -a
lshw -class network

Will man den Namen ändern in „eth0“ so muß mann eine UDev Regel hinzufügen. Ersetzen Sie die MAC Adresse und den Namen mit den Daten aus Ihrem System.

sudo vim /etc/udev/rules.d/10-network.rules

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="02:00:37:6f:ff:ff", KERNEL=="enp0s5", NAME="eth0"

Ändern Sie auch die Netzwerkeinstellungen und führen Sie einen Neustart durch.

sudo vim /etc/network/interfaces

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 10.0.0.100
netmask 255.255.255.0
gateway 10.0.0.1

Syslog – Protokollierung in System Log

Wenn man in seinem Script eine Statusmeldung in System-Log schreiben will, geht das mit dem Befehl logger.

logger "Hello World"

Es wird automatisch das Datum, Uhrzeit, Hostname und Benutzer zu dem Text in das System-Log geschrieben.

grep "Hello" /var/log/syslog

Will man den Speicherort ändern, so fügt man eine weitere Zeile in die Konfiguration hinzu.

sudo vim /etc/rsyslog.d/50-default.conf

user.* /var/log/user.log

sudo truncate -s 0 /var/log/user.log
sudo chown syslog:adm /var/log/user.log
sudo service rsyslog restart

Um Logging von unterschiedlichen Server an einem System zu sammeln, muss man die Einstellungen von Rsyslog ändern.

sudo vim /etc/rsyslog.conf

module(load="imudp")
input(type="imudp" port="514")

sudo service rsyslog restart

Jetzt kann man von einem anderen Server eine Nachricht senden.

logger -n 10.0.0.1 "Hello Server!"

Copyright © 2025 Weiter.info

Theme von Anders Norén↑ ↑