Я знаю, что вы можете использовать mysqldump. Я сейчас сбрасываю так:
${MYSQLDUMP} --single-transaction -u ${MUSER} -h ${MHOST} -p${MPASS} $db | ${GZIP} -9 > $FILE
Насколько я понимаю, это блокирует базу данных и предотвращает любое использование базы данных и даже может блокировать веб-сайты. Есть ли лучший способ делать ежедневные / ежечасные резервные копии базы данных MySQL, если размер базы данных составляет 100 Мбайт и даже 1 Гбайт?
Вероятно, вы захотите:
Чтобы ваши резервные копии были неблокирующими, вам необходимо использовать движок InnoDB для всех таблиц.
Для альтернатив - решений, которые не поставляются вместе с MySQL - взгляните на:
Это заблокирует только таблицы MyISAM. --single-transaction
работает только для предотвращения блокировки таблицы, запустив это в транзакцию.
От 100 МБ до 1 ГБ на самом деле небольшой размер, поэтому, если вы можете жить с небольшой вероятностью несоответствия, вы можете добавить --skip-lock-tables
а также избегайте блокировки таблиц MyISAM. Таким образом, ваши сайты не пострадают.
Несогласованность может возникнуть, если есть приложение, которое обновляет две таблицы. Если это происходит в промежутке между резервным копированием двух таблиц, резервная копия может содержать обновление для второй таблицы, а не для первой.
Это редкое состояние, особенно если у вас небольшая база данных. Если вы не можете смириться с этим, возможно, вам придется использовать более сложные решения, такие как снимки состояния lvm или репликацию.