Wie kann ich eine MySQL-Datenbank ohne Umleitung importieren / exportieren?

7

Mir wurde gesagt, dass die Umleitung über die Shell (z. B. <und >) (nicht immer) die Sortierung einer Datenbank (.eg utf8) beeinflussen kann. Wie kann ich einen Export importieren, ohne ihn umzuleiten, damit ich mir darüber keine Sorgen machen muss?

Xenoterracid
quelle
Noch nie davon gehört. Haben Sie einige Beispiele / Beweise dafür? Ich glaube nicht, dass die Umleitung so etwas tut, da * nix UTF8 vollständig kennt und es so behandelt, wie es sollte.
DrColossos
@DrColossos, möglicherweise nicht korrektes Einstellen der Codepage in einer Windows-Eingabeaufforderung kann zu Verschlüsselung führen.
Synetech
Ich habe immer noch die Absicht, zurück zu gehen und jemanden zu fragen, der den Grund dafür versteht ... weil ich mich nicht oft genug damit beschäftige.
Xenoterracide

Antworten:

4

Es gibt immer das Dienstprogramm mysqlimport , jedoch müsste Ihre Quelle durch begrenzte Werte begrenzt sein ... z. B. durch "SELECT * FROM ... INTO OUTFILE ...".

Wenn Sie große Datenmengen verschieben, ist es möglicherweise ohnehin schneller, diese Massenlademethode zu verwenden.

Beachten Sie jedoch die Konsequenzen, die die Replikation haben kann.

randomx
quelle
Was ist mit einem Exportprogramm? Ich bin damit einverstanden, dass es auch eine Möglichkeit für eine ausführbare Datei geben sollte, eine Quelldatei direkt zu lesen und zu schreiben, aber andererseits stammen diese von * nix, wo Umleitung und Piping viel häufiger verwendet werden als unter Windows.
Synetech
Wenn Sie nach einer GUI / Windows-Oberfläche suchen, mit der Sie arbeiten können, versuchen Sie TOAD für MySQL. quest.com/toad-for-mysql
randomx
Das Befehlszeilentool kann auch Dateien direkt lesen / schreiben.
Synetech
2

Möglicherweise möchten Sie diesen Befehl auf dem Importserver ausführen

SHOW CREATE DATABASE dbname;

Dies zeigt Ihnen die Standardkollatierung der Datenbank, in die Sie importieren möchten.

Sie können bei Bedarf auch die Sortierung der Importdatenbank ändern .

UPDATE !!!

Zunächst würde ich mir ansehen, was das Betriebssystem für den Zeichensatz sagt. Führen Sie in der Linux-Befehlszeile einfach Folgendes aus:

echo ${LANG}

Aus MySQL-Sicht

Sie können den Standardzeichensatz in mysqldump explizit benennen

--default-character-set (default is utf8)

Sie können es im MySQL-Client sehen:

mysql> show variables like '%charac%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Versuche es !!!

Für die Sortierung müssen Sie möglicherweise eine oder mehrere Umgebungsvariablen wie diese festlegen:

mysql> show variables like '%coll%';<BR>
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

Legen Sie diese beim Export für mysqldump explizit fest und importieren Sie sie für mysql wie folgt:

mysqldump -h... -u... -p... --default-character-set=utf8 --triggers --routines source_db | mysql -h... -u... -p... --collation_connection=latin1_swedish_ci -A -Dtarget_db
RolandoMySQLDBA
quelle
1
Ich denke nicht, dass dies die Frage vollständig beantwortet. Ich denke, die Frage bezieht sich auf die falsche Konvertierung, während die Ausgabe des Backups in eine .sqlDatei geleitet wird, und nicht auf die Änderung der Sortierung. Das Problem scheint also im Export selbst zu liegen, nicht in der Zusammenstellung der Tabelle.
DrColossos
Meine Antwort wurde aktualisiert.
RolandoMySQLDBA
1
+1 Ich denke, die Standard-Zeichensatzoption ist der wichtige Teil und eine gute Erklärung!
DrColossos
@DrColossos +1 in Danke, dass du über meine Schulter geschaut und sichergestellt hast, dass ich die Frage kontextuell beantwortet habe !!!
RolandoMySQLDBA
;) Egal, ich habe auch etwas Neues gelernt!
DrColossos
1

Nun, Sie könnten sich bei MySQL anmelden und Folgendes tun:

mysql> source myfile.sql

Das nimmt die Shell insgesamt aus dem Bild - aber ich würde trotzdem empfehlen, Umgebungsvariablen wie zu überprüfen NLS_LANG.

Gaius
quelle
1
oder mysql -e "source myfile.sql"
JackLeo