2015-07-24 1 views
3

Я запускаю задание Cron для скрипта PHP в Codeigniter для преобразования загруженных видео. Все выполняется без каких-либо проблем, но как только он получает вставки данных в базу данных я получаю эту ошибку:PHP Codeigniter 3 Сервер MySQL ушел

Error Number: 2006 MySQL server has gone away

Процесс в основном преобразует видео, если это было успешно создать эскиз и плакат с видео а затем вставьте видеоданные в базу данных. Я попытался добавить $this->db->reconnect(); в мою функцию модели. Вот эта функция:

function add_video($data) 
{ 
    //BECASUE THE CONVERSION TAKES SO LONG WE NEED TO RECONNECT TO THE DATABASE AFTER EACH EXEC 
    $this->db->reconnect(); 

    $this->db->insert('video_uploads', $data); 
} 

Это не сработало, я все еще получил ошибку. Если добавить $this->db->reconnect(); после каждого exec я получаю эти ошибки:

Message: mysql_ping() expects parameter 1 to be resource, boolean given

Message: mysql_real_escape_string() expects parameter 2 to be resource, boolean given

Подобно тому, как FYI я использую FFMPEG конвертировать мои видео.

Как я могу сохранить соединение в сети после завершения всех исполнений, чтобы я мог вставить данные в базу данных?

EDIT: вот что $this->db->reconnect(); функции CodeIgniter выглядит так:

public function reconnect() 
{ 
    if (mysql_ping($this->conn_id) === FALSE) 
    { 
     $this->conn_id = FALSE; 
    } 
} 
+1

Проверьте это [ссылка] (http://stackoverflow.com/questions/1884111/sudden-mysql-server-has-gone-away-error-in-php-site) – Saty

+0

Если преобразование происходит так долго, вы можете избежать соединения до тех пор, пока видео конверсия и не выполните вставку? Если нет, то, возможно, вы можете вручную отключить связь, конвертировать видео, свежее подключение и выполнить вставку. – MonkeyZeus

+1

Спасибо @Saty Я добавил '$ this-> load-> database();' before' $ this-> db-> reconnect(); 'похоже, что он работает. Если вы хотите написать это, я отвечу. – iamthestreets

ответ

1

Чтобы избежать этой ошибки, вы можете написать

$this->db->database();

перед вызовом

$this->db->reconnect();

+1

, пожалуйста, исправьте свой ответ. Первая строка должна быть $ this-> load-> database(); –

0

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

См PHP:mysqli_ping для получения информации о том

Для reference

+0

Я считаю, что Codeigniter уже делает это. Я отредактировал свой пост внизу с помощью функции '$ this-> db-> reconnect();'. – iamthestreets

0

У меня была аналогичная проблема по другой причине - я забивал базу данных с помощью> 12 000 select/updates. сервер MySQL просто сдался и «отправился в отпуск»

во всяком случае, немного свободного времени все, что нужно, в цикле я добавил:

if ($this->db->conn_id->ping() === FALSE) 
{ 
    sleep(1); 
    $this->db->reconnect(); 
} 
+0

Что здесь делает сон? Сама функция reconnect() не устраняет проблему, пока не будет добавлен сон. Функция conn_id-> ping() не находится в документах Codeigniter. Является ли эта часть DB_driver? – imparante

0

Для меня это была установка в файле базы данных где я переносил серверы и не устанавливал mysql полностью. В mysql я использую ssl для подключения к серверу.

Как только я прокомментировал следующее, все прошло хорошо.

$db['default']['options'] = array(
    PDO::MYSQL_ATTR_SSL_KEY => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/client-key.p$ 
    PDO::MYSQL_ATTR_SSL_CERT => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/client-cert.$ 
    PDO::MYSQL_ATTR_SSL_CA => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/ca-cert.pem' 
); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^