MySQL DB-Ordner auf ander Platte verschieben geht nicht

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
tmiehle
Beiträge: 35
Registriert: 25.08.2004 08:08:24
Wohnort: Ulm

MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von tmiehle » 06.05.2011 10:33:42

Hallo,
ich habe in ein neu aufgesetztes System eine zweite Festplatte ( /daten) eingebaut, die als Speicherplatz für die MySQL Datenbank dienen soll.
Jetzt habe ich versucht die Daten umzuziehen (alles im root-Terminal):

Code: Alles auswählen

/etc/init.d/mysql stop
cp -a -r /var/lib/mysql/ /daten
Dann in der /etc/mysql/my.cnf die Zeile:
datadir = /var/lib/mysql
ändern in
datadir = /daten/mysql

Code: Alles auswählen

/etc/init.d/mysql start
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
Funktioniert nicht. Die /etc/mysql/my.cnf wieder zurückgesetzt.
MySQL gestartet, alte Konfiguration läuft.

Zweiter Versuch:

Code: Alles auswählen

/etc/init.d/mysql stop
Verzeichnis /var/lib/mysql umbenannt in irgendwas.

Code: Alles auswählen

ln -s /daten/mysql /var/lib/mysql
/etc/init.d/mysql start
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
Funktioniert wieder nicht.

Hat mir jemand einen Tip, warum es nicht geht?
Grüße
Tom

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von Liffi » 06.05.2011 10:36:52

Hat der mysql User die richtigen Rechte am neuen Verzeichnis?

Benutzeravatar
tmiehle
Beiträge: 35
Registriert: 25.08.2004 08:08:24
Wohnort: Ulm

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von tmiehle » 06.05.2011 10:44:46

Soweit ich sehe ja.
So wie ich das verstanden habe, sollte die Option "-a" beim Kopier-Befehl doch dafür sorgen, dass die Rechte beibehalten werden?

edit:

Code: Alles auswählen

ls -l /daten | grep mysql
drwx------ 2 mysql mysql     4096  2. Mai 08:29 mysql
ls -l /var/lib | grep mysql
drwx------ 5 mysql      mysql      4096  6. Mai 10:18 mysql
Was bedeutet die "2" und die "5" ?
Zuletzt geändert von tmiehle am 06.05.2011 10:50:19, insgesamt 1-mal geändert.

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von michaels » 06.05.2011 10:48:14

Zeig doch mal ein ls -l auf das neue MySQL Verzeichnis.
Steht in den Logs denn nichts?

Habe auch das MySQL Verzeichnis umgebogen und dazu nur den Eintrag in der my.cnf verändert.

Benutzeravatar
tmiehle
Beiträge: 35
Registriert: 25.08.2004 08:08:24
Wohnort: Ulm

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von tmiehle » 06.05.2011 10:51:25

Da war ich wohl zu langsam :-)

Wenn ich versuche die Datenbank zu starten ändert sich in der mysql.log leider ncihts.

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von Liffi » 06.05.2011 11:01:27

tmiehle hat geschrieben:Soweit ich sehe ja.
So wie ich das verstanden habe, sollte die Option "-a" beim Kopier-Befehl doch dafür sorgen, dass die Rechte beibehalten werden?
Ja, das habe ich ueberlesen :-). -a hat -r uebrigens schon mit drin.
edit:

Code: Alles auswählen

ls -l /daten | grep mysql
drwx------ 2 mysql mysql     4096  2. Mai 08:29 mysql
ls -l /var/lib | grep mysql
drwx------ 5 mysql      mysql      4096  6. Mai 10:18 mysql
Was bedeutet die "2" und die "5" ?
Anzahl der hardlinks.

Benutzeravatar
FANA
Beiträge: 482
Registriert: 30.03.2005 17:50:55

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von FANA » 06.05.2011 11:57:35

Zeig mal deine my.cnf und /etc/fstab

In anderen Logifles steht auch nix? Also die üblichen verdächtigen wie syslog etc...

flitschbirne
Beiträge: 23
Registriert: 04.07.2007 14:27:24
Kontaktdaten:

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von flitschbirne » 06.05.2011 12:22:03

Vielleicht kommst du mit "mysqlhotcopy" weiter. Dafür musst du noch nicht mal den MYSQL Dienst beenden:

Code: Alles auswählen

mysqlhotcopy --noindices --user=USER --password=PASSWORD DB_NAME /Verzeichnis/wo/man/es/hin/haben/will
Funktioniert allerdings nur wenn deine DB Tabellen im "MyISAM" Format vorliegen. Das "InnoDB" Format wird nicht funktionieren. Anschließend

Code: Alles auswählen

