2008-10-23 18 views
11

Bir dosya dosyasına yazılan bir MySQL sorgusuyla çalışıyorum. Bu sorguyu her gün ya da iki kez çalıştırıyorum ve bu yüzden de su ya da sudo'ya başvurmak zorunda kalmadan çıkış dosyasını kaldırabilmek istiyorum. Bunun gerçekleşmesini düşünebilmemin tek yolu, mysql kullanıcısından başka birinin sahip olduğu gibi yazılmış bir dosyaya sahip olmaktır. Mümkün mü?MySQL yazma dosyalarını farklı bir kullanıcı olarak nasıl alabilirim?

Düzenleme: Çıktıyı bir dosyaya yönlendirmiyorum, bir dosyaya çıkış yapmak için bir seçme sorgusunun INTO OUTFILE kısmını kullanıyorum.

yardımcı olursa: Eğer başka bir kullanıcı cron sorgusu çalıştırmak varsa

 
mysql --version 
mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2 

cevap

10

Çıkış dosyası, istemci işleminiz tarafından değil, mysqld işlemi tarafından oluşturulur. Bu nedenle çıktı dosyasının mysqld işleminin uid ve gidine ait olması gerekir.

Bir uid altındaki bir işlemden veya dosyaya erişebilen bir adımdan erişiyorsanız, dosyaya erişmek için sudo yapmaktan kaçınabilirsiniz. Başka bir deyişle, mysqld, uid'e ait dosyaları ve "mysql"/"mysql" komutlarını yaratırsa, kendi hesabınızı "mysql" grubuna ekleyin. Ardından, dosyanın izin moduna grup erişimi de dahil olmak kaydıyla, dosyaya erişebilmeniz gerekir.

Düzenleme:

Sen rwxrwxrwt bir dizin izni modu ile,/tmp dosya siliyorsunuz. Yapışkan biti ('t'), dosya veya dizin üzerindeki izinlerden bağımsız olarak, uid dosyanızın sahibi ile aynıysa dosyaları kaldırabileceğiniz anlamına gelir.

Çıktı dosyanızı yapışkan biti olmayan başka bir dizine kaydederseniz, dosyayı normal şekilde çıkarabilmeniz gerekir.

yapışkan (8) için kılavuz sayfasında bu pasaj oku

YAPIŞKAN DİZİNLERİNİZİ

bir dizin 'yapışkan 'biraz ayarlanır ya da daha doğru bir ekleme okunur dizin olur, dosyaların silinmesinin kısıtlandığı bir dizin. Yapışkan bir dizindeki bir dosya, kullanıcı dizin için yazma izni varsa ve kullanıcı dosyanın sahibi, dizinin sahibi veya süper kullanıcısa, yalnızca bir kullanıcı tarafından kaldırılabilir veya yeniden adlandırılabilir. Bu özellik, genel olarak yazılabilir olması gereken/tmp gibi dizinlere yararlı bir şekilde uygulanır, ancak kullanıcılara, diğerlerinin dosyalarını rasgele silme veya yeniden adlandırma lisansını reddetmelidir.

+1

yapabilir bu kadar "mysql"/"mysql" ve modifiye 666. Ekledim kendimi mysql grubuna yazdım ve hala onu silemiyorum. –

+0

Dosyanın bulunduğu dizinde sahiplik ve izinler nelerdir? –

+0

I * bence * Bill'in UNIX'teki bir dosyayı silebilmek için (bu, dir listelemeyi günceller) içeren direkte yazma izninizin olması gerekir. Yani "chgrp mysql" dir ve "chmod ug + rwX" mysql-group kullanıcısına direk yazma izni verir. – joelhardi

1

, o kullanıcı olarak dosya oluşturur.

5

"SELECT ... INTO OUTFILE" sözdizimini kullanmadı, no.

Sorguyu (yani istemci) başka bir kullanıcı olarak çalıştırmanız ve çıktıyı yeniden yönlendirmeniz gerekir. Örneğin, istediğiniz zaman aşağıdaki komutu çalıştırmak için crontab düzenleyin:

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt 

size komutunu ekledik crontab var kullanıcı olarak /tmp/outfile.txt yaratacak O.

+0

Boru tesisatının, "outfile" ile karşılaştırıldığında farklı sonuçlar vereceğini unutmayın. Örneğin, borulama ilk satırdaki sütun isimlerini, \ N vb. Yerine NULL (Ubuntu'da. Ayrıntılar diğer işletim sistemlerinde farklılık gösterebilir) içerir. –

1

Sadece

sudo gedit /etc/apparmor.d/usr.sbin.mysqld 

ve

/var/www/codeigniter/assets/download/* w, 

ve

sudo service mysql restart 

eklerim Ve ben SELECT INTO OUTFILE kolayca dosya sahip olunur hiçbir dosya adı

İlgili konular