Mysql copy DB

User avatar
Likenew
Уже с Приветом
Posts: 12065
Joined: 15 Feb 2002 10:01
Location: TX

Mysql copy DB

Post by Likenew »

Народ, имеется база на <mysql>, и нужно создать ее копию. Загвоздка в том, что одна таблица очень большая, несколько биллионс рошс. Я ету базу заекспортила из одной базы, а теперь не могу завершить импорт в другую , все грузится несколько часов и заканчивается ошибкой <lost connection>. Перерыла все что можно, ничего другого не нашла. Может кто знает какой другой способ? Мне нужна копия етой базы для работы, или хотябы нескольких таблиц, включая большую. Что-то ничего толкового на ум не приходит :(
User avatar
ALV00
Уже с Приветом
Posts: 1494
Joined: 08 Mar 2002 10:01
Location: NJ

Re: Mysql copy DB

Post by ALV00 »

Если база на юниксе, можно зайти терминалом на ту машину и запустить ваш процесс с командой nohup. Тогда если расконнектится, то процесс продолжит работать. Еще, если есть админские права на базу, можно попробовать перенести бэкапом или командой load.
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Mysql copy DB

Post by Sergunka »

ALV00 wrote:перенести бэкапом или командой load.
+ 1
Я за бекап
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
Likenew
Уже с Приветом
Posts: 12065
Joined: 15 Feb 2002 10:01
Location: TX

Re: Mysql copy DB

Post by Likenew »

Ну вот я сделала ехпорт, а импорт не работает.

Еще пробовала просто инсерт ас селецт из исходной базы. Все таблицы прошли нормально кроме большой. И похоже беда в том, что ета таблица не имеет никаких ключей, партитионс или чего еще, что помогло бы разбить ее на части и загрузить по частям. Я знаю только один способ разбить на три части, но ети части тоже очень большие и не успеваю загрузить пока цоннецтион ис уп. Мысъл на амазоне. Пока не знаю, как чего решать и какие у меня права. Пока очевидно, что нужны партитионс с субпартитионс, и ключи потому что таблица не управляема совсем.
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Mysql copy DB

Post by Sergunka »

Likenew wrote: И похоже беда в том, что ета таблица не имеет никаких ключей, партитионс или чего еще
Довольно занятный дизайн... походу таблица тупорыло настроенная на запись без потерь по времени на всякую лабуду. Явно напрашивается NoSql решение.
"A patriot must always be ready to defend his country against his government." Edward Abbey
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: Mysql copy DB

Post by Palych »

Если экспортированный файл суть SQL с инсертами - разбить его на части и импортировать по частям?
User avatar
Likenew
Уже с Приветом
Posts: 12065
Joined: 15 Feb 2002 10:01
Location: TX

Re: Mysql copy DB

Post by Likenew »

експортированый файл со всеми инсертами. Но он такой большой, что открыть его проблема.
Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе, никогда не работала с мысъл, делаю все по аналогии. Буду разбираться сегодня почему цоннецтион падает, и какие у меня права.
Пока надо разобраться как реструктурировать имеющуюся базу, добавив фореигн ключи, а потом думать как загрузить все ето добро по-новой.

Народ, а где можно почитать как правильнее и еффективнее загружать такую базу. грузятся данные из флат файлов, надо генерировать все примары кеыс.
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: Mysql copy DB

Post by Palych »

Чтобы разбить на части файл не обязательно "открывать"/загружать целиком:
посмотреть что там есть командами head/tail, нарисовать скриптик на awk, получить куски...
mskmel
Уже с Приветом
Posts: 946
Joined: 24 Sep 2013 05:58
Location: US\GA

Re: Mysql copy DB

Post by mskmel »

Palych wrote:Чтобы разбить на части файл не обязательно "открывать"/загружать целиком:
посмотреть что там есть командами head/tail, нарисовать скриптик на awk, получить куски...
split -l
mitnlag
Администратор
Posts: 2126
Joined: 18 Apr 2010 18:09

Re: Mysql copy DB

Post by mitnlag »

Likenew wrote: Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе
Если Вы один спец, кто Вам ставил задачу, и главное:
Зачем? Кто-то так сделал, специально заморочился, возможно, была причина?
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Mysql copy DB

Post by helg »

В дополнение к вышепосоветованному "split -l", чтобы разбить гигантский файл на кусочки перевариваемого размера, можно ещё убрать автокоммит и проверку constraints при каждом insert. Для InnoDB таблицы:

Code: Select all

SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
-- тут  запускаем миллиард инсертов
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
https://support.tigertech.net/mysql-large-inserts" onclick="window.open(this.href);return false;
User avatar
Likenew
Уже с Приветом
Posts: 12065
Joined: 15 Feb 2002 10:01
Location: TX

Re: Mysql copy DB

Post by Likenew »

mitnlag wrote:
Likenew wrote: Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе
Если Вы один спец, кто Вам ставил задачу, и главное:
Зачем? Кто-то так сделал, специально заморочился, возможно, была причина?
Похоже, что тот человек, который был до меня не сильно в базе разбирался. Меня тоже не брали как ДБ специалиста, а вот приходится модель дорабатывать, потому как никто не может работать, я в том числе. И надо все делать быстро, базу будем перезагружать, потому как то что в базе никто не любит :(
User avatar
Likenew
Уже с Приветом
Posts: 12065
Joined: 15 Feb 2002 10:01
Location: TX

Re: Mysql copy DB

Post by Likenew »

helg wrote:В дополнение к вышепосоветованному "сплит -л", чтобы разбить гигантский файл на кусочки перевариваемого размера, можно ещё убрать автокоммит и проверку цонстраинтс при каждом инсерт. Для ИнноДБ таблицы:

Code: Select all

СЕТ ФОРЕИГНКЕЫЧЕЦКС = 0;
СЕТ УНИЪУЕЧЕЦКС = 0;
СЕТ АУТОЦОММИТ = 0;
-- тут  запускаем миллиард инсертов
СЕТ УНИЪУЕЧЕЦКС = 1;
СЕТ ФОРЕИГНКЕЫЧЕЦКС = 1;
ЦОММИТ;
хттпс://суппорт.тигертеч.нет/мысъл-ларге-инсертс
А вот меня интересует наоборот. Какой наиболее еффективный способ загрузить базу, генерируя примары кеыс и вставляя их в депендент таблес? И надо сгенерировать все индексы тоже. Благо только две таблицы большие.
kjfk
Новичок
Posts: 80
Joined: 28 Mar 2016 20:32

Re: Mysql copy DB

Post by kjfk »

Сначала все индексы отключите, загрузите дату, потом уже индексируйте.
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Mysql copy DB

Post by helg »

helg wrote:В дополнение к вышепосоветованному "split -l", чтобы разбить гигантский файл на кусочки перевариваемого размера, можно ещё убрать автокоммит и проверку constraints при каждом insert. Для InnoDB таблицы:

Code: Select all

SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
-- тут  запускаем миллиард инсертов
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
https://support.tigertech.net/mysql-large-inserts" onclick="window.open(this.href);return false;
Вы глупости говорите, уважаемый. У дамы миллиард записей, если их без промежуточных коммитов вставлять - лопнет лог, он по умолчанию у MySQL не тянет столько. Наблюдаемый эффект, видимо, и есть результат переполнения этого лога.

Надо либо причесать файл с миллиардом строк, вставив в него коммиты после каждой сотни инсертов, либо испечь текстовый файл с данными по записи на строку - и скормить его: команде mysqlimport или SQL-у "LOAD DATA INFILE".
8K
Уже с Приветом
Posts: 5552
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Mysql copy DB

Post by 8K »

Проблема в том, как файл пилить. Нужно самопальный парсер писать хоть на том же Питоне. Авк'ом вряд ли получится. Там же единственный INSERT на всю таблицу, еще и в одну строчку записанный.
Увидев друга, Портос вскрикнул от радости...
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: Mysql copy DB

Post by Palych »

Я знаю что нужно:
- Поднять Spark на кластере в облаке,
- Добавить в него Deep Learning
- Процедить тот здоровый файл через нейронную сеть
- Создать report который будет содержать insert statements для разных кусков, сохранить его в NoSQL
- запустить на том же кластере распределённую задачу, которая будет читать из NoSQL и писать в MySQL
Всё просто! :)

Return to “Вопросы и новости IT”