|
|
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Имеется Zabbix сервер с бекендом ввиде mysql 5.1.73, размер БД заббикса 400GB. Для оптимизации процесса очистки истории заббикса необходимо было сделать партицирование "тяжелых" таблиц (history, trends). Для этого подготовили новый сервер с mysql 5.6.25, настроили пртицирование нужных таблиц, дело осталось за малым - импортировать все данные из старого сервера БД. Работу самого сервера мониторинга заббикс прерывать нельзя, по этому вначале были импортированы "легкие" таблицы с конфигурацией самого заббикса, после чего был запущен сервер заббикса и его фронтенд. Собираемые данные стали падать в новую БД, все работает, все прекрасно... Импортировать тяжелые таблицы планировал через конструкцию вида: Код: powershell 1. таким способом данные медленно, но верно импортируются из старой БД в новую, но проблема в том, что заббикс сервер не может записать новые данные в таблицу в которую сейчас идет импорт, т.е. система мониторинга корректно функционировать не может. В processlist такие запросы висят с таки статусом: Код: powershell 1. Запрос на импорт из старой БД в processlist: Код: powershell 1. Сама БД стандартная для заббикса - ENGINE=InnoDB. Есть ли способ импортировать данные не прервая работу сервера заббикс и не создавая блокировок таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 16:07:37 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Fyntos, А что с автоинкрементными полями? Они используются в таблицах заббикса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 16:18:51 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
именно в этих "тажелых" таблицах нет: Код: sql 1. 2. 3. 4. 5. 6. 7. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 16:25:31 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Я бы подумал в таком направлении: 1) Сделать промежуточный сервер, запустить сам Zabbix на нем. 2) Создать новый сервер. 3) Экспортировать данные со старого сервера. 4) Импортировать данные на новый сервер. 5) Переключить Zabbix на новый сервер. 6) Экспортировать данные с промежуточного сервера. 7) Импортировать данные с промежуточного сервера. Предполагается, что их будет немного и время блокировок будет незначительным. Кроме того, экспорт/импорт я бы делал не дампом, а tsv-файлом. Это должно быть ощутимо быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 16:41:05 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Если я не ошибаюсь, партиционирование на сервере-копии не должно стать помехой при репликации. Если так - на новом сервере можно развернуть модифицированную структуру и настроить репликацию на него с боевого сервера. Сколько на это уйдёт времени - в общем неважно... 400Г должны отреплицироваться за в общем вменяемое время. А когда базы подровняются, просто на короткий срок остановить сервис, остановить и удалить репликацию, перенастроить сервис на новый сервер и запуститься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 16:46:33 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
AkinaЕсли я не ошибаюсь, партиционирование на сервере-копии не должно стать помехой при репликации. Если так - на новом сервере можно развернуть модифицированную структуру и настроить репликацию на него с боевого сервера. Сколько на это уйдёт времени - в общем неважно... 400Г должны отреплицироваться за в общем вменяемое время. А когда базы подровняются, просто на короткий срок остановить сервис, остановить и удалить репликацию, перенастроить сервис на новый сервер и запуститься. Но ведь настройка репликации подразумевает первоначальную синхронизацию БД, т.е. если до этого не писались бинлоги, то и реплицировать то нечего будет? если ошибаюсь киньте статейку на почитать и хаутушку если есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 17:49:52 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
FyntosНо ведь настройка репликации подразумевает первоначальную синхронизацию БД Есссно. Вы отключаете сервис, на мастере делаете снапшот и одновременно настраиваете его запись логов и как мастера. По завершении дампирования рестартуете сервер и включаете сервис в работу. Всё, теперь логи пишутся, материал для синхронизации будет. Не спеша разворачиваете снапшот на слейве (предварительно его откорректировав с изменением структуры, либо разворачиваете только данные в подготовленную структуру), после чего врубаете репликацию - и она подкачивает изменения, произошедшие после снятия снапшота. Снятие снапшота выполнится сравнительно быстро. А сколько времени займёт его развёртывание на слейве - Вам, в общем, сиренево. Ну логи будут пухлые, досинхронизация займёт время - но в течение этого времени сервис будет нормально обслуживать клиентов. Закончится синхронизация - опять тормозим сервис и серверы, перестраиваем их, и запускаем всё на новом сервере БД. С моей точки зрения, при такой технологии время, на которое придётся останавливать сервис, будет минимально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 18:28:24 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
AkinaFyntosНо ведь настройка репликации подразумевает первоначальную синхронизацию БД Есссно. Вы отключаете сервис, на мастере делаете снапшот и одновременно настраиваете его запись логов и как мастера. По завершении дампирования рестартуете сервер и включаете сервис в работу. Всё, теперь логи пишутся, материал для синхронизации будет. Не спеша разворачиваете снапшот на слейве (предварительно его откорректировав с изменением структуры, либо разворачиваете только данные в подготовленную структуру), после чего врубаете репликацию - и она подкачивает изменения, произошедшие после снятия снапшота. Снятие снапшота выполнится сравнительно быстро. А сколько времени займёт его развёртывание на слейве - Вам, в общем, сиренево. Ну логи будут пухлые, досинхронизация займёт время - но в течение этого времени сервис будет нормально обслуживать клиентов. Закончится синхронизация - опять тормозим сервис и серверы, перестраиваем их, и запускаем всё на новом сервере БД. С моей точки зрения, при такой технологии время, на которое придётся останавливать сервис, будет минимально. по идее простой в таком случае будет самым минимальным, но беда в том что со mysql снапшотами я еще дел не имел (если имелся ввиду снапшот на уровне фс, то как его пользовать в рамках mysql?), есть статейки почитать как оно работает и как готовить это? а так же может подскажете наиболее быстрый способ переноса только данных между базами, насколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:27:37 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Fyntosнасколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?По моим наблюдениям - в несколько раз. Но я это делал только с намного меньшими базами, поэтому убедительной статистики у меня нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 19:43:44 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Fyntosбеда в том что со mysql снапшотами я еще дел не имел (если имелся ввиду снапшот на уровне фс, то как его пользовать в рамках mysql?), есть статейки почитать как оно работает и как готовить это?Беда - в том, что Вы документацию не читаете. Даже когда Вам вполне вменяемо указано, о чём читать... 17.1.1.5 Creating a Data Snapshot Using mysqldump ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 08:50:39 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Fyntosнасколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?Да, он быстрее. Но он переносит только данные, требует строгого порядка выгрузки и загрузки, а также дополнительных телодвижений при загрузке вроде отключения триггеров и контроля целостности. Плюс опасность пропустить какую-то мелочь (а на ветвистых проектах это как два пальца) и получить непригодную к использованию кашу. С моей точки зрения, выигрыш во времени не оправдывает дополнительного геморроя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 08:57:44 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
AkinaFyntosнасколько метод экспорта/импорта через tsv-файл (как советовали выше) будет бустрее mysqldump'a?Да, он быстрее. Но он переносит только данные, требует строгого порядка выгрузки и загрузки, а также дополнительных телодвижений при загрузке вроде отключения триггеров и контроля целостности. Плюс опасность пропустить какую-то мелочь (а на ветвистых проектах это как два пальца) и получить непригодную к использованию кашу. С моей точки зрения, выигрыш во времени не оправдывает дополнительного геморроя.Так топикстартер и переносит только данные, структуру он переносит отдельно. И так же не заботится о порядке таблиц. Триггера при LOAD DATA INFILE срабатывают точно так же, как и при вставке обычным INSERT-ом (хотя очень сомнительна необходимость в этом при переносе данных). Так что никакого дополнительного геморроя от этого не возникает. И на фоне встречающихся на этом форуме постов вида "помогите, дамп импортируется уже третьи сутки", думаю, оно стоит того, чтобы хотя бы попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 12:44:34 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
miksoftТриггера при LOAD DATA INFILE срабатывают точно так же, как и при вставке обычным INSERT-омВот в том и проблема! при реимпорте уже обработанных некогда триггерами данных повторная обработка не нужна. Более того, способна разнести данные нахрен пополам... Но и на этом веселья не заканчиваются. Например, ты никогда не пробовал загружать данные в таблицу, которая имеет FK на себя, если фактический порядок загрузки приводит к конфликтам, потому что дети в дампе находятся выше родителей? или не дай бог зависимости записей вообще образуют сетку? Не зря при правильной организации переноса сначала делается каркас структуры, потом идут данные, и только потом сверху всё полируется индексами и триггерами... Если схема данных хоть немного сложна, всё это приходится отслеживать руками. Это скушивает весь выигрыш во времени, да при этом ещё и без гарантий. Впрочем, наверное, можно задампить только структуру, а потом разделить её на два скрипта - до загрузки данных и после, а данные загружать в полуструктуру из tsc/csv. Если делить аккуратно и задублировать метаинструкции - вполне пройдёт. miksoftна фоне встречающихся на этом форуме постов вида "помогите, дамп импортируется уже третьи сутки"А вот на это как раз можно и наплевать. Логи пишутся, а реплицировать два дня или неделю - какая нахрен разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 13:37:46 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
AkinamiksoftТриггера при LOAD DATA INFILE срабатывают точно так же, как и при вставке обычным INSERT-омВот в том и проблема! при реимпорте уже обработанных некогда триггерами данных повторная обработка не нужна. Более того, способна разнести данные нахрен пополам... Но и на этом веселья не заканчиваются. Например, ты никогда не пробовал загружать данные в таблицу, которая имеет FK на себя, если фактический порядок загрузки приводит к конфликтам, потому что дети в дампе находятся выше родителей? или не дай бог зависимости записей вообще образуют сетку? Не зря при правильной организации переноса сначала делается каркас структуры, потом идут данные, и только потом сверху всё полируется индексами и триггерами... Если схема данных хоть немного сложна, всё это приходится отслеживать руками. Это скушивает весь выигрыш во времени, да при этом ещё и без гарантий.Это все понятно. Но я исхожу из самой первой команды в стартовом топике. Если топикстартера она устраивает логически, то и перенос через tsv устроит его в той же мере. И полагаю он догадается, что триггера и FK (если они вообще есть, что не факт) нужно переносить после переноса данных. Хотя если есть триггера, модифицирующие другие таблицы, то без тщательного разбора их логики я бы вообще не начинал никаких телодвижений по переносу. Т.е. я не оппонирую методу с репликацией, не имею ничего против, он вполне имеет право на жизнь. Я говорю лишь о том, что можно улучшить изначальный метод самого топикстартера. А уж выбирать придется ему самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 13:47:41 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
miksoft , я вообще не знаю, что есть заббикс, а искать и вникать тупо лень, тем более заглядывать ему под юбку. Что же до первой команды в первом посте - она устраивает ТС как средство переноса данных, но она не гарантирует, что после переноса данных при попытке запуститься на них (или ещё хуже - после некоторого периода видимо нормальной работы) ТСа не ожидает парочка неприятных сюрпризов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 13:55:25 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Akina, Zabbix - система мониторинга, "тяжелые" таблицы c собранными данными не имеют триггеров и FK, только индексы (структуру таблиц приводил выше). Другие таблицы, которые содержат непосредственно конфигурацию системы мониоринга, с триггерами и FK я планирую перенести через: Код: powershell 1. насколько это безопасно будет? Пока что камнем предкновения остется создание дампа тяжелых таблиц с данными, для этого нужен существенный простой, который могут и не разрешить... Для понимания требуемого времени провожу сравнения способов експорта чеорез dump и tsv на тестовом стенде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 18:13:07 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Fyntosструктуру таблиц приводил вышеМало. Кабы ты ещё пояснил, кто есть ху в той структуре. Например, мне чертовски непонятна структура таблиц - ну какая это в пень история, если там нет штампа времени? Будь там поле типа Код: sql 1. всё стало бы совершенно элементарно. Тормозим сервер на минуту. Включаем логи для репликации. Запускаем. Потом спокойненько копируем данные из этих таблиц в OUTFILE, имея чёткий ориентир для отбора, и получаем пригодный для заливки на слейв TSV-дамп данных. При условии, что история - это именно история, которая знает INSERT, но не слышала про UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 18:35:36 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Akinaну какая это в пень история, если там нет штампа времени?Fyntos Код: sql 1. 2. Чем не годятся? Специализированные типы для хранения времени не используются, возможно, для достижения кросс-СУБД-шности. Хотя это только гипотеза, понятия не имею что там на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 18:45:40 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
miksoftAkinaну какая это в пень история, если там нет штампа времени?Fyntos Код: sql 1. 2. Чем не годятся? Специализированные типы для хранения времени не используются, возможно, для достижения кросс-СУБД-шности. Хотя это только гипотеза, понятия не имею что там на самом деле. Штам времени действительно поле `clock`, `timestamp`из второго примера это для таймштампов собираемых логов с железок. Про второе сказать точно не могу, но вероятнее всего действительно для кросс-СУБД-шности, т.к. в качестве бекенда могут попользованы - IBM DB2, Oracle, PostgreSQL, SQLite/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 18:54:42 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
miksoftЧем не годятся?Да тем, что через задницу это... ну и - не люблю в общем-то тыкать пальцем наугад. FyntosШтам времени действительно поле `clock`Ну так и используйте отбор по нему при начальном сливе данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 19:12:52 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Еще раз добрый день, вариант переноса через master-slave отработал на тестовом стенде нормально, данные перенеслись, простои минимальны. Осталось еще несколько вопросов, как я понимаю блокировки запросов от клиента вида: Код: powershell 1. возникающие во время импорта дампа возникают из-за наличия строчки Код: sql 1. в файле дампа. Возможно ли сделать дамп который не будет содержать блокировок таблиц, либо игнорировать блокировку таблиц при импорте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2015, 14:05:37 |
|
||
|
Перенос данных с одного сервера на другой.
|
|||
|---|---|---|---|
|
#18+
Если Вы фактически выполняете импорт в монопольном режиме работы с БД, то блокировки Вам собсно нафиг не нужны. При условии, что Вы не организуете многопоточную вставку данных. Так что можете попробовать ключик --skip-add-locks . С другой стороны, один раз заблокировать таблицу, а потом сливать в неё данные - быстрее, чем когда движок будет постоянно лочить страницы, в которые рисует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2015, 14:24:50 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38984023&tid=1833058]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 307ms |

| 0 / 0 |
