Дамп/восстановление/просмотр хода выполнения AWS RDS
Бьюсь об заклад, у вас была ситуация, когда вам нужно было сбросить производственную базу данных для какого-то исследования, тестирования или даже разработки.
Не по теме:
Я не буду упоминать здесь о конфиденциальных данных и запутывании данных, поскольку это выходит за рамки этого поста, но просто хотел напомнить вам, что вы имеете дело с данными реальных людей и должны помнить о некоторых правилах, таких как GDPR, или быть осторожным. не отправлять электронные письма реальным пользователям, если вы тестируете свои приложения с использованием рабочей БД.
В любом случае полезно заменить конфиденциальные данные реальных пользователей некоторыми фиктивными значениями.
Обычно производственная база данных защищена в AWS VPC (виртуальное частное облако), и никто не сможет подключиться напрямую без VPN. Часто бывает так, что БД доступна только с сервера внутри VPC, который служит сервером-бастионом, так что вы можете получить доступ к другим серверам внутри VPC с этого сервера, но не с общедоступного.
Ниже приведены несколько советов, которые могут оказаться полезными в таких обстоятельствах:
- Скопируйте файл MySQL из базы данных RDS прямо на свой локальный хост.
Это означает, что вам не нужно создавать дамп файла на «бастионном» сервере, а затем копировать его на свой локальный сервер, потому что вы можете создать дамп прямо на своем локальном сервере.
ssh -i ssh_key.pem ec2-user@bastion.host \
mysqldump -P 3306 -h rds.host -u dbuser --password=dbpassword dbname > dumpfile
Эта команда отправит ssh на сервер бастиона и выполнит mysqldump
команда там, но результат перенаправляется в ваш файл localhost dumpfile
.
- Если у вас недостаточно смелости, чтобы выгружать БД из командной строки, и вы предпочитаете использовать некоторые графические инструменты, такие как Продолжение Про вы все еще можете сделать это, используя обратный ssh-туннель.
Это означает, что вы сопоставите удаленный порт вашего хоста RDS с портом локального хоста, и сервер-бастион будет использоваться для туннелирования трафика.
ssh -i ssh_key.pem -N -L LOCAL_PORT:rds.host:RDS_PORT ec2-user@bastion.host
Когда он запустится, вы сможете подключиться к своему любимому клиенту, например:
- Если вы сбрасываете или восстанавливаете большие БД, может быть сложно увидеть прогресс. Обычно команда выглядит как зависание, например, для восстановления:
mysql -P DB_PORT -u dbuser --password=dbpassword dbname < dumpfile
В системах *nix есть хороший, но не очень известный инструмент, который называется Просмотр каналов с помощью которого вы можете отслеживать прогресс.
— для дампа:
mysqldump -P 3306 -h rds.host -u dbuser --password=dbpassword dbname | pv -W > dumpfile
— для восстановления:
pv dumpfile | mysql -P DB_PORT -h db.host -u dbuser --password=dbpassword dbname
Затем вы видите хороший индикатор выполнения от Pipe Viewer:
Спасибо за чтение!
Вы можете связаться со мной по Твиттер или подпишитесь на мою рассылку. Я буду время от времени информировать вас о своих последних работах.