MySQL

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 27 янв 2020, 22:28

Olej писал(а):
27 янв 2020, 22:24
Где:
- forum_id - номер форума,
- topic_id - номер темы
- post_id - номер сообщения
Интересующее нас сообщение в браузере находим по строке URL:

Код: Выделить всё

http://linux-ru.ru/viewtopic.php?f=3&t=64&p=183#p183
f=forum_id t=topic_id p=post_id

Но достаточно, оказывается и такой формы:

Код: Выделить всё

http://linux-ru.ru/viewtopic.php?p=183#p183

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 27 янв 2020, 22:52

Вся такая корректура - страшно кропотливое и тягомутное занятие ...

Код: Выделить всё

MariaDB [forum]> SELECT COUNT(*) FROM rlf1_posts WHERE LOCATE('http://rus-linux.net/forum/viewtopic', post_text) ORDER BY forum_id DESC LIMIT 5;
+----------+
| COUNT(*) |
+----------+
|      850 |
+----------+
1 row in set (0.860 sec)

Код: Выделить всё

MariaDB [forum]> SELECT forum_id,topic_id,post_id FROM rlf1_posts WHERE LOCATE('http://rus-linux.net/forum/viewtopic', post_text) ORDER BY forum_id DESC LIMIT 5;
+----------+----------+---------+
| forum_id | topic_id | post_id |
+----------+----------+---------+
|       38 |     5245 |   17427 |
|       38 |     5245 |   17425 |
|       38 |     4905 |   16669 |
|       38 |     4905 |   16579 |
|       38 |     4993 |   16573 |
+----------+----------+---------+
5 rows in set (0.118 sec)
Здесь элементарно просто попортить всю базу данных сообщений...
После чего - только полное восстановление из последнего бэкапа.
Я уже начинаю это занятие по 2-му разу. :evil:

Так что бэкап делаем (благо технология отлаженная: подготовка регулярных бэкапов форума, восстановление из бэкапов) через каждые 10-20 сообщений!

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 28 янв 2020, 02:04

Olej писал(а):
27 янв 2020, 22:14
очень объёмный, сложный и амбициозный - почистить таблицы БД от устаревших URL
Чтоб представлять этот объём: анализ показывает (выше были кой-какие выборки показаны), что после всех "умельцев" потребуется выверить около 1000 URL ... а на самом деле больше, потому что в одном сообщении бывает по несколько битых URL.
И опыт ... и этих злополучных "умельцев", и мой когда я уже сегодня развалил БД и восстанавливал её из бэкапа, показывает: эту всю корректуру не удастся сделать автоматов в режиме "поиск-замена", а каждое сообщение придётся просмотреть глазами - структура URL слишко сложна, разбросана и отличаются для автоматической замены.

Я сегодня за день работы, пусть не сильно напряжённой, сумел переработать 130-150 сообщений с URL. :cry:

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 29 янв 2020, 15:40

29.01.2020 около 04:51 форум рухнул из-за нехватки RAM для MySQL: технические проблемы.

Нужно будет обязательно (после завершения чистки URL!) проделать оптимизацию MySQL ... как описано Оптимизация настроек Mysql с помощью Mysqltuner.
Чтобы данные анализа и статистика были более корректными, сервер Mysql должен проработать некоторое время без смены параметров конфигурации и без перезагрузок, по рекомендации самого Mysqltuner не менее 24 часов.
А пока, чтобы не мудрить с нестандартными инсталляциями:

Код: Выделить всё

olej@277938:~$ aptitude search mysqltuner
p   mysqltuner                                                             - скрипт тонкой настройки MySQL                                                    

Код: Выделить всё

olej@277938:~$ sudo apt install mysqltuner
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  liblockfile1 lockfile-progs m4 procmail sendmail-base sendmail-cf sensible-mda
Для их удаления используйте «sudo apt autoremove».
Будут установлены следующие дополнительные пакеты:
  libtext-template-perl
Следующие НОВЫЕ пакеты будут установлены:
  libtext-template-perl mysqltuner
