2010-08-19 2 views
1

je veux utiliser des bases de données dans D: \ xampp \ mysql \ data dans mon mysql linux sans le déplacer. donc je peux travailler sur eux à la fois Linux et WindowsLinux: MySQL: comment utiliser une base de données mysql sur un NTFS monté en tant que base de données mysql sous linux?

voici ce que je l'ai fait:

# mount -t ntfs -o uid=mysql,gid=mysql,dmask=002,fmask=113 /dev/sda5 /media/public/ 
# cd /var/lib/mysql 
# ln /media/public/xampp/mysql/data/my_db -s 
# chown -R mysql:mysql /var/lib/mysql/my_db 

mais MySQL ne peux pas lire les tables de base de données

use my_db 
show tables 

donne l'erreur: MySQL ne peut pas lire le répertoire './my_db'

il semble que ce soit un problème d'autorisation. que devrais-je faire?

PS: il existe une seule machine avec deux systèmes d'exploitation, Windows et Linux. et je veux utiliser le même répertoire que datadir lorsque je suis sous Windows ou Linux.

PS: j'ai essayé ntfs-3g. maintenant partition de monticule et tout son contenu appartient mysql:mysql. le/var/lib/mysql/my_db est aussi mysql:mysql. mais je encore obtenu l'erreur suivante sur show tables

erreur 1018 (HY000): Impossible de lire le répertoire de « ./my_db/ » (ErrorNo: 13)

+0

est-il correct d'utiliser un lien symbolique dans/var/lib/mysql comme base de données? – Alexar

+0

Avez-vous déjà fini par le faire fonctionner? – dborba

+0

malheureusement, je ne pouvais pas. J'ai fourni des résultats d'essais en mettant à jour la question. et oui ... j'ai abandonné. – Alexar

Répondre

2

Tout d'abord, ne jamais laisser plus d'une instance de MySQL pour utiliser les fichiers de données en même temps. C'est une recette pour le désastre. Deuxièmement, pourquoi avez-vous besoin du serveur MySQL sur les deux machines? Pourquoi ne pas simplement utiliser le client sur la machine Linux pour se connecter via le réseau au serveur sur la machine Windows?

Troisièmement, si vous vraiment doit le faire, je suggère d'activer master-master replication entre eux. Ainsi, chaque serveur disposerait de son propre stockage et communiquerait automatiquement les modifications.

Modifier

Ahhh, attendez ... Êtes-vous le double amorçage? Si c'est le cas, vous devez vous assurer que l'intégralité du répertoire /var/lib/mysql est lisible par l'utilisateur mysql. Il ne vous suffit pas de chmoder le dossier my_db.

Oh, et comment avez-vous un lien entre le point de montage dans le répertoire de données pour MySQL (Ce n'est pas dans la liste des commandes) ...

+0

merci pour votre réponse d'information. Je l'ai utilisé. mais ce n'est pas mon cas. il n'y a qu'une seule machine avec deux O.S.s. Je veux utiliser un seul répertoire comme datadir à la fois quand je me suis connecté sous Windows et Linux. – Alexar

+0

J'ai édité cela. Tant qu'un serveur est actif à la fois, vous devriez être ok (scénario Dual-Boot) ... – ircmaxell

+0

ye, dual booting. et j'utilise 'ln -s' pour créer un lien logiciel du répertoire de base de données dans/var/lib/mysql – Alexar

0
ls /media/public/xampp/mysql/data/my_db 

OK, avez-vous souligné la config datadir dans mon. cnf à /media/public/xampp/mysql/data alors MySQL sait où chercher?

Re: modifier:

ln /media/public/xampp/mysql/data/my_db -s 

Oh ... Voulez-vous dire ln -s /media/public/xampp/mysql/data/my_db /var/lib/mysql/my_db?

mount -t ntfs 

ntfs vous donne le support du système de fichiers NTFS du noyau, qui est en lecture seule.Si vous voulez être en mesure d'écrire dans les fichiers, vous aurez besoin de ntfs-3g, en supposant qu'il est installé (la plupart des distributions modernes le font).

+0

shoud je 'mount -t ntfs-3g ...'? – Alexar

+0

J'ai utilisé ntfs-3g. maintenant/media/public est mysql: mysql. mais toujours erreur – Alexar

+1

hmm, sonne toujours permissionsey. Quelle distribution utilisez-vous, SELinux ou AppArmor sont-ils en cours de lecture? – bobince

0

Vous devrez peut-être ajouter le nouveau répertoire de données à la liste des répertoires dans /etc/apparmor.d/usr.sbin.mysqld selon ce blog: http://www.lucasward.net/2011/05/moving-mysql-data-directory-beware-of.html

comme ceci:

/new-mysql-datadir/ r, 
/new-mysql-datadir/** rwk, 

vous pouvez confirmer que c'est votre problème en regardant dans/var/log/messages et de voir si vous avez des messages d'erreur semblable à ceci:

Aug 6 14:47:23 tinybeast kernel: [20254.145552] type=1400 audit(1344228443.102:54): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=24202 comm="apparmor_parser" 
Aug 6 14:47:23 tinybeast kernel: [20254.165438] type=1400 audit(1344228443.122:55): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/media/data/mysqldata/tinybeast.lower-test" pid=24206 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0 
Aug 6 14:47:23 tinybeast kernel: [20254.165718] type=1400 audit(1344228443.122:56): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/media/data/mysqldata/tinybeast.lower-test" pid=24206 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0 
Aug 6 14:47:23 tinybeast kernel: [20254.167606] type=1400 audit(1344228443.126:57): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/media/data/mysqldata/mysql/plugin.frm" pid=24206 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0 
Aug 6 14:47:23 tinybeast kernel: [20254.186759] type=1400 audit(1344228443.146:58): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/media/data/mysqldata/ibdata1" pid=24206 comm="mysqld" requested_mask="rw" denied_mask="rw" fsuid=0 ouid=0 

reconnaître mes sources, j'ai tout appris ceci de l'article de blog mentionné ci-dessus, je signale juste les parties particulières ici au cas où le lien au poteau va jamais périmé.

Questions connexes