/etc/init.d/mysql stop
cp -R /wo/das/backup/liegt /var/lib/mysql/db_name
chown -R mysql:mysql /var/lib/mysql/db_name
find /var/lib/mysql/db_name -type d -exec chmod 700 {} +
find /var/lib/mysql/db_name -type f -exec chmod 660 {} +
cd /var/lib/mysql/db_name
myisamchk -rq *.MYI                #stellt Indizes wieder her
/etc/init.d/mysql start

Benutzeravatar
FANA
Beiträge: 482
Registriert: 30.03.2005 17:50:55

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von FANA » 06.05.2011 21:26:35

für InnoDB kannst du XtraBackup nehmen. Aber das manuelle Verschieben der Daten muss gehen. Ich hab das schon zig mal so gemacht - auch ohne XtraBackup...

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von habakug » 07.05.2011 08:55:31

Hallo!


Ich würde es so machen:

Code: Alles auswählen

# /etc/init.d/mysql stop
# mkdir /neues/verzeichnis
# chown -R mysql:mysql /neues/verzeichnis
# cd /var/lib/mysql
# cp -r mysql /neues/verzeichnis
# cp -r wpdb /neues/verzeichnis
# chown -R mysql:mysql /neues/verzeichnis/*
# cat /etc/mysql/my.cnf | grep datadir
datadir = /neues/verzeichnis
# /etc/init.d/mysql start
Jetzt werden die Dateien ibdata1, ib_logfile0 usw. neu erstellt. Bei deiner Methode hattest du sie mit kopiert. Das geht so wohl nicht.

Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
FANA
Beiträge: 482
Registriert: 30.03.2005 17:50:55

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von FANA » 07.05.2011 12:12:30

ibdata1 muss er mitnehmen, dort sind seine Daten drin...

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von rendegast » 07.05.2011 13:32:45

Code: Alles auswählen

strace [-e trace=file] -f -o /tmp/LOG.strace /etc/init.d/mysql start

Fürs Erste ein bind-Mount /var/lib/mysql -> /daten/mysql ?

Code: Alles auswählen

mount --bind  /daten/mysql  /var/lib/mysql
Zuletzt geändert von rendegast am 07.05.2011 13:40:30, insgesamt 3-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von habakug » 07.05.2011 13:34:20

Hallo!
ibdata1 muss er mitnehmen, dort sind seine Daten drin...
Ja richtig, er will ja keine leere Datenbank. Man kann den Daemon auch zum Sprechen bringen:

Code: Alles auswählen

# /etc/init.d/mysqld stop
# mysqld --verbose
110507 13:12:40  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
# chown -R mysql:mysql /neues/Verzeichnis/*
# mysqld --verbose
Mit leerer Datenbank:

Code: Alles auswählen

# /etc/init.d/mysqld stop
# mysqld --verbose
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
110507 13:10:27  InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Error: all log files must be created at the same time.
InnoDB: All log files must be created also in database creation.
InnoDB: If you want bigger or smaller log files, shut down the
InnoDB: database and make sure there were no errors in shutdown.
InnoDB: Then delete the existing log files. Edit the .cnf file
InnoDB: and start the database again.
110507 13:10:27 [Note] mysqld: ready for connections.
Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
tmiehle
Beiträge: 35
Registriert: 25.08.2004 08:08:24
Wohnort: Ulm

Re: MySQL DB-Ordner auf ander Platte verschieben geht nicht

Beitrag von tmiehle » 09.05.2011 07:45:34

Hallo und erstmal danke für die vielen Antworten.
Ich habe mal die

Code: Alles auswählen

mysql --verbose
versucht. Hier die Ausgabe mit funktionierendem Originalverzeichnis:

Code: Alles auswählen

110509  7:18:42 [Note] Plugin 'FEDERATED' is disabled.
110509  7:18:42  InnoDB: Started; log sequence number 0 44233
110509  7:18:42 [Note] Event Scheduler: Loaded 0 events
110509  7:18:42 [Note] mysqld: ready for connections.
Version: '5.1.49-3-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Debian)
Und hier das nicht funktionierende:

Code: Alles auswählen

110509  7:20:55 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'plugin' is read only
110509  7:20:55 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110509  7:20:55  InnoDB: Started; log sequence number 0 44233
110509  7:20:55 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'host' is read only
Dann habe ich wie dort geschrieben ein

Code: Alles auswählen

mysql_upgrade
versucht:

Code: Alles auswählen

Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock' 
mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect
FATAL ERROR: Upgrade failed
Das Logfile mit dem

Code: Alles auswählen

strace [-e trace=file] -f -o /tmp/LOG.strace /etc/init.d/mysql start
hat mich leider auch nicht weiter gebracht.
Erfolgreich war allerdings der Vorschlag mit

Code: Alles auswählen

mount --bind  /daten/mysql  /var/lib/mysql
Scheint jetzt alles zu funktionieren, danke! :THX:
Grüße
Tom

PS: Wie kann ich denn den Thread als gelöst markieren?

Antworten