Автоматическое резервное копирование базы данных MySQL на сервере linux

Мне нужен скрипт, который автоматически создает резервную копию базы данных MySQL. Я знаю, что на эту тему уже есть много сообщений и сценариев, но вот где мой отличается.

  1. скрипт должен работать на компьютере, на котором размещена база данных MySql (это машина linux).
  2. резервные копии должны быть сохранены на том же сервере, что и база данных.
  3. резервное копирование необходимо делать каждые 30 минут.
  4. когда резервная копия старше чем через неделю он удаляется, если это не самая первая резервная копия, созданная на этой неделе. Я. e из этих резервных копий backup_1_12_2010_0-00_Mon.db, backup_1_12_2010_0-30_Mon.db, backup_1_12_2010_1-00_Mon.децибел. .. backup_7_12_2010_23-30_Sun.БД и т. д. Только backup_1_12_2010_0-00_Mon.db сохраняется.

У кого-нибудь есть что-нибудь подобное или есть идеи, с чего начать?

6 ответов


делает почти то же самое, что и многие люди.

  1. скрипт должен работать на компьютере, на котором размещена база данных MySql (это машина linux).
    => Создайте локальный скрипт bash или perl (или что-то еще) "myscript" на этой машине "A"

  2. резервные копии должны быть сохранены на том же сервере, что и база данных.
    => в скрипте "myscript" вы можете просто использовать mysqldump. Из локальной резервной копии можно создать архив что вы посылаете через scp на удаленной машине. Наконец, вы можете поместить свой сценарий резервного копирования в кронтаб (crontab-e).

некоторые подсказки и функции, чтобы вы начали, поскольку я не буду публиковать весь свой скрипт, он не полностью делает трюк, но недалеко:

#!/bin/sh
...
MYSQLDUMP="$(which mysqldump)"   
FILE="$LOCAL_TARBALLS/$TARBALL/mysqldump_$db-$SNAPSHOT_DATE.sql"  
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db > $FILE && $GZIP $GZ_COMPRESSION_LEVEL $FILE   

function create_tarball()
{
local tarball_dir=
tar -zpcvf $tarball_dir"_"$SNAPSHOT_DATE".tar.gz" $tarball_dir >/dev/null
return $?
}

function send_tarball()
{
local PROTOCOLE_="2"
local IPV_="4"
local PRESERVE_="p"
local COMPRESSED_="C"
local PORT="-P $DESTINATION_PORT"
local EXECMODE="B"

local SRC=
local DESTINATION_DIR=
local DESTINATION_HOST=$DESTINATION_USER"@"$DESTINATION_MACHINE":"$DESTINATION_DIR

local COMMAND="scp -$PROTOCOLE_$IPV_$PRESERVE_$COMPRESSED_$EXECMODE $PORT $SRC $DESTINATION_HOST &"

echo "remote copy command: "$COMMAND
[[ $REMOTE_COPY_ACTIVATED = "Yes" ]] && eval $COMMAND

}

затем, чтобы удалить файлы старше, чем "дата", вы можете посмотреть на кто-нибудь и сосредоточьтесь на время изменения и новая параметры.

Edit: как уже было сказано ранее, нет особого интереса делать локальную резервную копию, кроме файла temproray, чтобы иметь возможность легко отправлять tarball и удалять его при отправке.


ответ: хронить

описание:

попробуйте создать файл something.sh с этим:

 #!/bin/sh
 mysqldump -u root -p pwd --opt db1.sql > /respaldosql/db1.sql
 mysqldump -u root -p pwd --opt db2.sql > /respaldosql/db2.sql
 cd /home/youuser/backupsql/
 tar -zcvf backupsql_$(date +%d%m%y).tgz *.sql
 find -name '*.tgz' -type f -mtime +2 -exec rm -f {} \;

дайте соответствующее разрешение на файл

 chmod 700 mysqlrespaldo.sh

или

 sudo chmod 700 something.sh

а затем создайте cron с

 crontab -e

установив его как

 **0 1 * * *** /home/youruser/coolscripts/something.sh

помните, что цифры или символы " * " имеют такую структуру:

Minutes (range 0-59)
Hours (0-23)
Day of month (1-31)
Month (1-12)
Day of the week (0-6 being 0=Domingo)
Absolute path to script or program to run

вы можете сделать с помощью одной строки задача cron для запуска каждые 30 минут:

mysqldump -u<user> -p<pass> <database> > /path/to/dumps/db.$(date +%a.%H:%M).dump

это создаст дамп базы данных каждые 30 минут, и каждую неделю он начнет перезаписывать дампы предыдущей недели.

затем есть другой cronjob, который работает один раз в неделю, который копирует последний дамп в отдельное место, где вы храните снимки.


создать shell-скрипт, как показано ниже:

#!/bin/bash
mysqldump -u username -p'password' dbname > /my_dir/db_$(date+%m-%d-%Y_%H-%M-%S).sql
find /mydir -mtime +10 -type f -delete

замените имя пользователя, пароль и каталог резервной копии (my_dir). Сохраните его в каталоге (shell_dir) как filename.sh

запланируйте его для запуска каждый день с помощью crontab-e, как:

30 8 * * * /shell_dir/filename.sh

это будет работать каждый день в 8: 30 утра и резервное копирование базы данных. Он также удаляет резервную копию, которая старше 10 дней. Если вы не хотите этого делать, просто удалите последнюю строку из сценария.


мои предпочтения для AutoMySQLBackup, который поставляется с Debian. Это очень просто и создает ежедневные резервные копии, которые можно настроить. Кроме того, он хранит еженедельно, а затем одну ежемесячную резервную копию.

У меня это работает некоторое время, и это очень легко настроить и использовать!


вы могли бы рассмотреть этот инструмент с открытым исходным кодом, matiri, https://github.com/AAFC-MBB/matiri который является параллельным резервное копирование MySQL скрипт с метаданными в sqlite3. Особенности (больше, чем вы просили...):

  • Multi-Server: несколько серверов MySQL поддерживаются ли они совместно расположены на одном или отдельных физических серверах.
  • Parallel: каждая база данных на сервере для резервного копирования выполняется отдельно, параллельно (параллелизм устанавливается: по умолчанию: 3)
  • сжатый: каждая резервная копия базы данных сжатым
  • контрольная сумма: SHA256 каждого сжатого файла резервной копии хранится и архив всех файлов
  • Archived: все резервные копии базы данных tar'Ed вместе в один файл
  • записано: резервное копирование информации, хранящейся в базе данных Sqlite3

полное раскрытие информации: оригинальный автор matiri.