Бэкап базы MySQL

Chick80

Client
Регистрация
04.12.2014
Сообщения
307
Благодарностей
83
Баллы
28
Друзья, всем привет!
Крайне редко стараюсь обращаться за помощью, но гугл весь прочитан, мозг сломан, а результата всё нет...

Ситуация следующая:
Есть самописная БД на хостинге, скачанная XML-выгрузка и локальный комп с зенкой.
Задача:
Обновить строки таблицы (500+ тысяч записей) в соответствии с XML-выгрузкой.
Как я вижу решение:
Сделать дамп таблицы, локально её исправить, затем импорт.
Что не получается:
Сделать дамп таблицы зенкой. Можно через PMA, это быстро, но не наш метод...

Итак, может кто подскажет, как выгрузить табличку на локальный ПК? Желательно без костылей...

P.S. Более изящный способ обновления данных приветствуется ))
 
Последнее редактирование:

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 630
Благодарностей
1 225
Баллы
113
Сделать дамп таблицы, локально её исправить, затем импорт.
Не совсем тогда понимаю, зачем вообще нужна база данных, если вся работа ведется с табличкой скачанной...
Что мешает нормально (и, главное, правильно) органзиовать работу с БД напрямую (для этого даже кубик есть)? Через UPDATE и т.д. Весь смысл работы с БД теряется...
 

Chick80

Client
Регистрация
04.12.2014
Сообщения
307
Благодарностей
83
Баллы
28
Не совсем тогда понимаю, зачем вообще нужна база данных, если вся работа ведется с табличкой скачанной...
Что мешает нормально (и, главное, правильно) органзиовать работу с БД напрямую? Через UPDATE и т.д. Весь смысл работы с БД теряется...
Массовое обновление данных из XML, это, можно сказать, разовая акция...
Основная работа с БД ведется в многопотоке из различных мест... Правильно ведется... Затык только вот в этом разовом обновлении данных...

П.С. Обновил вопрос в шапке. Таблица большая, построчное обновление займет не одну неделю. Поэтому, выход вижу через экспорт/редактирование/импорт.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 630
Благодарностей
1 225
Баллы
113
Таблица большая, построчное обновление займет не одну неделю.
Ну, тут вопрос в оргазинации базы. Построчно - это же не значит, что нужно на каждую строку отдельный запрос на UPDATE в БД отправлять. Если индексы проставлены, где надо, спокойно можно и пачками отправлять. У меня обычно по 500 в запросе уходят, но можно и больше, если есть необходимость (у меня просто ее нет, пяток-десяток выигранных секунд роли не играют). А это уже всего 1000 запросов (если 500к строк по 500 на запрос), даже с какими-то секундными задержками между запросами, и то не неделя, буквально несколько минут.
Помнится, делал как-то дампы через ssh, думается, стоит покопать в эту сторону (если доступы есть). Если где-то на хостинге, то можно еще посмотреть в сторону хостинга (на том же бегете, например, есть API, там вполне можно какой-нить запрос на "бэкап" базы сделать или, наоборот, восстановление из бэкапа, который уже изменен).
Ну и классическое в наше время - ChatGPT ))
 
  • Спасибо
Реакции: Chick80

Chick80

Client
Регистрация
04.12.2014
Сообщения
307
Благодарностей
83
Баллы
28
У меня обычно по 500 в запросе уходят
Хм, спасибо - это мысль...
на том же бегете, например, есть API
Еще раз спасибо, покурю там хелп...
Уже каждый первый туда посылает )) Конкурент всем известному слову? ))
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 630
Благодарностей
1 225
Баллы
113
Уже каждый первый туда посылает )) Конкурент всем известному слову? ))
Не, это, скорее, про то, что "не нашел в гугле" )) Я обычно после гугла у ChatGPT спрашиваю )) В твоем случае можно попросить как прямой код к MySQL, так и, например, код php-страницы, через которую можно запросить дамп.

Хм, спасибо - это мысль...
Пример, как у меня. Каждый час. 30к апдейтов в одну базу улетают.
123255
От старта до финиша - 11 секунд. Главное, про индексы для WHERE не забыть ))
При этом, я уверен, у меня тоже не самое верное/правильное решение, но работает уже лет много... И без сбоев ))
 
  • Спасибо
Реакции: Chick80

Chick80

Client
Регистрация
04.12.2014
Сообщения
307
Благодарностей
83
Баллы
28
это же не значит, что нужно на каждую строку отдельный запрос на UPDATE в БД отправлять
Еще разочек попольюзуюсь Вашей эрудицией, если не возражаете ))
Т.е. нужно составить вот такую конструкцию:
C#:
UPDATE tab SET id = 555, name = 'Вася' WHERE tab.Count = '1'
UPDATE tab SET id = 666, name = 'Петя' WHERE tab.Count = '2'
из 500 строк, потом отправить кубиком?

Или можно упростить до:
C#:
UPDATE tab SET id = 555, name = 'Вася' WHERE tab.Count = '1'
           SET id = 666, name = 'Петя' WHERE tab.Count = '2'
?
Count - индекс.
Если не найдется совпадения, строка же добавится?
Если сделаю name уникальным, запрос уйдет в ошибку при совпадении значения же? IGNORE поможет в данном случае?
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 630
Благодарностей
1 225
Баллы
113
У меня первым способом ))) Мне так визуально проще собирать. Да, таких 500 строк.
Если не найдется, то ничего не добавится, это же запрос на апдейт. Если нужно обновлять, если есть, и добавлять, если нет, то там надо смотреть в сторону "on duplicate key update" (т.е., новые - добавит, старые - обновит, там изначально идет через INSERT, а на случай, если есть, тогда строка будет UPDATE).
Ошибки, да, надо обрабатывать. Я на такой случай просто на всякий в случае ошибки пишу отправляемую пачку запросов в файл, и смотрю потом руками, что не так пошло. IGNORE решает.

PS. Пардон, что немного в сторону от основного вопроса ушли )) Непосредственно с бэкапом это не помогает. Так что, если кто подскажет, как именно бэкап делать (желательно - в tar.gz, чтобы качать меньше), пусть поделится )) Самому кое где может пригодиться, но руки не доходят поразбираться.
 
Последнее редактирование:
  • Спасибо
Реакции: Chick80

Chick80

Client
Регистрация
04.12.2014
Сообщения
307
Благодарностей
83
Баллы
28
Исчерпывающий ответ! Огромное спасибо! Сейчас велосипедов наизобретаю ))

Затестил на дубликате БД, отлично отрабатывает )) Пошел ковырять основную базу ))
Еще раз спасибо!!!
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)