Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД / 17 сообщений из 17, страница 1 из 1
04.06.2015, 09:59:55
    #38975874
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Доброго времени суток всем!
Вынося за скобки необходимость решения это задачи, хотел бы уточнить, не решал ли кто-то задачу замены ВСЕХ вхождений слова/фразы во ВСЕХ таблицах БД на другое слово?
Я сделал дамп БД, потом натравил на него Perl

Код: python
1.
perl -e 's/Плохие слова/Хорошие слова/g' -pi /backup/test.sql



После импорта дампа назад в БД, на сайте остались "плохие" слова. То-ли с кодировкой проблема и Perl не нашёл по указанному шаблону вхождения этих слов, то ли проблема в чём-то другом.

Поделитесь конструктивными идеями по этому поводу, пожалуйста.

Дамп БД почти 2Gb и править дамп руками или сами таблицы через update - это не вариант. неизвестны ни названия таблиц, содержащих эти слова, ни поля ни условия для where.

Кодировка таблиц utf-8.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DROP TABLE IF EXISTS `cms3_cluster_nodes_cache_keys`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cms3_cluster_nodes_cache_keys` (
  `node_id` int(11) DEFAULT NULL,
  `key` varchar(255) NOT NULL DEFAULT '',
  KEY `key` (`key`),
  KEY `node_id` (`node_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
...
Рейтинг: 0 / 0
04.06.2015, 10:02:38
    #38975878
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Ещё хотел добавить, что Perl таки часть слов нашёл и поменял.
Так как результаты
cat /backup/test.sql | grep 'Слова, которые нужно поменять'
ДО изменения дампа и ПОСЛЕ него выдают различные результаты. Т.е. после изменения дампа старых слов grep не выдаёт.
...
Рейтинг: 0 / 0
04.06.2015, 10:06:22
    #38975885
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
А в чём сложности? список таблиц БД доступен, список полей тоже... осталось нарисовать процедуру, которая соберёт динамически тексты запросов и выполнит необходимые замены.
...
Рейтинг: 0 / 0
04.06.2015, 10:23:27
    #38975904
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
[quot Romka-Fes
Вынося за скобки необходимость решения это задачи, хотел бы уточнить, не решал ли кто-то задачу замены ВСЕХ вхождений слова/фразы во ВСЕХ таблицах БД на другое слово?
[/quot]

Необходимость решения этой задачи, на самом деле, самый главный вопрос. Это тебе не эксель, это СУБД, тут не может
быть таких задач. По крайней мере нужно ограничить набор полей полями символьных типов данных.

Твой вариант не так уж и плох, ещё можно было бы (я бы так делал) по метаданным небольшой програмкой генерировать ищущие
и заменяющие запросы для каждой из таблиц, и выполнять их.
...
Рейтинг: 0 / 0
04.06.2015, 10:49:02
    #38975932
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Akina,

Список БД таки доступен, но вопрос стоит в контексте одной заданной БД.
'Show tables' тоже есть и метаданные о таблицах, НО в силу того, что неизвестно, в каких именно таблицах и полях есть заданные слова, придётся городить динамически UPDATE по всем и вся. Я хотел более изящно сделать - попроавить дамп и залить всё назад.
...
Рейтинг: 0 / 0
04.06.2015, 10:52:01
    #38975937
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
MasterZiv,

"Это тебе не эксель, это СУБД" - про Excel я ничего не писал, о том что такое СУБД я знаю не по наслышке.
"тут не может быть таких задач." - это как суслик. Вы его не видите, а он есть :)
Задачи таки тоже есть: есть заявка от юзверя - на сайте N надо ВСЕ слова "АБАБА" поменять на "ГАЛАМАГА".
Если быть более приближённым к реальности, то надо "по всему сайту" поменять название компании.

Мой вопрос можно перфразировать: как корректно в дампе БД MySQL поменять во ВСЕХ текстовых полях ВСЕХ таблиц заданные слова.
...
Рейтинг: 0 / 0
04.06.2015, 10:54:22
    #38975939
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Romka-FesЯ хотел более изящно сделать - попроавить дамп и залить всё назад.Ну и делайте. Для разовой задачи вполне нормальный вариант. Только возьмите инструмент, который нормально юникод понимает. Относится ли к таковым Перл - не знаю. Да и это уже для другого подфорума вопрос.
...
Рейтинг: 0 / 0
04.06.2015, 11:07:35
    #38975958
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
не знаю каких размеров дамп, но можно открыть в Notepad++ и сделать простую замену. UTF он понимает прекрасно
...
Рейтинг: 0 / 0
04.06.2015, 11:08:41
    #38975960
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
увидел -2G. N++ должен открыть
...
Рейтинг: 0 / 0
04.06.2015, 11:09:59
    #38975964
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Romka-Fesкак корректно в дампе БД MySQL поменять во ВСЕХ текстовых полях ВСЕХ таблиц заданные слова.В общем случае - парсить дамп, чтобы не поменять "где не надо".
Еслиже есть убеждённость, что не попадёте случайно в служебные структуры - то тупо поиск-замена в каком-нить notepad++
...
Рейтинг: 0 / 0
04.06.2015, 11:15:44
    #38975969
-k2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Alex_Ustinov,

не факт, полуторагиговый у меня например не открывает уже :(
...
Рейтинг: 0 / 0
04.06.2015, 11:30:24
    #38975992
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Akina,
Это не Unix-way :)
хочется командой, максимум парой обойтись. + есть смутные подозрения что это надо будет делать не 1 раз.
Поэтому нужно иметь готовое быстроработающее и надёжное решение, без необходимости переливания дампа на Win и назад.
Пробовал awk делать замену, так он вообще файл дампа урезает до 4097 байт. Но это тема другого форума.
...
Рейтинг: 0 / 0
04.06.2015, 11:35:01
    #38976003
-k2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Romka-Fes,

sed?
...
Рейтинг: 0 / 0
04.06.2015, 11:36:39
    #38976008
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Romka-Fes
Код: python
1.
perl -e 's/Плохие слова/Хорошие слова/g' -pi /backup/test.sql




Вас кто-то заставляет делать это в одну строку?
Почему бы не написать скрипт на perl полностью работающий и отладить ?

Ну попробуйте perl -mutf8 -e ... . Это все равно что использовать "use utf8;"
...
Рейтинг: 0 / 0
04.06.2015, 11:38:52
    #38976011
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Romka-FesЭто не Unix-way :)
хочется командой, максимум парой обойтись
Любой редактор, умеющий принимать из потока, отдавать в поток, выполнить замену фрагментов из комстроки и при этом не изгадить остальное.
...
Рейтинг: 0 / 0
04.06.2015, 13:25:22
    #38976174
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
Akina,

вот я perl и выбрал для этих целей.
Как оказалось, проблема в самом шаблоне поиска слова (попадаются латинские буквы в русских словах) и написание на русском и украинском.
проблема не perl. Так что этот вариант
Код: plaintext
1.
 perl -e 's/Плохо/Хорошо/g' -pi /backup/dump.sql


таки можно использовать.

А ещё оказалось что часть контента таки валяется во всякого рода статике (шаблонах, html, etc).
Всем спасибо за дискуссию!
...
Рейтинг: 0 / 0
04.06.2015, 13:26:09
    #38976175
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД
-k2-,

тоже вариант. Но я в нём не силён, поэтому не рассматривал пока.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Замена ВСЕХ слов по ВСЕХ полях ВСЕХ таблиц БД / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]