Ben PDOException var: SQLSTATE [HY000] [2002] drush kullanırken böyle bir dosya veya dizin yok [kapalı]


21

Drush'u ilk kez yükledim (bu bir yapılandırma hatası olabilir) ve Drupal'ın en son çekirdek sürümüne güncellemeye çalışıyorum.

Drush bana bu hatayı veriyor - OSX kutusunun içindeyim.

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.

1
Bu adımları tamamladınız mı ? Bunun tam olarak sizin sorununuz olmayabileceğini biliyorum, ancak yardımcı olabilir.
Chapabu

Hangi drush sürümünü kullanıyorsunuz? Sizinkiyle aynı gibi görünen bir sorun var: drupal.org/node/832472
F1234k

Ben drush-7.x-4.5 ve drupal 7.9 sürümünü kullanıyorum
FLY

sorumu takip ettiğim adımları ekledim. Benzer staps gibi dikişler sugessting @Chapabu
FLY

1
Bir PHP / MySQL bağlantı sorununuz var (Drupal ile ilgili değil) - stackoverflow.com/questions/2412009/…
Clive

Yanıtlar:


42

MacOS'ta bu şekilde çözdüm:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

Kaynak: Mamp'de Drush ile çalışmak .


Benim için "/ tmp" mysql.sock dosyasını arıyordu. Bu yüzden orada benim MAMP yüklemek için bir symlink oluşturmak zorunda kaldı. Sadece bu konuda çalışan herkes için FYI.
Patrick

37

Drupal sitesi için settings.php dosyasındaki veritabanı yapılandırmanızda, ana bilgisayarı localhost yerine 127.0.0.1 olarak değiştirmeyi deneyin.

varsayılanı değiştirin: 'host' => 'localhost',

'host' => '127.0.0.1' ile,

OS X XAMPP'de bu hatayı yaşadım, ancak çözüm burada da uygulanmalıdır. Clive'nin belirttiği gibi, bu bir MySQL bağlantı sorunudur. Bu yayında altta yatan sorunla ilgili daha fazla bilgi var.


Düzgün ve basit bir çözüm. Bununla birlikte, site başına çalışır, ancak burada hile yaptı.
Ignacio Segura Postigo

Daha popüler cevap benim için çalışmıyor (MAMP Pro kullanıyorum), ama bu işe yarıyor. Teşekkürler!
Kelley Curry

1
Hayır! Bu, Drush'ın çalışmasını sağlayabilir ... ancak daha sonra
Drupal'ın

11

açıklama

PDOException - Hata 2002 senin drush soket dosyası (örneğin aracılığıyla MySQL yerel veritabanı sunucusuna bağlanamıyor demekse /tmp/mysql.sock) Gözlerinde farklı yapılandırılmış olarak php.ini.

Bu aslında onunla çok ilgili değil drush, PHP yapılandırmanızdır ve bu hata şu şekilde çoğaltılabilir:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

Fix

MySQL'iniz düzgün çalışıyorsa, şu iki dosyanın olduğundan emin olun:

  1. mysql_config --socket

    veya: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    veya: php -r 'phpinfo();' | grep -w default_socket

eşleme ve aynı dosyaya işaret ediyor ve her ikisi de var.

Değilse, hangisinin doğru olduğunu kontrol edin:

mysql --socket=/path/to/mysql.sock

daha sonra sorunu aşağıdaki çözümlerden biriyle düzeltin:

  • çalışmayı göstermek için sembolik bağlantı kurar mysql.sock unix soketine (MAMP için Andrew cevabına bakın ),

    • örneğin, MAMP kullanıyorsanız, varsayılan konuma sembolik bir bağlantı yapabilirsiniz:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • doğru yol pdo_mysql.default_socket , mysql.default_socketya mysqli.default_socketiçinde seninphp.ini

  • belirtmek unix_socketSepetinde settings.phpsenin içinde $databasesdeğişken, örneğin

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',

Sorun giderme

Diğer kenar durumlar şunlar olabilir:

  • yanlış izinler (örn. üst klasörlere),
  • alanınız kalmadı,
  • birden fazla PHP sürümünüz varsa, tam olarak hangisini kullandığınızı ve hangi yapılandırmayı değiştirdiğinizi kontrol edin,
  • XDebug ile hata ayıklama:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • veya set xdebug.show_exception_trace=1içinde seninxdebug.ini
  • Hata ayıklama: OS X'te sudo dtruss -fn mysqld , Linux ilestrace
  • Ayrıca bakınız: MySQL bağlantısı çalışmıyor: 2002 Böyle bir dosya ya da dizin SO at

6

MAMP Pro kullanıyorum ve aynı sorunu vardı. Bunu düzeltmek için bulabildiğim en kolay yol, settings.php dosyasındaki $ database dizinize aşağıdaki satırı eklemekti.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

