Mysql copy DB
-
- Уже с Приветом
- Posts: 12065
- Joined: 15 Feb 2002 10:01
- Location: TX
Mysql copy DB
Народ, имеется база на <mysql>, и нужно создать ее копию. Загвоздка в том, что одна таблица очень большая, несколько биллионс рошс. Я ету базу заекспортила из одной базы, а теперь не могу завершить импорт в другую , все грузится несколько часов и заканчивается ошибкой <lost connection>. Перерыла все что можно, ничего другого не нашла. Может кто знает какой другой способ? Мне нужна копия етой базы для работы, или хотябы нескольких таблиц, включая большую. Что-то ничего толкового на ум не приходит
-
- Уже с Приветом
- Posts: 1494
- Joined: 08 Mar 2002 10:01
- Location: NJ
Re: Mysql copy DB
Если база на юниксе, можно зайти терминалом на ту машину и запустить ваш процесс с командой nohup. Тогда если расконнектится, то процесс продолжит работать. Еще, если есть админские права на базу, можно попробовать перенести бэкапом или командой load.
-
- Уже с Приветом
- Posts: 34164
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Mysql copy DB
+ 1ALV00 wrote:перенести бэкапом или командой load.
Я за бекап
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 12065
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Mysql copy DB
Ну вот я сделала ехпорт, а импорт не работает.
Еще пробовала просто инсерт ас селецт из исходной базы. Все таблицы прошли нормально кроме большой. И похоже беда в том, что ета таблица не имеет никаких ключей, партитионс или чего еще, что помогло бы разбить ее на части и загрузить по частям. Я знаю только один способ разбить на три части, но ети части тоже очень большие и не успеваю загрузить пока цоннецтион ис уп. Мысъл на амазоне. Пока не знаю, как чего решать и какие у меня права. Пока очевидно, что нужны партитионс с субпартитионс, и ключи потому что таблица не управляема совсем.
Еще пробовала просто инсерт ас селецт из исходной базы. Все таблицы прошли нормально кроме большой. И похоже беда в том, что ета таблица не имеет никаких ключей, партитионс или чего еще, что помогло бы разбить ее на части и загрузить по частям. Я знаю только один способ разбить на три части, но ети части тоже очень большие и не успеваю загрузить пока цоннецтион ис уп. Мысъл на амазоне. Пока не знаю, как чего решать и какие у меня права. Пока очевидно, что нужны партитионс с субпартитионс, и ключи потому что таблица не управляема совсем.
-
- Уже с Приветом
- Posts: 34164
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Mysql copy DB
Довольно занятный дизайн... походу таблица тупорыло настроенная на запись без потерь по времени на всякую лабуду. Явно напрашивается NoSql решение.Likenew wrote: И похоже беда в том, что ета таблица не имеет никаких ключей, партитионс или чего еще
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Mysql copy DB
Если экспортированный файл суть SQL с инсертами - разбить его на части и импортировать по частям?
-
- Уже с Приветом
- Posts: 12065
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Mysql copy DB
експортированый файл со всеми инсертами. Но он такой большой, что открыть его проблема.
Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе, никогда не работала с мысъл, делаю все по аналогии. Буду разбираться сегодня почему цоннецтион падает, и какие у меня права.
Пока надо разобраться как реструктурировать имеющуюся базу, добавив фореигн ключи, а потом думать как загрузить все ето добро по-новой.
Народ, а где можно почитать как правильнее и еффективнее загружать такую базу. грузятся данные из флат файлов, надо генерировать все примары кеыс.
Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе, никогда не работала с мысъл, делаю все по аналогии. Буду разбираться сегодня почему цоннецтион падает, и какие у меня права.
Пока надо разобраться как реструктурировать имеющуюся базу, добавив фореигн ключи, а потом думать как загрузить все ето добро по-новой.
Народ, а где можно почитать как правильнее и еффективнее загружать такую базу. грузятся данные из флат файлов, надо генерировать все примары кеыс.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Mysql copy DB
Чтобы разбить на части файл не обязательно "открывать"/загружать целиком:
посмотреть что там есть командами head/tail, нарисовать скриптик на awk, получить куски...
посмотреть что там есть командами head/tail, нарисовать скриптик на awk, получить куски...
-
- Уже с Приветом
- Posts: 946
- Joined: 24 Sep 2013 05:58
- Location: US\GA
Re: Mysql copy DB
split -lPalych wrote:Чтобы разбить на части файл не обязательно "открывать"/загружать целиком:
посмотреть что там есть командами head/tail, нарисовать скриптик на awk, получить куски...
-
- Администратор
- Posts: 2126
- Joined: 18 Apr 2010 18:09
Re: Mysql copy DB
Если Вы один спец, кто Вам ставил задачу, и главное:Likenew wrote: Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе
Зачем? Кто-то так сделал, специально заморочился, возможно, была причина?
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Mysql copy DB
В дополнение к вышепосоветованному "split -l", чтобы разбить гигантский файл на кусочки перевариваемого размера, можно ещё убрать автокоммит и проверку constraints при каждом insert. Для InnoDB таблицы:
https://support.tigertech.net/mysql-large-inserts" onclick="window.open(this.href);return false;
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;
-
- Уже с Приветом
- Posts: 12065
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Mysql copy DB
Похоже, что тот человек, который был до меня не сильно в базе разбирался. Меня тоже не брали как ДБ специалиста, а вот приходится модель дорабатывать, потому как никто не может работать, я в том числе. И надо все делать быстро, базу будем перезагружать, потому как то что в базе никто не любитmitnlag wrote:Если Вы один спец, кто Вам ставил задачу, и главное:Likenew wrote: Я не знаю почему так была сделана таблица, что поиск по ней невозможен. Моя задача сделать ее нормальной. В группе я один спец по базе
Зачем? Кто-то так сделал, специально заморочился, возможно, была причина?
-
- Уже с Приветом
- Posts: 12065
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Mysql copy DB
А вот меня интересует наоборот. Какой наиболее еффективный способ загрузить базу, генерируя примары кеыс и вставляя их в депендент таблес? И надо сгенерировать все индексы тоже. Благо только две таблицы большие.helg wrote:В дополнение к вышепосоветованному "сплит -л", чтобы разбить гигантский файл на кусочки перевариваемого размера, можно ещё убрать автокоммит и проверку цонстраинтс при каждом инсерт. Для ИнноДБ таблицы:хттпс://суппорт.тигертеч.нет/мысъл-ларге-инсертсCode: Select all
СЕТ ФОРЕИГНКЕЫЧЕЦКС = 0; СЕТ УНИЪУЕЧЕЦКС = 0; СЕТ АУТОЦОММИТ = 0; -- тут запускаем миллиард инсертов СЕТ УНИЪУЕЧЕЦКС = 1; СЕТ ФОРЕИГНКЕЫЧЕЦКС = 1; ЦОММИТ;
-
- Новичок
- Posts: 80
- Joined: 28 Mar 2016 20:32
Re: Mysql copy DB
Сначала все индексы отключите, загрузите дату, потом уже индексируйте.
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Mysql copy DB
Вы глупости говорите, уважаемый. У дамы миллиард записей, если их без промежуточных коммитов вставлять - лопнет лог, он по умолчанию у MySQL не тянет столько. Наблюдаемый эффект, видимо, и есть результат переполнения этого лога.helg wrote:В дополнение к вышепосоветованному "split -l", чтобы разбить гигантский файл на кусочки перевариваемого размера, можно ещё убрать автокоммит и проверку constraints при каждом insert. Для InnoDB таблицы:https://support.tigertech.net/mysql-large-inserts" onclick="window.open(this.href);return false;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;
Надо либо причесать файл с миллиардом строк, вставив в него коммиты после каждой сотни инсертов, либо испечь текстовый файл с данными по записи на строку - и скормить его: команде mysqlimport или SQL-у "LOAD DATA INFILE".
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Mysql copy DB
Проблема в том, как файл пилить. Нужно самопальный парсер писать хоть на том же Питоне. Авк'ом вряд ли получится. Там же единственный INSERT на всю таблицу, еще и в одну строчку записанный.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Mysql copy DB
Я знаю что нужно:
- Поднять Spark на кластере в облаке,
- Добавить в него Deep Learning
- Процедить тот здоровый файл через нейронную сеть
- Создать report который будет содержать insert statements для разных кусков, сохранить его в NoSQL
- запустить на том же кластере распределённую задачу, которая будет читать из NoSQL и писать в MySQL
Всё просто!
- Поднять Spark на кластере в облаке,
- Добавить в него Deep Learning
- Процедить тот здоровый файл через нейронную сеть
- Создать report который будет содержать insert statements для разных кусков, сохранить его в NoSQL
- запустить на том же кластере распределённую задачу, которая будет читать из NoSQL и писать в MySQL
Всё просто!