Назад | Перейти на главную страницу

Проблемы с подключением к базе данных Ubuntu 10.04

У меня проблемы с устаревшей программой, которую я запускаю. У нас был образ этого сервера, установка - Ubuntu 10.04, раздел 5 ГБ для базы данных mysql и файловая система 100 ГБ. Моя проблема в том, что каждый раз, когда вызывается эта функция, которая должна создать соединение с базой данных, она выдает ошибку, что база данных не работает.

static function createConnection($dbOptions = null)
    {
        $dsn = array(
            'phptype' => CATAPULT_DB_TYPE,
            'username' => CATAPULT_DB_USERNAME,
            'password' => CATAPULT_DB_PASSWORD,
            'hostspec' => CATAPULT_DB_HOST,
            'database' => CATAPULT_DB_DATABASE
            );

        $options = array();
        if ($dbOptions != null)
        {
            if (array_key_exists('username', $dbOptions))
            {
                $dsn['username'] = $dbOptions['username'];
            }

            if (array_key_exists('password', $dbOptions))
            {
                $dsn['password'] = $dbOptions['password'];
            }

            if (array_key_exists('host', $dbOptions))
            {
                $dsn['hostspec'] = $dbOptions['hostspec'];
            }

            if (array_key_exists('database', $dbOptions))
            {
                $dsn['database'] = $dbOptions['database'];
            }

            if (array_key_exists('persistent', $dbOptions))
            {
                if ($dbOptions['persistent'])
                {
                    $options['persistent'] = $dbOptions['persistent'];
                }
            }

            if (array_key_exists('debug', $dbOptions))
            {
                $options['debug'] = $dbOptions;
            }

            if (array_key_exists('portability',$dbOptions))
            {
                $options['portability'] = $dbOptions;
            }
        }
        else
        {
            $options['debug'] = 0;
            $options['portability'] = MDB2_PORTABILITY_ALL;
        }


        // uses MDB2::factory() to create the instance
        // and also attempts to connect to the host
        //
        // for some reason I was using connect rather than singleton... not sure why that was
        // this was creating many duplicate database connections when I was dealing with transactions
        //$mdb2 = MDB2::connect($dsn, $options);
        $mdb2 = MDB2::singleton($dsn, $options);

        if (PEAR::isError($mdb2))
        {
            $logger = Logger::getFileLogger('dbConnect.php:createConnection');

            // setup email configuration
            $conf = array('subject' => 'CRITICAL ERROR: SYSTEM DATABASE CONNECTION LOST');
            $loggerEmail = Logger::getEmailLogger('dbConnect.php:createConnection');

            // error's here should not only be logged but emailed as well

            // TODO: log the error
            $log_message = "Failed to connect to database, verify connection settings.";
            if ($mdb2 != null)
            {
                $log_message .= ' Additional info:  -- ' . $mdb2->getMessage();
            }

            $logger->log($log_message);
            $loggerEmail->log($log_message);

            return (NULL);
        }
        else
        {
            return ($mdb2);
        }

Еще раз, это устаревший код, и я на самом деле не специалист по базам данных, но я проверил привилегии для пользователя, и он говорит: GRANT ALL PRIVILEGES ON 'dbName'. * TO 'user' @ 'localhost'

Вывод /var/log/apache2/error.log

sh: /usr/sbin/sendmail: not found

он повторяет это снова и снова 52 раза.

Есть идеи по устранению неполадок?

Если вы посмотрите на свой файл php.ini, я думаю, вы обнаружите, что он настроен на отправку вам сообщений об ошибках; но он этого не делает (что объясняет, почему вы не видите никаких полезных ошибок, и почему вы получаете это сообщение об ошибке sendmail).

Я предлагаю хотя бы временно перенастроить этот файл для записи в журнал ошибок где-нибудь, чтобы вы могли его просмотреть. Просто догадываясь по тому, что вы разместили здесь, есть только несколько вариантов конфигурации, поэтому, как только вы знать ошибка должна быть легко устранена. Поскольку вы можете подключиться локально, я предполагаю, что вы в конечном итоге исправите неверную конфигурацию в файле конфигурации приложения, где бы это ни было.

Попробуйте подключиться через командную строку, чтобы узнать, проблема ли это PHP или MySQL:

mysql -u USERNAME -pPASSWORD -h 127.0.0.1 DBNAME