Обновить строки в очень большой базе данных - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь обновить / заменить несколько строк в базе данных MYSQL / MARIADB, все, что мне нужно, это:

Измените все эти точные строки <a href="http://mysite.app" rel="nofollow noreferrer">http://mysite.app</a> на http<strong>s</strong>://mysite.app во ВСЕХ БД

Проблема в том, что эта база данных ОЧЕНЬ БОЛЬШАЯ, и обычная замена может сломать сервер.

Итак, я хотел бы знать, как это происходит в зависимости от времени, времени или чего-то, что не слишком сильно влияет на сервер ¿возможно ли это?

1 Ответ

0 голосов
/ 24 марта 2019

Вы можете использовать такой запрос, чтобы сгенерировать все запросы для этого: если вы удалите GROUP_CONCAT ( и SEPARATOR '\ n') , вы получите одну строку для каждого обновления состояния.

SELECT GROUP_CONCAT(
    CONCAT('UPDATE `',TABLE_SCHEMA,'`.`',TABLE_NAME,'` SET `',
        COLUMN_NAME,'` = REPLACE(',COLUMN_NAME,',\'http://mydomain\',\'https://mydomain\');')
        SEPARATOR '\n' ) as myquery
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE
    `TABLE_SCHEMA` not IN ('information_schema','performance_schema','mysql') -- excluded SCHEMAS
AND
    `DATA_TYPE` in ('varchar','char');

образец

    UPDATE `shopware`.`s_core_log` SET `value4` = REPLACE(value4,'http://mydomain','https://mydomain');
    UPDATE `shopware`.`s_core_engine_groups` SET `name` = REPLACE(name,'http://mydomain','https://mydomain');
    UPDATE `shopware`.`s_core_engine_groups` SET `label` = REPLACE(label,'http://mydomain','https://mydomain');
    UPDATE `shopware`.`s_core_engine_groups` SET `layout` = REPLACE(layout,'http://mydomain','https://mydomain');
    UPDATE `shopware`.`s_core_subscribes` SET `subscribe` = REPLACE(subscribe,'http://mydomain','https://mydomain');
....

    UPDATE `shopware`.`s_order_billingaddress` SET `additional_address_line1` = REPLACE(additional_address_line1,'http://mydomain','https://mydomain');
    UPDATE `shopware`.`s_order_billingaddress` SET `additional_address_line2` = REPLACE(additional_address_line2,'http://mydomain','https://mydomain');
    UPDATE `shopware`.`s_order_billingaddress` SET `title` = REPLACE(title,'http://mydomain','https://mydomain');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...