Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перенос данных с одного сервера на другой. / 23 сообщений из 23, страница 1 из 1
09.06.2015, 16:07:37
    #38980283
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Добрый день.
Имеется Zabbix сервер с бекендом ввиде mysql 5.1.73, размер БД заббикса 400GB.
Для оптимизации процесса очистки истории заббикса необходимо было сделать партицирование "тяжелых" таблиц (history, trends).

Для этого подготовили новый сервер с mysql 5.6.25, настроили пртицирование нужных таблиц, дело осталось за малым - импортировать все данные из старого сервера БД. Работу самого сервера мониторинга заббикс прерывать нельзя, по этому вначале были импортированы "легкие" таблицы с конфигурацией самого заббикса, после чего был запущен сервер заббикса и его фронтенд. Собираемые данные стали падать в новую БД, все работает, все прекрасно...

Импортировать тяжелые таблицы планировал через конструкцию вида:

Код: powershell
1.
mysqldump -u$u1 -p'$p1' --no-create-info --no-create-db --skip-triggers zabbix $table_name | mysql -h $new_host -u$u2 -p'$p2' zabbix 



таким способом данные медленно, но верно импортируются из старой БД в новую, но проблема в том, что заббикс сервер не может записать новые данные в таблицу в которую сейчас идет импорт, т.е. система мониторинга корректно функционировать не может. В processlist такие запросы висят с таки статусом:

Код: powershell
1.
| zabbix | Query   |    42 | Waiting for table metadata lock | insert into history_str (itemid,clock,ns,value) values (28202,1433847002,587568794,'core')




Запрос на импорт из старой БД в processlist:

Код: powershell
1.
| zabbix | Query   |     1 | update                          | INSERT INTO `history_str` VALUES (153554,1428621506,'',582462960)





Сама БД стандартная для заббикса - ENGINE=InnoDB.

Есть ли способ импортировать данные не прервая работу сервера заббикс и не создавая блокировок таблиц?
...
Рейтинг: 0 / 0
09.06.2015, 16:18:51
    #38980296
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Fyntos,

А что с автоинкрементными полями? Они используются в таблицах заббикса ?
...
Рейтинг: 0 / 0
09.06.2015, 16:25:31
    #38980307
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
именно в этих "тажелых" таблицах нет:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `history` (
  `itemid` bigint(20) unsigned NOT NULL,
  `clock` int(11) NOT NULL DEFAULT '0',
  `value` double(16,4) NOT NULL DEFAULT '0.0000',
  `ns` int(11) NOT NULL DEFAULT '0',
  KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE `history_log` (
  `id` bigint(20) unsigned NOT NULL,
  `itemid` bigint(20) unsigned NOT NULL,
  `clock` int(11) NOT NULL DEFAULT '0',
  `timestamp` int(11) NOT NULL DEFAULT '0',
  `source` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `severity` int(11) NOT NULL DEFAULT '0',
  `value` text COLLATE utf8_bin NOT NULL,
  `logeventid` int(11) NOT NULL DEFAULT '0',
  `ns` int(11) NOT NULL DEFAULT '0',
  KEY `history_log_1` (`itemid`,`clock`),
  KEY `history_log_0` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
...
Рейтинг: 0 / 0
09.06.2015, 16:41:05
    #38980327
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Я бы подумал в таком направлении:
1) Сделать промежуточный сервер, запустить сам Zabbix на нем.
2) Создать новый сервер.
3) Экспортировать данные со старого сервера.
4) Импортировать данные на новый сервер.
5) Переключить Zabbix на новый сервер.
6) Экспортировать данные с промежуточного сервера.
7) Импортировать данные с промежуточного сервера. Предполагается, что их будет немного и время блокировок будет незначительным.

Кроме того, экспорт/импорт я бы делал не дампом, а tsv-файлом. Это должно быть ощутимо быстрее.
...
Рейтинг: 0 / 0
09.06.2015, 16:46:33
    #38980337
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Если я не ошибаюсь, партиционирование на сервере-копии не должно стать помехой при репликации.

Если так - на новом сервере можно развернуть модифицированную структуру и настроить репликацию на него с боевого сервера. Сколько на это уйдёт времени - в общем неважно... 400Г должны отреплицироваться за в общем вменяемое время. А когда базы подровняются, просто на короткий срок остановить сервис, остановить и удалить репликацию, перенастроить сервис на новый сервер и запуститься.
...
Рейтинг: 0 / 0
09.06.2015, 17:49:52
    #38980397
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
AkinaЕсли я не ошибаюсь, партиционирование на сервере-копии не должно стать помехой при репликации.

