Назад | Перейти на главную страницу

Могу ли я сделать резервную копию mysql во время работы mysql?

Я только что установил серверную версию Jungle Disk на свой Linux-сервер и настроил резервное копирование всего каталога / var один раз за ночь. Есть ли проблема с резервным копированием этого каталога во время работы моего сервера и mysql? Я читал, что вам следует закрыть mysql перед резервным копированием файлов mysql ... но я не видел такого предупреждения в документации Jungle Disk.

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

Если вам нужна хорошая резервная копия базы данных Mysql, вы должны исключить каталог базы данных Mysql из Jungledisk, а затем периодически использовать mysqldump для создания файла, который вы сможете сделать резервную копию.

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

В других ответах есть правильная идея, вы не можете, не должны и не будете (верно?) Создавать резервные копии живых файлов базы данных. Вы ДОЛЖНЫ использовать какую-то утилиту экспорта, но вместо встроенной утилиты mysqldump я настоятельно рекомендую mysqlhotcopy для обеспечения согласованности данных. Резервное копирование данных по мере их восстановления оставит вас в неисправном состоянии после восстановления.

Сохраните это и запустите его в задании cron - Затем просто создайте сценарий резервного копирования, у которого есть резервная копия каталога db dump

Кстати, отличный сценарий от людей из @ NixCraft:

    #!/bin/bash
# Shell script to backup MySql database
# To backup Nysql databases file to /backup dir and later pick up by your
# script. You can skip few databases from backup too.
# For more info please see (Installation info):
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html
# Last updated: Aug - 2005
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------

MyUSER="SET-MYSQL-USER-NAME"     # USERNAME
MyPASS="SET-PASSWORD"       # PASSWORD
MyHOST="localhost"          # Hostname

# Linux bin paths, change this if it can not be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"

# Backup Dest directory, change this if you have someother location
DEST="/backup"

# Main directory where backup will be stored
MBD="$DEST/mysql"

# Get hostname
HOST="$(hostname)"

# Get data in dd-mm-yyyy format
NOW="$(date +"%d-%m-%Y")"

# File to store current backup file
FILE=""
# Store list of databases
DBS=""

# DO NOT BACKUP these databases
IGGY="test"

[ ! -d $MBD ] && mkdir -p $MBD || :

# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST

# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"

for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
    for i in $IGGY
    do
        [ "$db" == "$i" ] && skipdb=1 || :
    done
    fi

    if [ "$skipdb" == "-1" ] ; then
    FILE="$MBD/$db.$HOST.$NOW.gz"
    # do all inone job in pipe,
    # connect to mysql using mysqldump for select mysql database
    # and pipe it out to gz file in backup dir :)
        $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
    fi
done

Что касается предоставленного сценария и выполнения mysqldumps - поскольку это обсуждение сосредоточено на jungledisk, вы НЕ хотите архивировать дамп с помощью gzip.

Jungledisk использует дедупликацию данных и дифференциальное резервное копирование, чтобы повысить эффективность своего хранилища. Если делать сырые дампы; тогда все работает. Если вы сначала используете gzip, тогда он должен хранить весь (другой) gzip; и не достигается оптимизация скорости резервного копирования или требуемого пространства для хранения резервных копий.

Это действительно старый вопрос, но на него еще нет принятого ответа, и только один ответ ссылается на другой инструмент, кроме mysqldump для выполнения резервного копирования. Как упоминает VxJasonxV, mysqlhotcopy можно использовать для получения онлайн-копии ваших баз данных без завершения работы. Однако mysqlhotcopy работает только с таблицами MyISAM.

Если вы запускаете много таблиц InnoDB, посмотрите Percona's xtrabackup инструмент. Он сделает онлайн-резервную копию вашей базы данных MySQL, не закрывая MySQL. Percona создала универсальный сценарий, который будет создавать резервные копии ваших таблиц InnoDB и MyISAM, не отключая вашу базу данных. Скрипт называется innobackupex и это подтверждает вышеупомянутые xtrabackup инструмент для выполнения ваших онлайн-резервных копий.

Проверьте это, это определенно упрощает резервное копирование баз данных MySQL.