Views aus MySQL-dumps extrahieren

Mit folgendem Oneliner kann man alle Views aus einem Datenbankdump extrahieren.

grep -A 16 "Final view structure" dumpdatei.sql > viewdatei.sql

Hierbei ist darauf zu achten, das für jede Datenbank einzeln zu tun, da im Ergebniss nicht die „USE <datenbank>“ Zeilen mit heraus gegrept werden.

Veröffentlicht unter MySQL

Rechte eines PostgreSQL Users auf Tabellen übersichtlich auflisten

Zum auflisten der Rechte eines Usern auf Tabellen in einer Datenbank verbindet man sich zuerst mit

\c datenbank

mit der Datenbank.
Als nächstes fragt man die Rechte für den User „meinuser“ mit folgender Query ab:

SELECT grantee
 ,table_catalog
 ,table_schema
 ,table_name
 ,string_agg(privilege_type, ', ' ORDER BY privilege_type) AS privileges
FROM information_schema.role_table_grants 
WHERE grantee = 'meinuser' 
GROUP BY 1, 2, 3, 4;

MySQL performance_schema im laufenden Betrieb deaktivieren

Zum deaktivieren des performance_schema bei MySQL ist normalerweise eine Änderung der my.cnf notwendig, dort muß der Parameter

performance_schema = OFF

eingetragen werden und dann ein Neustart der Datenbank durchgeführt werden.

In manchen Situationen ist ein Neustart aber nicht möglich oder erwünscht. In einem solchen Fall kann man das performance_schema daran hindern, Daten zu sammeln indem man in der Tabelle setup_consumers eine Anpassung vornimmt.

Bei MySQL 5.5 führt dieses Statement zum Erfolg

update performance_schema.setup_consumers set enabled='NO' where name='events_waits_current';

Wohingegen bei MySQL 5.6 folgendes Statement das Richtige ist

update performance_schema.setup_consumers set enabled='NO' where name='global_instrumentation';
Veröffentlicht unter MySQL

MySQL-Replikation resyncen

Eine MySQL-Replikation die „out of sync“ ist kann man folgenderweise resyncen:

Zuerst auf dem Slave

mysqldump -h <masterhost> -u root -p --opt --master-data --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases --add-drop-database --result-file=fulldump.sql

ausführen.
Als nächstes sämtliches Logging auf dem Slave (binlog, slow-query-log, general-log u.s.w.) auskommentieren und den slave neu starten.
Dann auf der Slavedatenbank

stop slave;

ausführen.
Der nächste Schritt ist, den Dump vom Master mit

mysql -h <slavehost> -u root -p < fulldump.sql

auf der Slavedatenbank einzuspielen.
Nun kann ich in der Konfiguration der Slavedatenbank alles was ich auskommentiert habe wieder einkommentieren und die Datenbank durchstarten.
Zum Schluß führe ich auf dem Slave noch zur Sicherheit ein

start slave;

aus und kann dann mit

show slave status\G

den Erfolg meiner Resyncaktion überprüfen.

Veröffentlicht unter MySQL

Verbindung mit einem ReplicationSet in MongoDB

Um eine Verbindung zu einem ReplicatioSet aufzubauen benutzt man in MongoDB 3.2

mongo --host <host1>:<port>,<host2>:<port>,<host3>:<port>/<ReplicationSet> <Database> -u <User> -p <Password>

Das Format des Connectionstrings hat sich in MongoDB 3.4 geändert, es sieht jetzt folgendermaßen aus:

mongo "mongodb://<host1>:<port>,<host2>:<port>,<host3>:<port>/<Database>?replicaSet=<ReplicationSet>" -u <User> -p <Password>

Files die älter als x Minuten sind löschen

find <pfad> -mmin +2 -type f | grep <suchmuster> | xargs rm

Wobei <pfad> der Pfad zum Verzeichniss in dem gelöscht werden soll und <suchmuster> eine zusätzliche Eingrenzungsmöglichkeit ist.
Im Beispiel werden alle Dateien die älter als 2 Minuten sind (-mmin +2) gelöscht.
Wenn man dieses Kommando minütlich von cron ausfühlen lässt werden alle älteren Dateien Weggeworfen.

Veröffentlicht unter Linux