Ненавижу задавать этот вопрос из-за того, сколько раз его задавали, но я был в тупике за последние 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