Потерянное соединение с MySQL сервером во время запроса (C ++ / C - MYSQL) - PullRequest
0 голосов
/ 03 апреля 2020

Ненавижу задавать этот вопрос из-за того, сколько раз его задавали, но я был в тупике за последние 4 часа. У меня есть сервер на C ++, который подключается к базе данных mysql сайта удаленно. Один раз в месяц, по какой-то странной причине, сервер c ++ начинает отказывать в своих mysql запросах и возвращать это сообщение об ошибке. Я попробовал почти все, что было предложено, например, изменение переменных тайм-аута, размер max_allowed_packet .. перезапуск сервера, перезапуск сервера mysql ... Кажется, ничего не работает. Я очень ценю любую помощь.

РЕДАКТИРОВАТЬ:

Код, подобный этому, выдает сообщение об ошибке.

handle = mysql_init(0);

sql::Statement * sql::MySQL::Prepare( const std::string & s )
{ 
    MYSQL_STMT* stmt = mysql_stmt_init( handle );
    int x = mysql_stmt_prepare( stmt, s.c_str(), s.size() );
    if ( x != 0 ) 
    { 
        std::cerr << "Failed preparing statment: " << mysql_stmt_error( stmt ) << std::endl;
        return nullptr;
    }
    return new sql::Statement( stmt );
}

И как это используется.

UserRank CUser::GetUserRank( void )
{
    if ( !IsLoggedIn() )
        return RANK_GUEST;

    sql::Statement* pPreparedStatement = g_db.Prepare( "SELECT `rank_id` FROM `members` WHERE `name`=?" );
    if ( !pPreparedStatement ) 
        return RANK_GUEST; 

    short sRank = -1;  
    pPreparedStatement->BindResult( 0, MYSQL_TYPE_SHORT, &sRank, sizeof( sRank ) );
    pPreparedStatement->Execute( m_strUsername );

    // Cleanup allocated memory
    delete pPreparedStatement;

    return static_cast< UserRank >( sRank ); 
}

, что приводит к выводу на печать Failed preparing statment: Lost connection to MySQL server during query

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