Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Qt 5.1 MYSQL Multithreading, Unknown MyQSL server host 
:(
    Опции темы
becks
Дата 22.10.2013, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Добрый день. Есть MYSQL база данных, в нее идет запись из нескольких потоков. Вот основная функция записи каждого потока:
Код

int IndexThread::insertDataIntoDB(const QStringList &files)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", m_uid);

    db.setHostName("127.0.0.1");
    db.setDatabaseName("ssa");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("admin");

    bool ok = db.open();
    if (!ok)
    {
        qDebug() << "open error " << db.lastError().text() << endl;
        return -1;
    }

    foreach (QString fileName, files)
    {
        QSqlQuery query(db);
        if ( !createQuery(fileName, query) )
            continue;

        ok = query.exec();
        if (!ok)
        {
            QSqlError error = query.lastError();
            qDebug() << "query error " << error.text() << "  " << error.number() << endl;

            if ( error.type() == QSqlError::ConnectionError  || error.type() == QSqlError::StatementError ||
                 error.type() == QSqlError::TransactionError || error.type() == QSqlError::UnknownError )
            {
                return -3;
            }
        }
    }

    db.close();

    return 0;
}


Запись обычный INSERT INTO.

Запускаю несколько потоков с укладкой (укладка производится довольно быстро, данных немного), получаю:

open error «Unknown MySQL server host '127.0.0.1' (0) QMYSQL: Unable to connect
open error „Unknown MySQL server host '127.0.0.1' (0) QMYSQL: Unable to connect

Количество таких сообщений обычно на 1 или 2 меньше количества потоков.
Если запускать один поток, все работает нормально. Для других задач (не SQL) работает хоть с 10-20 потоками нормально.

Win 7 64. Qt 5.1.1 MSVC2012 64. MYSQL 5.6.14.0. Таблицы — InnoDB
PM MAIL   Вверх
bsa
Дата 22.10.2013, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



becks, может у бд есть ограничение на количество одновременных подключений?
PM   Вверх
becks
Дата 23.10.2013, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Цитата(bsa @  22.10.2013,  21:17 Найти цитируемый пост)
becks, может у бд есть ограничение на количество одновременных подключений? 

Проверил, везде стоит значение 0 - т.е. нет никаких ограничений по коннектам из документации.
Создал, на всякий случай другого пользователя, до этого пробовал все на администраторе. Результат тот же.

Цитата

«Unknown MySQL server host '127.0.0.1' (0) QMYSQL: Unable to connect


Если поможет номер ошибки 2005.

Чего уже только не испробовал, ничего не выходит.
PM MAIL   Вверх
vinter
Дата 23.10.2013, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



mysql консольный тул соединяется с базой нормально? При тех же параметрах
Почему грешишь на потоки? Не вижу в описании ничего потокозависимого. Попробуй создай пустой проект и присоединись к базе из него. 


--------------------
Мой блог
PM MAIL WWW   Вверх
becks
Дата 23.10.2013, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Цитата

mysql консольный тул соединяется с базой нормально? При тех же параметрах

Абсолютно нормально. 

Цитата

Почему грешишь на потоки?

Если писать одним потоком - все работает отлично. Как только поялвляется хотя бы второй, появляются ошибки.

Цитата

Попробуй создай пустой проект и присоединись к базе из него.

С этого все и начал. Работало. Потом перенес все это на потоки. И тут возникли проблемы.

Это сообщение отредактировал(а) becks - 23.10.2013, 23:55
PM MAIL   Вверх
vinter
Дата 24.10.2013, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



Цитата

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", m_uid);

Я так понимаю, что эта функция(insert) у тебя вызывается не один раз, а значит эта строчка не должна быть здесь. Здесь должна быть database(m_uid);, а инициализация базы для потока должна быть в едином месте. Так же проверь являются ли m_uid уникальными для каждого потока и удостоверься, что QSqlDatabase::addDatabase("QMYSQL", m_uid); происходит в отдельном потоке.


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.2057 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.