Tam olarak şöyle görünmelidir:

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

Tam hata ben böyle görünüyordu:

İstisna işlenirken yakalanmamış ek istisna atıldı.

orijinal

PDOException: SQLSTATE [HY000] [2002] Drupal_is_denied () içinde böyle bir dosya veya dizin yok (satır 2193 ...

Ek

PDOException: SQLSTATE [HY000] [2002] _registry_check_code () içinde böyle bir dosya veya dizin yok (satır 3477 ...


Düzeltme komutu, kurtarılamayan bir hata nedeniyle anormal olarak sonlandırıldı.


2
Bu MAMP kullanarak benim için en hızlı ve en kolay düzeltme
karınca

3

Bunu, önceki yanıtlara benzer, ancak aynı değil, aşağıdaki adımlarla çözdüm.

Symlink ekleyin:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

Kullanılan php.ini dosyasını bulun:

php -i | grep php.ini

Php.ini dosyasına aşağıdaki ayarları ekleyin:

pdo_mysql.default_socket= /var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock

1

Bunun nedeni PHP / SQL yapılandırmalarınızdaki bir yapılandırma hatasıdır. Web sunucunuzun kullandığı soket ve komut satırının kullandığı bir yerde farklı yapılandırılmıştır. Hangi unix soketinin kullanıldığını görmek için MySQL yapılandırmanızı kontrol etmenizi ve ardından tüm php.ini yapılandırmalarında ve derlemelerinde aynı değerin kullanıldığından emin olun.

Yapılandırmayı düzeltemezseniz aşağıdaki adımlar çalışmalıdır:

  1. Drush 5.x'in geliştirme sürümünü edinin (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) ve bunun yerine yükleyin. Bu başka sorunlara neden olabilir, ancak genel olarak oldukça kararlı.
  2. Drupal sites ayarlarınızda .php veritabanı bağlantısı için ana bilgisayar ve bağlantı noktası ayarlarını kaldırın ve değiştirmek için bir 'unix_socket' => '/path/to/mysql.sock' ekleyin.

Tüm bunlar karmaşık görünüyorsa, bir alternatif, setting.php içindeki ana bilgisayarı localhost'tan 127.0.0.1'e değiştirmektir. Bu, siteyi yavaşlatır, ancak bir geliştirme sitesi için fark edilebilir veya önemli olmayabilir. Bir üretim tesisi için unix soketini kullanmak istiyorsunuz ve yapılandırmayı sıralamanız gerekiyor.


Gerçekten de bunu yapar. Sayısız kez test ettim.
asiby

1

Mac'e drush yüklemek için daha kolay / alternatif bir yol buldum:

Bunu tek başına bir terminale yapıştırarak homebrew'u kurun

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Sonra aynı terminalden aşağıdakileri çalıştırarak drush ekleyin

brew install drush

Koşma durumu çalışıyor şimdi iyi çalışıyor.


1

MySQL'in MySQL.com kurulumuyla çalışıyorsanız, PHP'yi .sockdosya için doğru yere işaret etmeniz yeterlidir .

Şu php.iniiki satırı ekleyin / değiştirin:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

Php.ini dosyanızın konumunu bulmak için (henüz mevcut olmayabilir), bunu kullanın

php -i | grep php.ini

Eğer php.inidosya henüz orada yok, oluşturun.


0

Drupal'ın mysql soketini bulamadığı diğer yanıtları kabul edin. Diğer yanıtlar bana yardımcı oldu, ancak yüklü resmi Oracle Mysql hizmeti ile yüklenemedi. Yani, mysql.sock dosyasının varsayılan konumu. Bu yüzden, kullanım durumunuza bağlı olarak önerilen cevaplarımın bir özeti:

Resmi MAMP paketinin içerdiği şekilde mysql kullanıyorsanız @Andrew Alexander'ın cevabını kullanın:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

Resmi Oracle MYSQL için:

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

0

Bir MAMP 4 kurulumu için çözüm, "Bu sürümü komut satırında kullanılabilir yap" seçeneğini işaretliyordu.

MAMP yapılandırması


0

Terminalde şu mesajı aldım:

(MAMP PRO + PHP 7)

Blockquote Drush komutu, kurtarılamayan bir hata nedeniyle anormal bir şekilde sonlandırıldı.
[hata] PDOException: SQLSTATE [HY000] [2002] Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote içinde böyle bir dosya veya dizin yok

Sorunu bu talimatların yardımıyla çözdüm


0

Yerel mysql'm benzersiz bir bağlantı noktası numarası üzerinde çalıştığını unuttum, bu yüzden başka bir yerel sitedeki yapılandırmamı gözden geçirene kadar neden bu sorunu aldığımı kafam karıştı.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.