2010-02-15 22 views
5

Benim SELECT ... INTO OUTFILE bildirimi ile bazı izin sorunları yaşıyorum.Create/Write İzinler MySQL içinde

benim veritabanına oturum ve basit bir ihracat yapmak komutunu örn: Ancak

ERROR 1 (HY000): 
Can't create/write to file '/home/mropa/Photos/Desktop/TEST.txt' 
(Errcode: 13) 

, ben sadece yazmak:

mysql> select * from XYZ into outfile 'TEST.txt'; 
Query OK, 8287 rows affected (0.73 sec) 
mysql> select * from XYZ into outfile '/home/mropa/Photos/Desktop/TEST.txt'; 

ben cevap almak

Dosya, /var/lib/mysql/XYZ dizinine yazılmıştır. /etc/apparmor.d/usr.sbin.mysqld dosyasına baktım, burada mysql okuma ve yazma izinlerini tanımlamış görünüyor, ancak gerçekten nasıl değiştireceğimi bilmiyorum.

Mysql tablosunu beğendiğim dizine vermek için kendime nasıl izin verebilirim?

cevap

4

Sorun, dizin izinleri. mysqld current_user olarak çalışmıyor. Mysqld kullanıcısını hedef dizinlerinizde yazma izni olan (uygun, ancak güvenli değil) gruba ekleyin veya outfile yazmadan önce ve sonra hedef dizin izinlerinizi değiştirmeyi unutmayın.

+0

@dnagirl genellikle mysql komutunu "mysql -u mropa -p" ile başlatabilirim, böylece kullanıcı yazma izinleri olan 'mropa' olur. Cevabınızı biraz daha detaylandırabilir misiniz, tamamen anlayamıyorum. Teşekkürler. – mropa

+1

@mropa: mysql -u mropa -p 'yi yaptığınızda mysqld işlemine başlamıyorsunuz. Sadece giriş yapıyorsunuz. Outfile yazdığınızda, yazdığınız giriş kullanıcısı değil, mysqld işlemidir. Kabuğunuza mropa olarak giriş yaptığınızı ve mydb_user olarak mysql olarak giriş yaptığınızı düşünün. Ne mropa ne de mydb_user, mysql dosyasından yazarken yazıyor. Yazar, mysqld sürecinin sahibidir. – dnagirl

+0

yardımcı oldu, teşekkürler! – mropa

1

Bu belirli bir klasöre erişiminiz yok gibi görünüyor. Mysql'yi o konumun grup sahibine eklemelisiniz. Ben altında bilmiyorum

hangi kullanıcı size, ancak, altında mysql çalıştıran

chown mysql: mysql/home/mropa/Fotoğraflar/Masaüstü/günlüğe kaydettiği mysql kullanıcı ve MySQL grup sahibi olduğu anlamına gelir izin var. Daha sonra, izinlerin yazmayı içermesini sağlamalısınız, ancak bu yeterli olmalıdır.

Chown Command

2

(genellikle "mysql") mysqld çalıştıran kullanıcı tarafından yazılabilir bir dizin oluşturmak ve orada dosyayı yazabilir. intance için:

chmod a+w /home/mropa/mysql 
1

AppArmoru profilleri devre dışı bırakma/ayıklama hakkında bilgi için https://wiki.ubuntu.com/DebuggingApparmor bakınız. Özellikle bir uygulama sorunu olmayabilir. Mysqld'in çalıştırdığı kullanıcı, belirttiğiniz klasöre yazma iznine sahip olmayabilir. Hedef dizinde/dosyadaki izni kontrol edin.

0

mysql genellikle kullanıcı mysqld altında çalışır. izinler doğrudan apparmor ile çözülebilir. bkz. this answer