PHP MySQL Подключение PDO к Google Cloud SQL Экземпляр из экземпляра виртуальной машины не работает - PullRequest
1 голос
/ 29 мая 2020

DSN: mysql:dbname='MyDB';unix_socket='/cloudsql/ethereal-accord-123456789:us-central1:dev-Instance'

Ошибка подключения: SQLSTATE [HY000] [2002] Нет такого файла или каталога

Код подключения PDO:

 try {
              $conn = new PDO($dsn, $username, $password);
              // set the PDO error mode to exception

              $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

              echo "Connected successfully";
              return $conn;

            } catch(PDOException $e) {
              echo "Connection failed: " . $e->getMessage().' <BR>';

            }

I Кажется, не удается найти подробную информацию о том, как правильно настроить соединения. Я слежу за всеми документами и активировал разрешения для IP ВМ, API клиента SQL и API администратора, и ничего ...

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы не запускаете облачный sql прокси или вы указали другое местоположение для файла сокета. Вы должны это проверить.

./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:3306 &
$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=DATABASE_NAME';

https://cloud.google.com/sql/docs/mysql/connect-external-app#pdo -tcp

0 голосов
/ 02 июня 2020

Я вернул свой код обратно в MYSqli вместо PDO, используя эти строки

$host_name = "35.222.111.111";
$database = "myDB123";
$user_name = "dbuser123";
$password = "pass12345";
$GCSocket ="/cloudsql/ethereal-accord-2000000:us-central1:dev-instance-1"; $GCPort='3306';

$connect = mysqli_connect($host_name, $user_name,$password,$database,$GCPort,$GCSocket )
  if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error() ."<br>";
        echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL ."<br>";
        echo "Debugging error: " . mysqli_connect_error() . PHP_EOL  ."<br><br>";

         } else {

        echo 'DB is connected..! <BR>';
    }

    return $connect;

Проблема была не в приведенном выше коде, он работал все время, проблема была в разрешении.

  1. Я внес свой IP-адрес в белый список моей виртуальной машины Compute Engine в облаке SQL Сервер
  2. разрешить вашей учетной записи службы Compute Engine доступ к облаку SQL
    • Облако SQL Клиент или облако SQL Администратор
  3. Выполните это в виртуальной машине Compute Engine:
setsebool -P httpd_can_network_connect_db 1

и вуаля ... вот где я нашел ответ !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...