Если так - на новом сервере можно развернуть модифицированную структуру и настроить репликацию на него с боевого сервера. Сколько на это уйдёт времени - в общем неважно... 400Г должны отреплицироваться за в общем вменяемое время. А когда базы подровняются, просто на короткий срок остановить сервис, остановить и удалить репликацию, перенастроить сервис на новый сервер и запуститься.

Но ведь настройка репликации подразумевает первоначальную синхронизацию БД, т.е. если до этого не писались бинлоги, то и реплицировать то нечего будет? если ошибаюсь киньте статейку на почитать и хаутушку если есть.
...
Рейтинг: 0 / 0
09.06.2015, 18:28:24
    #38980447
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
FyntosНо ведь настройка репликации подразумевает первоначальную синхронизацию БД
Есссно. Вы отключаете сервис, на мастере делаете снапшот и одновременно настраиваете его запись логов и как мастера. По завершении дампирования рестартуете сервер и включаете сервис в работу. Всё, теперь логи пишутся, материал для синхронизации будет.
Не спеша разворачиваете снапшот на слейве (предварительно его откорректировав с изменением структуры, либо разворачиваете только данные в подготовленную структуру), после чего врубаете репликацию - и она подкачивает изменения, произошедшие после снятия снапшота.
Снятие снапшота выполнится сравнительно быстро. А сколько времени займёт его развёртывание на слейве - Вам, в общем, сиренево. Ну логи будут пухлые, досинхронизация займёт время - но в течение этого времени сервис будет нормально обслуживать клиентов.
Закончится синхронизация - опять тормозим сервис и серверы, перестраиваем их, и запускаем всё на новом сервере БД.

С моей точки зрения, при такой технологии время, на которое придётся останавливать сервис, будет минимально.
...
Рейтинг: 0 / 0
09.06.2015, 19:27:37
    #38980493
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
AkinaFyntosНо ведь настройка репликации подразумевает первоначальную синхронизацию БД
Есссно. Вы отключаете сервис, на мастере делаете снапшот и одновременно настраиваете его запись логов и как мастера. По завершении дампирования рестартуете сервер и включаете сервис в работу. Всё, теперь логи пишутся, материал для синхронизации будет.
Не спеша разворачиваете снапшот на слейве (предварительно его откорректировав с изменением структуры, либо разворачиваете только данные в подготовленную структуру), после чего врубаете репликацию - и она подкачивает изменения, произошедшие после снятия снапшота.
Снятие снапшота выполнится сравнительно быстро. А сколько времени займёт его развёртывание на слейве - Вам, в общем, сиренево. Ну логи будут пухлые, досинхронизация займёт время - но в течение этого времени сервис будет нормально обслуживать клиентов.
Закончится синхронизация - опять тормозим сервис и серверы, перестраиваем их, и запускаем всё на новом сервере БД.

С моей точки зрения, при такой технологии время, на которое придётся останавливать сервис, будет минимально.

по идее простой в таком случае будет самым минимальным, но беда в том что со mysql снапшотами я еще дел не имел (если имелся ввиду снапшот на уровне фс, то как его пользовать в рамках mysql?), есть статейки почитать как оно работает и как готовить это?
а так же может подскажете наиболее быстрый способ переноса только данных между базами, насколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?
...
Рейтинг: 0 / 0
09.06.2015, 19:43:44
    #38980506
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Fyntosнасколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?По моим наблюдениям - в несколько раз. Но я это делал только с намного меньшими базами, поэтому убедительной статистики у меня нет.
...
Рейтинг: 0 / 0
10.06.2015, 08:50:39
    #38980692
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Fyntosбеда в том что со mysql снапшотами я еще дел не имел (если имелся ввиду снапшот на уровне фс, то как его пользовать в рамках mysql?), есть статейки почитать как оно работает и как готовить это?Беда - в том, что Вы документацию не читаете. Даже когда Вам вполне вменяемо указано, о чём читать...
17.1.1.5 Creating a Data Snapshot Using mysqldump
...
Рейтинг: 0 / 0
10.06.2015, 08:57:44
    #38980702
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Fyntosнасколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?Да, он быстрее. Но он переносит только данные, требует строгого порядка выгрузки и загрузки, а также дополнительных телодвижений при загрузке вроде отключения триггеров и контроля целостности. Плюс опасность пропустить какую-то мелочь (а на ветвистых проектах это как два пальца) и получить непригодную к использованию кашу.
С моей точки зрения, выигрыш во времени не оправдывает дополнительного геморроя.
...
Рейтинг: 0 / 0
10.06.2015, 12:44:34
    #38980996
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
AkinaFyntosнасколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?Да, он быстрее. Но он переносит только данные, требует строгого порядка выгрузки и загрузки, а также дополнительных телодвижений при загрузке вроде отключения триггеров и контроля целостности. Плюс опасность пропустить какую-то мелочь (а на ветвистых проектах это как два пальца) и получить непригодную к использованию кашу.
С моей точки зрения, выигрыш во времени не оправдывает дополнительного геморроя.Так топикстартер и переносит только данные, структуру он переносит отдельно. И так же не заботится о порядке таблиц. Триггера при LOAD DATA INFILE срабатывают точно так же, как и при вставке обычным INSERT-ом (хотя очень сомнительна необходимость в этом при переносе данных). Так что никакого дополнительного геморроя от этого не возникает.

