Wird der Befehl mysqldump auch alle Ansichten sichern, die in der Datenbank vorhanden sind, oder gibt es einen speziellen Befehl dafür?

10

Ich versuche, meine gesamte Datenbank zusammen mit den Ansichten zu sichern. Ich werde mysqldumpBefehl verwenden. Ich habe mich gefragt, ob dadurch alle Ansichten kopiert werden oder ob ich dafür einen separaten Befehl verwenden muss.

Bitte schlagen Sie mir eine Antwort vor. Jede Hilfe wird sehr geschätzt.

vinny
quelle

Antworten:

9

Es gibt keine spezielle Option zum Speichern von Ansichten.

Sie können Folgendes versuchen:

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

Sie sollten in der Lage sein, die Ansichten zu sehen. Dies zeigt an, dass beim Speichern von Datenbanken die Ansicht mitgeliefert wird.

Ein weiterer Stunt, den Sie ausprobieren können, um nur die Ansichten zu erhalten, ist folgender:

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

Versuche es !!!

RolandoMySQLDBA
quelle
Vielen Dank für eine solche erklärende Antwort. Das Problem ist, dass meine Datenbanken sehr groß sind, daher plane ich, jeweils eine zu kopieren. In all diesem Durcheinander muss ich auch 'Ansichten' kopieren, damit ich den Befehl --all-database nicht verwenden kann. Bitte schlagen Sie eine Möglichkeit vor, Ansichten von MySQL DB Server zu kopieren.
Vinny
Geben Sie also anstelle von --all-databasesdie gewünschte Datenbank an.
Derek Downey
1

Die beste Antwort dafür ist wahrscheinlich , dieses durch olliiiver , die ich etwas geändert haben. Es exportiert speziell eine Drop-Table-Abfrage und eine Ansicht zum Erstellen oder Ersetzen von Ansichten für jede Ansicht im System, ohne mit Tabellen herumspielen zu müssen. Die Drop-Table-Abfrage ist häufig wichtig, da mysqldump anscheinend gerne Ansichten als Tabellen neu erstellt, es sei denn, Sie fügen jede Ansicht in einen eigenen Parameter --ignore-table ein, was ärgerlich wäre. Es verwendet INFORMATION_SCHEMA.

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

Wenn Sie so etwas in ein Shell-Skript umwandeln möchten, empfehle ich außerdem, den Parameter --defaults-extra-file = CREDSFILENAME zu verwenden, damit Sie im Skript nicht user / pass angeben müssen.

Die Anmeldeinformationsdatei sieht folgendermaßen aus:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
quelle