Не добавляются книги в БД
8 years 6 months ago #620
by jakut69rus
jakut69rus created the topic: Не добавляются книги в БД
Добрый день!
Ubuntu Server 16.04. Python3 из коробки, коннектор поставлен. БД sopds в Mysql создана, структура наполнена, у пользователя sopds есть полные права на работу с БД.
Запускается, ошибок не выдает.
При сканировании в логах пишется, что все ОК, книги якобы добавлены:
Но книги в БД фактически не добавляются:
Подозреваю, что проблема либо в самой БД, либо в коннекторе к ней. Но смущает отсутствие ошибок.
Полльзователя и структуру пересоздавал несколько раз разными путями, результат тот же.
При этом, БД физически не пуста, ибо файлы что-то да весят:
Такое ощущение, что сканировщик кладет книги в одну БД, а смотрю их наличие я в другой. Или кому-то на что-то не хватает прав.
Подскажите, куда копать?
Ubuntu Server 16.04. Python3 из коробки, коннектор поставлен. БД sopds в Mysql создана, структура наполнена, у пользователя sopds есть полные права на работу с БД.
Запускается, ошибок не выдает.
При сканировании в логах пишется, что все ОК, книги якобы добавлены:
Warning: Spoiler!
[ Click to expand ]
[ Click to hide ]
2016-07-08 23:06:57,480 DEBUG Attempt to add book fb2-132108-141328.zip/132111.fb2
2016-07-08 23:06:57,492 DEBUG Book fb2-132108-141328.zip/132111.fb2 Added ok.
2016-07-08 23:06:57,492 DEBUG Book fb2-132108-141328.zip/132111.fb2 Added ok.
Но книги в БД фактически не добавляются:
Warning: Spoiler!
[ Click to expand ]
[ Click to hide ]
mysql> select count(*) from books;
+
+
| count(*) |
+
+
| 0 |
+
+
1 row in set (0,05 sec)
+
+
| count(*) |
+
+
| 0 |
+
+
1 row in set (0,05 sec)
Подозреваю, что проблема либо в самой БД, либо в коннекторе к ней. Но смущает отсутствие ошибок.
Полльзователя и структуру пересоздавал несколько раз разными путями, результат тот же.
При этом, БД физически не пуста, ибо файлы что-то да весят:
Warning: Spoiler!
[ Click to expand ]
[ Click to hide ]
root@eeepc-server:/var/lib/mysql/sopds# ls -l
итого 501468
-rw-r
1 mysql mysql 8652 июн 25 20:01 authors.frm
-rw-r
1 mysql mysql 18874368 июл 8 23:20 authors.ibd
-rw-r
1 mysql mysql 8606 июн 25 20:01 bauthors.frm
-rw-r
1 mysql mysql 31457280 июл 8 23:20 bauthors.ibd
-rw-r
1 mysql mysql 8604 июн 25 20:01 bgenres.frm
-rw-r
1 mysql mysql 29360128 июл 8 23:20 bgenres.ibd
-rw-r
1 mysql mysql 46012 июн 25 20:01 books.frm
-rw-r
1 mysql mysql 8634 июн 25 20:01 bookshelf.frm
-rw-r
1 mysql mysql 114688 июн 25 20:01 bookshelf.ibd
-rw-r
1 mysql mysql 406847488 июл 8 23:20 books.ibd
-rw-r
1 mysql mysql 8634 июн 25 20:01 bseries.frm
-rw-r
1 mysql mysql 14680064 июл 8 23:20 bseries.ibd
-rw-r
1 mysql mysql 8710 июн 25 20:01 catalogs.frm
-rw-r
1 mysql mysql 114688 июл 8 23:19 catalogs.ibd
-rw-r
1 mysql mysql 61 июн 25 20:00 db.opt
-rw-r
1 mysql mysql 8558 июн 25 20:01 dbver.frm
-rw-r
1 mysql mysql 98304 июн 25 20:01 dbver.ibd
-rw-r
1 mysql mysql 8678 июн 25 20:01 genres.frm
-rw-r
1 mysql mysql 229376 июл 8 23:20 genres.ibd
-rw-r
1 mysql mysql 8592 июн 25 20:01 series.frm
-rw-r
1 mysql mysql 11534336 июл 8 23:20 series.ibd
итого 501468
-rw-r
1 mysql mysql 8652 июн 25 20:01 authors.frm
-rw-r
1 mysql mysql 18874368 июл 8 23:20 authors.ibd
-rw-r
1 mysql mysql 8606 июн 25 20:01 bauthors.frm
-rw-r
1 mysql mysql 31457280 июл 8 23:20 bauthors.ibd
-rw-r
1 mysql mysql 8604 июн 25 20:01 bgenres.frm
-rw-r
1 mysql mysql 29360128 июл 8 23:20 bgenres.ibd
-rw-r
1 mysql mysql 46012 июн 25 20:01 books.frm
-rw-r
1 mysql mysql 8634 июн 25 20:01 bookshelf.frm
-rw-r
1 mysql mysql 114688 июн 25 20:01 bookshelf.ibd
-rw-r
1 mysql mysql 406847488 июл 8 23:20 books.ibd
-rw-r
1 mysql mysql 8634 июн 25 20:01 bseries.frm
-rw-r
1 mysql mysql 14680064 июл 8 23:20 bseries.ibd
-rw-r
1 mysql mysql 8710 июн 25 20:01 catalogs.frm
-rw-r
1 mysql mysql 114688 июл 8 23:19 catalogs.ibd
-rw-r
1 mysql mysql 61 июн 25 20:00 db.opt
-rw-r
1 mysql mysql 8558 июн 25 20:01 dbver.frm
-rw-r
1 mysql mysql 98304 июн 25 20:01 dbver.ibd
-rw-r
1 mysql mysql 8678 июн 25 20:01 genres.frm
-rw-r
1 mysql mysql 229376 июл 8 23:20 genres.ibd
-rw-r
1 mysql mysql 8592 июн 25 20:01 series.frm
-rw-r
1 mysql mysql 11534336 июл 8 23:20 series.ibd
Такое ощущение, что сканировщик кладет книги в одну БД, а смотрю их наличие я в другой. Или кому-то на что-то не хватает прав.
Подскажите, куда копать?
Please Войти or Create an account to join the conversation.
- jakut69rus
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 3
8 years 6 months ago #621
by mitshel
mitshel replied the topic: Не добавляются книги в БД
В sopds.conf есть вот что:
# При установке опции single_commit = yes, данные записываемые сканером в БД коммитятся один раз при окончании сканирования
# Если single_commit = no то коммиты происходят кажды раз при добавлении книги в БД.
# Применение однократного коммита несколько ускоряет сканирование.
# По умолчанию будет считаться что single_commit=no
single_commit = yes
Таким образом все книги появятся только после окончания сканирования. Если это не устраивает, то установите single_commit =no, но при этом общее время сканирование увеличится.
# При установке опции single_commit = yes, данные записываемые сканером в БД коммитятся один раз при окончании сканирования
# Если single_commit = no то коммиты происходят кажды раз при добавлении книги в БД.
# Применение однократного коммита несколько ускоряет сканирование.
# По умолчанию будет считаться что single_commit=no
single_commit = yes
Таким образом все книги появятся только после окончания сканирования. Если это не устраивает, то установите single_commit =no, но при этом общее время сканирование увеличится.
Please Войти or Create an account to join the conversation.
- mitshel
-
- Offline
- Администратор
-
Less
More
- Posts: 297
- Karma: 8
8 years 6 months ago #622
by jakut69rus
jakut69rus replied the topic: Не добавляются книги в БД
Большое спасибо! Мне действительно не доставало терпения подождать окончания сканирования (и внимательности посмотреть про single_commit. Через трое суток сканирования БД обработалась 
Далее я столкнулся с другой проблемой: ошибка 500 при клике по А-Я в любой выдаче.
В лог при этом приходило:
mysql.connector.errors.ProgrammingError: 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sopds.authors.last_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Погуглив, выяснил, что начиная с версии MySQL 5.7 (а именно такая идет с Ubuntu Server 16.04 из коробки) по умолчанию установлен параметр sql_mode=only_full_group_by.
Вот тут описано:
dev.mysql.com/doc/refman/5.7/en/sql-mode...e_only_full_group_by
Решается это установкой глобального параметра из-под рутового пользователя БД:
SET GLOBAL sql_mode='';
Ну или при каждой сессии писать SET sql_mode=''; , если не хочется трогать рута.
Возможно, вам пригодится.

Далее я столкнулся с другой проблемой: ошибка 500 при клике по А-Я в любой выдаче.
В лог при этом приходило:
mysql.connector.errors.ProgrammingError: 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sopds.authors.last_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Погуглив, выяснил, что начиная с версии MySQL 5.7 (а именно такая идет с Ubuntu Server 16.04 из коробки) по умолчанию установлен параметр sql_mode=only_full_group_by.
Вот тут описано:
dev.mysql.com/doc/refman/5.7/en/sql-mode...e_only_full_group_by
Решается это установкой глобального параметра из-под рутового пользователя БД:
SET GLOBAL sql_mode='';
Ну или при каждой сессии писать SET sql_mode=''; , если не хочется трогать рута.
Возможно, вам пригодится.
Please Войти or Create an account to join the conversation.
- jakut69rus
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 3
8 years 6 months ago #623
by mitshel
mitshel replied the topic: Не добавляются книги в БД
Спасибо за информацию...
Но насчет 3х суток
- это очень долго... Скажите каков размер вашего архива с книгами и на каком оборудовании все это работает. Дело в том что мои 200Гб сканируются порядка 1,5-2х часов.
Но насчет 3х суток

Please Войти or Create an account to join the conversation.
- mitshel
-
- Offline
- Администратор
-
Less
More
- Posts: 297
- Karma: 8
8 years 6 months ago #624
by jakut69rus
jakut69rus replied the topic: Не добавляются книги в БД
168 ГБ в ZIP-архивах
Работает на домашнем "сервере" из древнего нетбука Asus EeePC (1Gb RAM, 2х1,6 GHz Intel Atom CPU)
Архив лежит на внешнем HDD, на котором, по историческим причинам, NTFS, так что при сканировании бОльшая часть времени - это простой в ожидании ввода вывода через NTFS-3g. В принципе, ничего страшного - свои основные обязанности сервер во время сканирования исправно выполняет, так что длительное сканирование для меня не проблема)
Работает на домашнем "сервере" из древнего нетбука Asus EeePC (1Gb RAM, 2х1,6 GHz Intel Atom CPU)
Архив лежит на внешнем HDD, на котором, по историческим причинам, NTFS, так что при сканировании бОльшая часть времени - это простой в ожидании ввода вывода через NTFS-3g. В принципе, ничего страшного - свои основные обязанности сервер во время сканирования исправно выполняет, так что длительное сканирование для меня не проблема)
Please Войти or Create an account to join the conversation.
- jakut69rus
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 3
8 years 6 months ago - 8 years 6 months ago #636
by ll23
Для присвоения нужного значения переменной при загрузке можно создать /etc/mysql/conf.d/disable_only_full_group_by.cnf в котором прописать:После чего все будет работать после перезагрузок системы.
ll23 replied the topic: Не добавляются книги в БД
Если сделать так, то значение глобальной переменной не сохраняется при перезагрузке mysql. После перезагрузки sql_mode опять получит only_full_group_by.jakut69rus wrote: Решается это установкой глобального параметра из-под рутового пользователя БД:
SET GLOBAL sql_mode='';
Ну или при каждой сессии писать SET sql_mode=''; , если не хочется трогать рута.
Возможно, вам пригодится.
Для присвоения нужного значения переменной при загрузке можно создать /etc/mysql/conf.d/disable_only_full_group_by.cnf в котором прописать:
[mysqld]
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Last Edit: 8 years 6 months ago by ll23.
Please Войти or Create an account to join the conversation.
- ll23
-
- Offline
- Новый участник
-
Less
More
- Posts: 8
Time to create page: 0.121 seconds