И на фоне встречающихся на этом форуме постов вида "помогите, дамп импортируется уже третьи сутки", думаю, оно стоит того, чтобы хотя бы попробовать.
...
Рейтинг: 0 / 0
10.06.2015, 13:37:46
    #38981077
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
miksoftТриггера при LOAD DATA INFILE срабатывают точно так же, как и при вставке обычным INSERT-омВот в том и проблема! при реимпорте уже обработанных некогда триггерами данных повторная обработка не нужна. Более того, способна разнести данные нахрен пополам... Но и на этом веселья не заканчиваются. Например, ты никогда не пробовал загружать данные в таблицу, которая имеет FK на себя, если фактический порядок загрузки приводит к конфликтам, потому что дети в дампе находятся выше родителей? или не дай бог зависимости записей вообще образуют сетку? Не зря при правильной организации переноса сначала делается каркас структуры, потом идут данные, и только потом сверху всё полируется индексами и триггерами...
Если схема данных хоть немного сложна, всё это приходится отслеживать руками. Это скушивает весь выигрыш во времени, да при этом ещё и без гарантий.

Впрочем, наверное, можно задампить только структуру, а потом разделить её на два скрипта - до загрузки данных и после, а данные загружать в полуструктуру из tsc/csv. Если делить аккуратно и задублировать метаинструкции - вполне пройдёт.

miksoftна фоне встречающихся на этом форуме постов вида "помогите, дамп импортируется уже третьи сутки"А вот на это как раз можно и наплевать. Логи пишутся, а реплицировать два дня или неделю - какая нахрен разница?
...
Рейтинг: 0 / 0
10.06.2015, 13:47:41
    #38981098
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
AkinamiksoftТриггера при LOAD DATA INFILE срабатывают точно так же, как и при вставке обычным INSERT-омВот в том и проблема! при реимпорте уже обработанных некогда триггерами данных повторная обработка не нужна. Более того, способна разнести данные нахрен пополам... Но и на этом веселья не заканчиваются. Например, ты никогда не пробовал загружать данные в таблицу, которая имеет FK на себя, если фактический порядок загрузки приводит к конфликтам, потому что дети в дампе находятся выше родителей? или не дай бог зависимости записей вообще образуют сетку? Не зря при правильной организации переноса сначала делается каркас структуры, потом идут данные, и только потом сверху всё полируется индексами и триггерами...
Если схема данных хоть немного сложна, всё это приходится отслеживать руками. Это скушивает весь выигрыш во времени, да при этом ещё и без гарантий.Это все понятно. Но я исхожу из самой первой команды в стартовом топике. Если топикстартера она устраивает логически, то и перенос через tsv устроит его в той же мере.

И полагаю он догадается, что триггера и FK (если они вообще есть, что не факт) нужно переносить после переноса данных. Хотя если есть триггера, модифицирующие другие таблицы, то без тщательного разбора их логики я бы вообще не начинал никаких телодвижений по переносу.

Т.е. я не оппонирую методу с репликацией, не имею ничего против, он вполне имеет право на жизнь. Я говорю лишь о том, что можно улучшить изначальный метод самого топикстартера. А уж выбирать придется ему самому.
...
Рейтинг: 0 / 0
10.06.2015, 13:55:25
    #38981112
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
miksoft , я вообще не знаю, что есть заббикс, а искать и вникать тупо лень, тем более заглядывать ему под юбку.
Что же до первой команды в первом посте - она устраивает ТС как средство переноса данных, но она не гарантирует, что после переноса данных при попытке запуститься на них (или ещё хуже - после некоторого периода видимо нормальной работы) ТСа не ожидает парочка неприятных сюрпризов.
...
Рейтинг: 0 / 0
10.06.2015, 18:13:07
    #38981498
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Akina,

