Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:mysql

MySQL & MariaDB Spickzettel

Basics: select, update

Beispiel: Mediawiki Datenbank

echo "show tables;select * from user where user_name='Abc';" | mysql --user wikiuser --host dbserver --password=Geheim --database=wikidb

die SQL-Statements kann man natürlich auch in eine Datei schreiben und mit < reinleiten:

mysql --user wikiuser --host dbserver --password=Geheim --database=wikidb < tabelleundbenutzerzeig.sql


% mysql
mysql> show databases;
mysql> use wikidb;
mysql> show tables;

mysql> describe Users;

anzeigen

mysql> select user_name,user_email from user where user_name='Abc';"

ändern

mysql> update user set user_email = "Abc@xxx.x" where user = "Abc";

Query-Sammlung

Regexp - IP-Adressen

vielleicht gibt es ja noch eine elegantere Methode, aber dieses SQL-Statement findet IPv4-Adressen-ähnliche Konstrukte:

select servername,serverip from servertable where serverip REGEXP '[0-9.][0-9.]*';

Paypal-Transaktionscodes aus einer OTRS-Queue

Das Ticketsystem OTRS hatte bei einigen Mails wg. Umlaut-Verdauungsproblemen ein größere Anzahl von Dateien als "problem-email" in seinem Verzeichnis mail-spool abgelegt. Die Frage war: Sind dafür Tickets hinterlegt worden oder nicht?

diese Zeile (wenig elegant), zieht mir eine Liste der "Paypal-Transaktionscodes" aus der Datenbank (die Queue ID 19 ist hier die Paypal-Queue).

echo "select a.a_from,a.a_body from article as a,ticket as t where a.ticket_id = t.id and  t.queue_id=19;" | mysql -u root -pPASSWORT --database=otrs | awk -F'Transaktionscode: ' '{print $2}' | sed 's/\\n\\n\\n..*//' | sort > /tmp/db.transaktionscode

Die gewonnene Textdatei habe ich dann auf dem OTRS-Server mit dem Ergebnis von

mail-spool # grep "Transaktionscode: [^<]" * | awk '{print $8}' > /tmp/err.mail.transaktionscodes

verglichen → puh, anscheinend sind doch alle Mails im Ticketsystem

Datenbank nach UTF8 umwandeln

Das hätte ich nicht gedacht: Es gibt auch im Jahr 2020 noch latin1 in Default-Einstellungen, danke MariaDB für diese kleine Überraschung1).

Weil nach dem Upgrade die Server-Software (Zabbix) über latin1 schimpft und utf8 fordert, muss die Datenbank mal schnell umgebaut werden:

mysql -u$MYSQL_USER -p$MYSQL_PASSWORD < alter database $MYSQL_DATABASE CHARACTER SET utf8 COLLATE utf8_bin;'
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DATABASE -B -N -e "SHOW TABLES" | \ 
awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; SET foreign_key_checks = 1; "}' | \ 
mysql -D$MYSQL_DATABASE -u$MYSQL_USER -p $MYSQL_DATABASE

Passwort

Allgemein: wenn man ein MySQL-Passwort sucht, ist es vielleicht dort abgelegt:

% cat .my.cnf
[client]
host=dbserver
password=Geheim

Passwort Recovery (root darf das)

mysqld stoppen und mit --skip-grant-tables starten

Mit MySQL verbinden:

% mysql -u root

Folgende Zeilen im MySQL-Client eingeben:

mysql> UPDATE mysql.user SET Password=PASSWORD('neuespasswort') WHERE User='root';
mysql> FLUSH PRIVILEGES;

Quelle: Resetting lost mysql root password (archive.org)


Performance

Zuerst mal rausfinden, was langsam ist:

Das Log für die Langsamen Querys kann man u.a. in der my.cnf einschalten

# Log slow queries
log_slow_queries=/var/log/mysql/slowquery.log
long_query_time = 2
log_long_format

Will man eine "Top-Ten der langsamsten Queries":

mysqldumpslow slowquery.log -t 10 -s t

Performance 2

Um die Auslastung schnell in bunten Kurven zu sehen, empfehle ich Jet Profiler. Die freie Version zeigt nicht alles an, aber für einen Überblick ist das Tool dennoch hilfreich.2)

Weil dieser Spickzettel schon ein wenig älter ist, gibt es ein paar der nützlichen Links leider nur noch im Web-Archiv bei archive.org :-/


1)
mariadb.com: "In MariaDB, the default character set is latin1", abgerufen 2020-07-29
2)
Den Tipp bekam ich vom Sternen-Kolonist auf tauceti.net, bevor er es selber bloggte
de/sysadmin/tools/mysql.txt · Zuletzt geändert: 2020-07-29 23:00 von hella

Seiten-Werkzeuge

Mastodon Twitter