← Cloudflare D1 / d1 / reference
Time Travel и резервное копирование
Time Travel представляет собой подход D1 к резервному копированию и восстановлению на определённый момент времени и позволяет восстановить базу данных на любую минуту за последние 30 дней.
- Включать Time Travel не нужно: эта функция работает всегда.
- История базы данных и восстановление базы данных не влекут дополнительных расходов.
- Time Travel автоматически создаёт bookmarks от вашего имени. Вручную запускать резервное копирование или помнить о нём не требуется.
Не завися от плановых или запускаемых вручную резервных копий, вы можете вернуться назад во времени и восстановить базу данных до неудачной миграции или изменения схемы, DELETE или UPDATE оператор без указания конкретного WHERE предложение, а в будущем можно будет напрямую создавать форк или копию рабочей базы данных.
Bookmarks
Time Travel использует концепцию D1 под названием bookmark чтобы восстановить состояние на определённый момент времени.
- Bookmark старше 30 дней недействительны и не могут использоваться как точка восстановления.
- Восстановление базы данных до конкретного bookmark не удаляет более старые bookmark. Например, если вы восстановите базу данных до bookmark, отражающего её состояние 10 минут назад, а затем поймёте, что нужно восстановить более ранний момент времени, вы всё равно сможете это сделать.
- Закладки можно сортировать лексикографически: такая сортировка упорядочивает их список от старых к новым.
- Bookmark можно получить из Unix-время ↗ (количество секунд с 1 января 1970 года), а преобразование между конкретной меткой времени и bookmark детерминировано (стабильно).
Bookmark также используются Sessions API чтобы обеспечить последовательную согласованность в рамках Session.
Временные метки
Time Travel поддерживает два формата временных меток:
- значения Unix-времени ↗, что соответствует количеству секунд, прошедших с полуночи 1 января 1970 года. Это значение всегда указано в UTC.
- Формат строки даты и времени JavaScript ↗, что представляет собой упрощённую версию формата временных меток ISO-8601. Например, корректная строка даты и времени для 27 июля 2023 года, 11:18 по времени Americas/New_York (EST), будет выглядеть так:
2023-07-27T11:18:53.000-04:00.
Требования
Wranglerv3.4.0или более позднюю версию, чтобы использовать команды Time Travel.- База данных на продакшен-бэкенде D1. Проверить, использует ли база данных этот бэкенд, можно с помощью
wrangler d1 info DB_NAME- вывод показываетversion: production.
Получение bookmark
Bookmark для текущей временной метки можно получить, вызвав d1 info команду, которая по умолчанию возвращает текущий bookmark:
wrangler d1 time-travel info YOUR_DATABASE🚧 Time Traveling...
⚠️ The current bookmark is '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683'
⚡️ To restore to this specific bookmark, run:
`wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`Чтобы получить bookmark для временной метки в прошлом, передайте --timestamp флаг с корректной временной меткой в формате Unix или RFC3339:
wrangler d1 time-travel info YOUR_DATABASE --timestamp="2023-07-09T17:31:11+00:00"Восстановление базы данных
Чтобы восстановить базу данных на определённый момент времени:
wrangler d1 time-travel restore YOUR_DATABASE --timestamp=UNIX_TIMESTAMP🚧 Restoring database YOUR_DATABASE from bookmark 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be
⚠️ This will overwrite all data in database YOUR_DATABASE.
In-flight queries and transactions will be cancelled.
✔ OK to proceed (y/N) … yes
⚡️ Time travel in progress...
✅ Database YOUR_DATABASE restored back to bookmark 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be
↩️ To undo this operation, you can restore to the previous bookmark: 00000085-ffffffff-00004c6d-2510c8b03a2eb2c48b2422bb3b33fad5Учтите:
- Временные метки преобразуются в детерминированный, стабильный bookmark. Одна и та же временная метка всегда будет соответствовать одному и тому же bookmark.
- Выполняющиеся запросы будут отменены, а клиенту будет возвращена ошибка.
- Операция восстановления вернёт закладка который позволяет вам отменить и верните базу данных к предыдущему состоянию.
Отмена восстановления
Отменить восстановление можно, выполнив следующее:
- Взяв на заметку предыдущий bookmark, возвращённый в составе
wrangler d1 time-travel restoreоперация - Восстановление напрямую до bookmark в прошлом, до вашего последнего восстановления.
Чтобы получить bookmark из более раннего состояния:
wrangler d1 time-travel info YOUR_DATABASE🚧 Time Traveling...
⚠️ The current bookmark is '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683'
⚡️ To restore to this specific bookmark, run:
`wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`Экспорт D1 в R2 с помощью Workflows
Базу данных D1 можно автоматически экспортировать в хранилище R2 через REST API и Cloudflare Workflows. Это может быть полезно, если вы хотите хранить состояние базы данных D1 дольше 30 дней.
См. руководство Экспорт и сохранение базы данных D1.
Примечания
- Быстро получить временную метку Unix из командной строки в macOS и Windows можно через
date +%s. - Time Travel пока не позволяет клонировать или форкнуть существующую базу данных в новую копию. В будущем Time Travel позволит создавать форк (клон) существующей базы данных в новую базу данных или перезаписывать существующую базу данных.
- Базу данных можно восстановить на момент времени вплоть до 30 дней назад (план Workers Paid) или 7 дней (план Workers Free). См. Лимиты с подробностями об ограничениях Time Travel.