jabrusli ([info]jabrusli) wrote in [info]ru_highload,

Как mysql налету бэкапить?

Подскажите пожалуйста, как забэкапить базу из больших MyISAM таблиц, в которые постоянно добавляются новые записи?

mysqldump лочит таблицы на запись и во время дампа база фактически простаивает. Конечно можно разбить большие таблицы на много маленьких, но это долго реализовывать - много запросов придётся переписать. Репликацию тоже не очень хочется прикручивать.

Иметь моментальный слепок базы мне не нужно. Если во время дампа записи в таблицах будут меняться/добавляться, то это приемлемо.
Tags: mysql

  • Post a new comment

    Error

  • 14 comments

[info]_fidget_

March 3 2007, 13:40:55 UTC 5 years ago

либо репликацию и делать бэкап со слейва, либо совсем без локов - никак.
Кроме mysqldump, можно делать:
FLUSH TABLES WITH READ LOCK;
// копировать файлы MyISAM таблиц
UNLOCK TABLES;

но опять таки таблицы будут залочены на это время. Кроме того FLUSH TABLES WITH READ LOCK может занять много времени т.к. он будет ждать окончания выполнений всех запущенных запросов.

[info]subtlethrust

March 3 2007, 17:07:50 UTC 5 years ago

mysqlhotcopy

Простыми словами: делается read lock на дата и переписывается всё куда укажете

mysqlhotcopy db_name destination

Например: mysqlhotcopy mysql /tmp/

В myisam по другому нельзя. Если очень большая database, то делать бэкапы со слейва.

mysqldump очень долий и могут быть проблемы.

[info]subtlethrust

March 3 2007, 17:10:55 UTC 5 years ago

В принципе мой ответ - это тоже самое, что и _fidget_ написал. Просто mysqlhotcopy делает весь процесс более простым.

[info]jabrusli

March 3 2007, 17:38:36 UTC 5 years ago

А вот это:
http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/ на FeeBSD как организовать?

[info]smitik

March 3 2007, 21:10:53 UTC 5 years ago

Реплицировать в другой mySQL и бекапить копию ?

[info]jabrusli

March 3 2007, 21:48:13 UTC 5 years ago

Похоже можно без репликации обойтись.

1. FLUSH TABLES WITH READ LOCK;
2. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/snapshots.html делаем снэпшот файлухи, где лежат базы мускула
3. UNLOCK TABLES;
4. копируем директории с базой или отдельные таблицы
5. отцепляем снэпшот
6. на всякий случай чекаем таблицы
7. сжимаем таблицы и отправляем их куда надо.

Жду комментариев/рекомедаций/предложений/описаний возможных траблов.

Под Линукс есть даже скриптик специальный: http://lenz.homelinux.org/mylvmbackup/ . Под FreeBSD его надо немного переписать.

[info]knyar

March 9 2007, 22:54:02 UTC 5 years ago

У меня вот такая конструкция на фре работает:
(echo "FLUSH TABLES WITH READ LOCK;"; echo "\! ${MOUNT} -u -o snapshot /${SNAPPART}/.snap/backup /${SNAPPART}"; echo "UNLOCK TABLES;" ) | ${MYSQL} --user=root --password=`${CAT} ${MYSQLROOTPW}`

[info]efreeti

March 4 2007, 12:43:59 UTC 5 years ago

merge, и не надо ничего переписывать (если вы, конечно, не юзали InnoDB и транзакции).

[info]jabrusli

March 4 2007, 13:18:36 UTC 5 years ago

Это заплатка. Селекты будут медленее во столько раз, сколько у вас таблиц объединено.

Сейчас MySQL Inc делают партишнинг. Вот с ним можно будет что-то пробовать. Хотя разбивать большие таблицы на несколько маленьких всёравно лучше на уровне приложения. Гибче получается и можно разнести на несколько машин.

[info]efreeti

March 4 2007, 13:27:50 UTC 5 years ago

Ну вообще да, согласен, это больше для insert'ов (логи и проч).

[info]mivlad

March 10 2007, 06:29:32 UTC 5 years ago

То есть целостность базы не интересует? Может, INSERT … SELECT тогда подойдёт? :-)

[info]sanmai

March 11 2007, 17:58:13 UTC 5 years ago

Самое правильное и надежное решение: бекап со слейва.

[info]svndkr

March 17 2007, 19:02:50 UTC 5 years ago

почитайте здесь

почитайте здесь: http://dev.mysql.com/doc/refman/5.0/en/disaster-prevention.html

Anonymous

April 26 2007, 02:03:58 UTC 5 years ago

вы об чем?
mysqldump --single-transaction?
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…