Обновлено 0 пакетов, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 13 пакетов не обновлено.
Необходимо скачать 179 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 1 612 kB.
Хотите продолжить? [Д/н] y
Пол:1 http://mirror.timeweb.ru/debian buster/main amd64 libtext-template-perl all 1.55-1 [53,9 kB]
Пол:2 http://mirror.timeweb.ru/debian buster/main amd64 mysqltuner all 1.7.13-1 [125 kB]
Получено 179 kB за 0с (946 kB/s)
Выбор ранее не выбранного пакета libtext-template-perl.
(Чтение базы данных … на данный момент установлено 43222 файла и каталога.)
Подготовка к распаковке …/libtext-template-perl_1.55-1_all.deb …
Распаковывается libtext-template-perl (1.55-1) …
Выбор ранее не выбранного пакета mysqltuner.
Подготовка к распаковке …/mysqltuner_1.7.13-1_all.deb …
Распаковывается mysqltuner (1.7.13-1) …
Настраивается пакет libtext-template-perl (1.55-1) …
Настраивается пакет mysqltuner (1.7.13-1) …
Обрабатываются триггеры для man-db (2.8.5-2) …

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 29 янв 2020, 19:07

Olej писал(а):
27 янв 2020, 22:14
Предстоит найти и поменять все такие ссылки:

Код: Выделить всё

http://rus-linux.net/forum/viewtopic  => viewtopic
Завершён вот этот грандиозный поиск - в итоге пришлось пересмотреть и редактировать где-то 1500-2000 URL, или даже больше! :-o

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 29 янв 2020, 19:26

Olej писал(а):
29 янв 2020, 19:07
Завершён вот этот грандиозный поиск - в итоге пришлось пересмотреть и редактировать где-то 1500-2000 URL, или даже больше!
Следующий этап:

Код: Выделить всё

MariaDB [forum]> SELECT COUNT(*) FROM rlf1_posts WHERE LOCATE('http://seocod.ru', post_text);
+----------+
| COUNT(*) |
+----------+
|       48 |
+----------+
1 row in set (1.172 sec)

MariaDB [forum]> SELECT forum_id,topic_id,post_id FROM rlf1_posts WHERE LOCATE('http://seocod.ru', post_text) ORDER BY forum_id ASC LIMIT 10; 
+----------+----------+---------+
| forum_id | topic_id | post_id |
+----------+----------+---------+
|        3 |       16 |      33 |
|        3 |     1495 |    2038 |
|        3 |     1495 |    3189 |
|        3 |     1600 |    3303 |
|        3 |     1600 |    3304 |
|        3 |     1495 |    4924 |
|        3 |     4145 |   12284 |
|        4 |     1290 |    2067 |
|        5 |     1473 |    2051 |
|        5 |     1737 |    4234 |
+----------+----------+---------+
10 rows in set (0.129 sec)
Это уже предыдущие "администраторы" намудлячили своими автоматическими запросами "поиск-замена" ... теперь вручную восстанавливать надо.

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 29 янв 2020, 20:23

Olej писал(а):
29 янв 2020, 19:26
Следующий этап:
И это завершено.
Теперь ссылочная целостность всех сообщений форума восстановлена!

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: MySQL

Непрочитанное сообщение Olej » 01 фев 2020, 17:25

Olej писал(а):
29 янв 2020, 20:23
Теперь ссылочная целостность всех сообщений форума восстановлена!
Вот столько записей в таблице сообщений (сообщений форума) пришлось пересмотреть, проанализировать и, где надо, подкорректировать - это число сообщений с перекрёстными ссылками между сообщениями форума:

Код: Выделить всё

MariaDB [forum]> SELECT COUNT(*) FROM rlf1_posts WHERE LOCATE('=viewtopic', post_text);
+----------+
| COUNT(*) |
+----------+
|     1311 |
+----------+
1 row in set (1.545 sec)
При этом нужно учесть, что одно сообщение может содержать несколько ссылок - 2-3 достаточно часто, а 4-5-6 тоже временами встречается.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя