mysqldump: Geben Sie den Benutzernamen der Datenbankbenutzer in ~ / .my.cnf an

538
chr0mag

Ich betreibe einen gemeinsam genutzten Server mit mehreren Benutzern. Jeder Benutzer verfügt über eine eigene Datenbank in MySQL und die zugehörigen Anmeldeinformationen. Ich habe eine Vorlage systemd timer & service (dh sitetasks @ .timer & sitetasks @ .service ) erstellt, mit der täglich mysqldump ausgeführt wird, um jede Benutzerdatenbank zu sichern. Benutzerspezifische Informationen werden von mysqldump aus der Datei .my.cnf im Basisverzeichnis jedes Benutzers gelesen .

Ich kann dann den Systemd-Zeitgeber / -Dienst für einen bestimmten Benutzer ausführen (z. B. sitetasks@user1.service ), um die Datenbank dieses Benutzers zu sichern .

Ich kann jedoch keinen Weg finden, um den Datenbanknamen in .my.cnf anzugeben . Ich habe mir die Option --databases angesehen, aber dies ist nur ein Flag, keine Möglichkeit, eine Datenbank oder einen Satz von Datenbanken anzugeben.

Ich kann mir verschiedene Wege vorstellen, um dies anders zu lösen:

  1. Erstellen Sie benutzerspezifische System-Timer / -Dienste - aber dies lässt sich nicht gut skalieren
  2. Legen Sie eine .db-name-Datei in das Home-Verzeichnis des Benutzers ab und lesen Sie sie beim Aufruf von mysqldump (etwas wie mysqldump $ (cat .db-name)> backup.sql) - aber jetzt brauche ich eine zusätzliche Datei
  3. ähnlich wie # 2, aber die wp-config.php jedes Benutzers analysiert (die Datenbank ist für Wordpress)
  4. Stellen Sie sicher, dass der Datenbankname immer mit dem Benutzernamen übereinstimmt

Keines davon ist so skalierbar und portabel wie MySQLs vorhandene .my.cnf-Optionsdatei .

Gibt es eine Möglichkeit, einen Standarddatenbanknamen in .my.cnf anzugeben ?

1

1 Antwort auf die Frage

1
Jarek Jóźwik

Jeder Benutzer hat Zugriff auf die Datenbank, für die er Zugriffsrechte erhalten hat. Wenn Sie also den mysqldumpBefehl zum Speichern aller Datenbanken erteilt haben, --all-databaseswird nur die Datenbank dieses Benutzers gesichert, und natürlich alle allgemeinen Datenbankdateien, auf die er Zugriff hat. Normalerweise ist es information_schemanur. Die Dump-Größe wird dadurch nicht viel größer - es werden keine Informationen aus diesem Schema ausgegeben -, da es dynamische Informationen gibt.
Wenn Sie also die Berechtigungen für jeden Benutzer sicherstellen, haben Sie eine einfache Lösung zum Sichern dieser Benutzerdatenbanken, indem Sie einfach "alle Datenbanken" sichern.

Interessant. Ich hatte angenommen, dass mysqldump ohne Rechte für alle DBs fehlerhaft wäre. Es sieht so aus, als würde der Speicherauszug mit --all-database den Anweisungen CREATE TABLE und USE fehlen, die bei der Wiederherstellung nützlich sind, aber ich kann mir vorstellen, dass ich sie zwingen kann, diese mit einigen zusätzlichen Schaltern aufzunehmen. chr0mag vor 6 Jahren 0
Korrektur: --alle-Datenbanken enthalten Anweisungen zum Erstellen von Tabellen. Übergeben Sie --no-create-db, um CREATE TABLE wegzulassen. chr0mag vor 6 Jahren 1