{"id":566,"date":"2013-06-14T06:01:16","date_gmt":"2013-06-14T05:01:16","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=566"},"modified":"2013-06-14T06:01:16","modified_gmt":"2013-06-14T05:01:16","slug":"mysql-datenbanken-auf-neuen-server-ubertragen","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/mysql-datenbanken-auf-neuen-server-ubertragen\/","title":{"rendered":"MySQL Datenbanken auf neuen Server \u00fcbertragen"},"content":{"rendered":"<p>Mit diesem Artikel m\u00f6chte ich euch ein Tutorial bieten, dass erkl\u00e4rt wie Datenbanken von einem MySQL Server auf einen anderen \u00fcbertragen werden k\u00f6nnen. Es kann euch damit bei der Konsolidierung oder Migration von MySQL-Servern gute Dienste leisten.<\/p>\n<p>Um Inkonsistenzen zu vermeiden empfehle ich den MySQL-Quell-Server in den Read-Only Modus zu schalten. Dazu ist zuerst eine Anmeldung am MySQL Server erforderlich.<\/p>\n<pre>\r\nmysql -u root -p\r\n<\/pre>\n<p>Einschalten des Read-Only Modus:<\/p>\n<pre>\r\nmysql> set GLOBAL read_only = true;\r\n<\/pre>\n<p>M\u00f6chte man den Read-Only Modus sp\u00e4ter wieder abschalten, so meldet man sich wieder am Server an und f\u00fchrt den folgenden Befehl aus.<\/p>\n<pre>\r\nmysql> set GLOBAL read_only = false;\r\n<\/pre>\n<p>Es gibt im Prinzip mehrere M\u00f6glichkeiten die Datenbanken auf den neuen Server zu transferieren. Ich entscheide mich hier f\u00fcr den Weg der in meisten F\u00e4llen zum Ziel f\u00fchren sollte. Wir k\u00f6nnen die gew\u00fcnschten Datenbanken nun mit dem folgenden Befehl sichern. Um die Zeit f\u00fcr den Transfer \u00fcber das Netzwerk zu reduzieren wird der Dump noch mit gzip gepackt.<\/p>\n<pre>\r\nshell> mysqldump -u root -p --databases db_name1 [db_name2 ...] >my_databases.sql\r\nshell> gzip my_databases.sql\r\nshell> scp my_databases.sql.gz user@zielserver:\/zielverzeichnis\/\r\n<\/pre>\n<p>Auf dem Zielsystem k\u00f6nnen die Datenbanken nun mit gunzip entpackt und in die Datenbank eingespielt werden.<\/p>\n<pre>\r\nshell> gunzip my_databases.sql.gz\r\nshell> mysql -u root -p < my_databases.sql\r\n<\/pre>\n<p>Jetzt m\u00fcssen wir noch daf\u00fcr sorgen, dass auf dem neuen MySQL-Server die gleichen Benutzer wie auf dem Quellserver hinzugef\u00fcgt werden und diese die gleichen Berechtigungen auf die Datenbanken erhalten wie sie sie auf dem Quellsystem besa\u00dfen. Ich habe mich daf\u00fcr entschieden die ben\u00f6tigten Benutzer und Berechtigungszuordnungen mit dem folgenden Abfragemuster aus der <code>mysql<\/code>-Datenbank des Quellservers in eine Textdatei zu schreiben. Dazu muss ich die Tabellen <code>user<\/code> und <code>db<\/code> abfragen.<\/p>\n<pre>\r\nSELECT someColumn FROM `table`\r\nWHERE foo LIKE '%foo%'\r\nINTO OUTFILE '\/tmp\/dbdump.txt'\r\n<\/pre>\n<p>Wie genau obige Abfrage aussieht ist von Fall zu Fall unterschiedlich. In meinem Fall habe ich in zwei Abfragen die Dateien <code>mysql_user.txt<\/code> und <code>mysql_db.txt<\/code> erstellt. Diese sind nun auf den Zielserver zu \u00fcbertragen.<\/p>\n<p>Auf dem Zielserver m\u00fcssen die Inhalte dieser Dateien nun wieder in die Tabellen <code>user<\/code> und <code>db<\/code> der Datenbank <code>mysql<\/code> eingespielt werden. Wer auf Nummer sicher gehen m\u00f6chte testet den Import mit der Datenbank <code>test<\/code>, welche auf jedem MySQL Server vorhanden sein sollte. Das Einlesen der Dateien erledigt man mit dem <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/de\/load-data.html\" title=\"MySQL Developer Manual\" target=\"_blank\">LOAD DATA INFILE<\/a> Kommando.<\/p>\n<pre>\r\nLOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'\r\n    [REPLACE | IGNORE]\r\n    INTO TABLE tbl_name\r\n    [FIELDS\r\n        [TERMINATED BY 'string']\r\n        [[OPTIONALLY] ENCLOSED BY 'char']\r\n        [ESCAPED BY 'char']\r\n    ]\r\n    [LINES\r\n        [STARTING BY 'string']\r\n        [TERMINATED BY 'string']\r\n    ]\r\n    [IGNORE number LINES]\r\n    [(col_name_or_user_var,...)]\r\n    [SET col_name = expr,...)]\r\n<\/pre>\n<p>Bei einigen Ubuntusystemen, auf denen <a href=\"http:\/\/de.wikipedia.org\/wiki\/AppArmor\" title=\"Wikipedia: AppArmor\" target=\"_blank\">AppArmor<\/a> l\u00e4uft kann es zu einem Fehler beim Einlesen der Datei kommen. Wer von diesem Problem betroffen ist, kann <a href=\"http:\/\/stackoverflow.com\/questions\/4215231\/mysql-load-data-infile-error-code-13\" title=\"L\u00f6sung zu MySQL und AppArmor\" target=\"_blank\">hier<\/a> eine L\u00f6sung finden.<\/p>\n<p>Damit ist es geschafft. Unsere Datenbanken sind nun auf dem neuen Server angekommen und wir k\u00f6nnen den alten im besten Fall abschalten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit diesem Artikel m\u00f6chte ich euch ein Tutorial bieten, dass erkl\u00e4rt wie Datenbanken von einem MySQL Server auf einen anderen \u00fcbertragen werden k\u00f6nnen. Es kann euch damit bei der Konsolidierung oder Migration von MySQL-Servern gute Dienste leisten. Um Inkonsistenzen zu vermeiden empfehle ich den MySQL-Quell-Server in den Read-Only Modus zu schalten. Dazu ist zuerst eine<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/mysql-datenbanken-auf-neuen-server-ubertragen\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51,3],"tags":[192,58,191,59,35,60],"class_list":["post-566","post","type-post","status-publish","format-standard","hentry","category-linux","category-tutorials","tag-konsolidierung","tag-linux","tag-migration-mysqldump","tag-mysql","tag-server","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=566"}],"version-history":[{"count":9,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/566\/revisions"}],"predecessor-version":[{"id":582,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/566\/revisions\/582"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}