2022-01-17 13:09:16—2022-01-17 13:09:16
Перенос в архив больших фрагментов базы данных с историческими данными.
В ней есть несколько сотен таблиц, в каждой таблицы от 6 до 40 миллионов записей. Есть поле updated (timestamp). Данные таблицы примерно каждый час обновляются, т.е. данные весьма быстро нарастают.
Хочу "откусить" кусок более старых данных и перенести их в некоторое отдельное хранилище, обращаться в который если и понадобиться, то весьма редко.
Для экспорта данных, придется писать скрипты экспорта и загрузки данных, которые пробегают по сотне таблиц. По времени это займет некоторое время. Скрипты тупо на php через exec (или даже на bash).
Для дампа что-нибудь такое:
mysqldump -u root -p --where="updated >=2021-12-01" database1 table | gzip > table_2022_10-11.sql.gz;
Для развертывания дампа, примерно такое:
zcat table_2022_10-11.sql.gz | mysql -uroot -p database1
Но можно ведь, наверное, перекидывать без дампов, а напрямую из базы в базу?
Да, например вот таким запросом:
insert into `database2`.table select * from database1.table where updated < '2021-12-01';
Так как у меня таких таблиц сотни. Надо просто зациклить эти инсерты, и возможно сделать паузы между запросами. Запустить это во время с минимальной востребованностью, т.е. где-то после 2 часов ночи по МСК, хотя есть приличный ломоть аудитории за пределами России.
Но есть еще более простой вариант: в adminer (и видимо phpmyadmin) есть функция: "копировать таблицы в другую базу данных". Просто, но когда таблиц много и они очень большие, лучше автоматизировать и запускать когда следует.
in progress
Все записи