Zabbix - система мониторинга, "тяжелые" таблицы c собранными данными не имеют триггеров и FK, только индексы (структуру таблиц приводил выше).
Другие таблицы, которые содержат непосредственно конфигурацию системы мониоринга, с триггерами и FK я планирую перенести через:
Код: powershell
1.
mysqldump --routines --opt --single-transaction --skip-lock-tables --extended-insert=FALSE


насколько это безопасно будет?

Пока что камнем предкновения остется создание дампа тяжелых таблиц с данными, для этого нужен существенный простой, который могут и не разрешить... Для понимания требуемого времени провожу сравнения способов експорта чеорез dump и tsv на тестовом стенде.
...
Рейтинг: 0 / 0
10.06.2015, 18:35:36
    #38981520
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Fyntosструктуру таблиц приводил вышеМало. Кабы ты ещё пояснил, кто есть ху в той структуре.
Например, мне чертовски непонятна структура таблиц - ну какая это в пень история, если там нет штампа времени?
Будь там поле типа
Код: sql
1.
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

всё стало бы совершенно элементарно. Тормозим сервер на минуту. Включаем логи для репликации. Запускаем. Потом спокойненько копируем данные из этих таблиц в OUTFILE, имея чёткий ориентир для отбора, и получаем пригодный для заливки на слейв TSV-дамп данных. При условии, что история - это именно история, которая знает INSERT, но не слышала про UPDATE.
...
Рейтинг: 0 / 0
10.06.2015, 18:45:40
    #38981528
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Akinaну какая это в пень история, если там нет штампа времени?Fyntos
Код: sql
1.
2.
  `clock` int(11) NOT NULL DEFAULT '0',
  `timestamp` int(11) NOT NULL DEFAULT '0',

Чем не годятся?

Специализированные типы для хранения времени не используются, возможно, для достижения кросс-СУБД-шности. Хотя это только гипотеза, понятия не имею что там на самом деле.
...
Рейтинг: 0 / 0
10.06.2015, 18:54:42
    #38981539
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
miksoftAkinaну какая это в пень история, если там нет штампа времени?Fyntos
Код: sql
1.
2.
  `clock` int(11) NOT NULL DEFAULT '0',
  `timestamp` int(11) NOT NULL DEFAULT '0',

Чем не годятся?

Специализированные типы для хранения времени не используются, возможно, для достижения кросс-СУБД-шности. Хотя это только гипотеза, понятия не имею что там на самом деле.

Штам времени действительно поле `clock`, `timestamp`из второго примера это для таймштампов собираемых логов с железок.

Про второе сказать точно не могу, но вероятнее всего действительно для кросс-СУБД-шности, т.к. в качестве бекенда могут попользованы - IBM DB2, Oracle, PostgreSQL, SQLite/
...
Рейтинг: 0 / 0
10.06.2015, 19:12:52
    #38981556
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
miksoftЧем не годятся?Да тем, что через задницу это... ну и - не люблю в общем-то тыкать пальцем наугад.

FyntosШтам времени действительно поле `clock`Ну так и используйте отбор по нему при начальном сливе данных.
...
Рейтинг: 0 / 0
15.06.2015, 14:05:37
    #38983968
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Еще раз добрый день, вариант переноса через master-slave отработал на тестовом стенде нормально, данные перенеслись, простои минимальны.
Осталось еще несколько вопросов, как я понимаю блокировки запросов от клиента вида:
Код: powershell
1.
 | zabbix | Query   |    42 | Waiting for table metadata lock | insert into history_str (itemid,clock,ns,value) values (28202,1433847002,587568794,'core')


возникающие во время импорта дампа возникают из-за наличия строчки
Код: sql
1.
LOCK TABLES `history_str` WRITE;


в файле дампа. Возможно ли сделать дамп который не будет содержать блокировок таблиц, либо игнорировать блокировку таблиц при импорте?
...
Рейтинг: 0 / 0
15.06.2015, 14:24:50
    #38983990
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Если Вы фактически выполняете импорт в монопольном режиме работы с БД, то блокировки Вам собсно нафиг не нужны. При условии, что Вы не организуете многопоточную вставку данных. Так что можете попробовать ключик --skip-add-locks .
С другой стороны, один раз заблокировать таблицу, а потом сливать в неё данные - быстрее, чем когда движок будет постоянно лочить страницы, в которые рисует.
...
Рейтинг: 0 / 0
15.06.2015, 15:10:45
    #38984023
Fyntos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных с одного сервера на другой.
Akina, --skip-add-locks то что нужно, благодарствую.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перенос данных с одного сервера на другой. / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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