2010-02-08 11 views
69

için reddediyorum PHP'de her zaman MySQL sorguları kullanıyorum, ancak LOAD VERİ YÜKLEME sürümünü denediğimde, şu hatayı alıyorum #1045 - Access denied for user 'user'@'localhost' (using password: YES) Bunun ne anlama geldiğini bilen var mı?Erişim bilgilerini MySQL

cevap

-4

Muhtemelen 'user'@'localhost' için sağladığınız parola yanlıştır.

+1

ben öyle düşünmüyorum. Aynı şifreyle diğer sorguları yapabilirim. – Brian

8

MySQL kullanıcınızın verilen FILE ayrıcalığına sahip olduğundan emin olun.

Paylaşılan web üzerinde barındırma varsa, bu barındırma sağlayıcınız tarafından engellenen bir şans var.

+0

Paylaşılan bir web barındırma üzerinde: "LOAD DATA LOCAL INFILE" işlevini kullanmak yararlı olur mu? – Peter

137

Bu soruna yeni girdim. SQL deyimime "LOCAL" eklemek zorunda kaldım.
LOAD DATA INFILE '{$file}' INTO TABLE {$table}

yazdıklarınıza "YEREL" ekleyin ve izin sorunu uzağa gitmeli:

Örneğin, bu izin sorununu verir. Bunun gibi:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}

+8

Bu farklı bir şey. Dosyanızı sunucuya geçici bir dizinde yükler. Bu bazen gereklidir, ancak eğer sistem zaten MySQL sunucusundaysa, sadece gereksiz iş yapıyorsunuz demektir. – jeffcook2150

+0

Evet bu hile yaptım, ben veritabanı sunucusu bağlantı noktası ssh üzerinde iletiyordu ve sanırım LOCAL parçası – mike

+0

@jeremysawesome benim için uzak veritabanı sunucusunda dosya arıyordu benim için bu hata üretir: Hata Kodu: 1148 Bu MySQL sürümünde kullanılan komutlara izin verilmiyor. Bu sorun için mysql dosyasının local-infile = 1 olarak değiştirilmesi ve bunun da başarısız olması gibi bazı yanıtlar denedim. – OrwellHindenberg

20

Bu sorunu yaşadım. Ben aradım ve tatmin edici bir cevap bulamadım. Aramalarımın sonuçlarının altında özetliyorum.

erişim hatası anlamına gelebilir yalanladı: (. Veritabanında HİBE DOSYASINI * user @ için 'şifre' tarafından belirlenen 'Localhost'a')

  • 'kullanıcı' @ DOSYA ayrıcalığı yok 'localhost' ; veya, yüklemeye çalıştığınız dosya mysql sunucusunda çalışan makinede mevcut değil (LOAD DATA INFILE kullanılıyorsa); veya yüklemeye çalıştığınız dosya yerel makinenizde mevcut değil (LOAD DATA LOCAL INFILE kullanılıyorsa); veya,
  • yüklemek çalıştığınız dosya dünyanın okunabilir değil (dosyayı ve dünyaca okunabilir olması tüm üst dizinleri gerekir: 755 dizinin chmod ve 744 file.dat chmod)
+0

+1 version' bu MySQL ile izin verilmez: Bu benim için çalıştı: _The dosya çalışıyoruz yüklemek için dünya okunabilir değil (dosya ve tüm ana dizinleri dünyaca okunabilir olması gerekir: chmod 755 dizini; ve, chmod 744 file.dat) _. Tüm dizinlerimdeki izinleri değiştirmedim – gavdotnet

+1

User Tatiana, yalnızca tüm sunucu için veritabanı başına FILE ayrıcalığını veremeyeceğinizi belirtir. Hibe komutu "kullanıcı adı '' parola '' IDENTIFIED BY '' kullanıcı adına '*. * Üzerinde GRANT FILE olacaktır. – JAL

+2

@JAL Sanırım "GRANT FILE ON \ *. \ * Kullanıcısına ..."- Muhtemelen yıldız karakterleri –

3

Lyon dizisi bana çok iyi bir ipucu verdi: Pencerelerde, slash'leri kullanmalı ve ters eğik çizgi kullanmamalıyız. Bu kod benim için çalışıyor: Bu komutu kullanarak

File tempFile = File.createTempFile(tableName, ".csv"); 
    FileUtils.copyInputStreamToFile(data, tempFile); 

    JdbcTemplate template = new JdbcTemplate(dataSource); 
    String path = tempFile.getAbsolutePath().replace('\\', '/'); 
    int rows = template.update(MessageFormat 
      .format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''", 
        path, tableName)); 
    logger.info("imported {} rows into {}", rows, tableName); 

    tempFile.delete(); 
11

Dene: Bu çalışması gerekir

load data local infile 'home/data.txt' into table customer; 

. Benim durumumda çalıştı.

+0

soyuldu bu benim için çalıştı, neden bu downvoted – metaprogrammer

+0

' ERROR 1148 (42000) emin değilim: Kullanılan bu MySQL sürümü ile kullanılamaz izin ' – Stewart

2

Aynı sorunu yapıyorduk, bu adımları takib ederek çözmeye:

  • devre dışı bırakmak secure_file_priv değişken (benim dosya yüklendiğinde
  • benim özel MySQL kullanıcıya load_infile değişken
  • büyük dosya iznini etkinleştirmek elbette bu 3 nokta için güvenli myslq/var/lib/mysql-dosyanın dizin)

değil/tmp klasörüne web sunucusu tarafından, sen başvurabilirsiniz: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv

BR,

AD

1

Bu durum benim başıma ve bunu işe gelemedi, görevinde Yamir tarafından açıklanan tüm adımları takip rağmen.

Dosya 777 izinleriyle /tmp/test.csv dizinindeydi. MySQL kullanıcısı dosya izinlerine sahipti, LOCAL seçeneği MySQL sürümüm tarafından izinli değildi, bu yüzden takıldım.

Sonunda çalışan sorunu çözmeyi başardı:

sudo chown mysql:mysql /tmp/test.csv 
+0

Bu çözüm benim için bir çekicilik gibi çalışır. Oyvermek – zhilevan