<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.webko.net.ua/index.php?action=history&amp;feed=atom&amp;title=MySQL_Backup</id>
	<title>MySQL Backup - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.webko.net.ua/index.php?action=history&amp;feed=atom&amp;title=MySQL_Backup"/>
	<link rel="alternate" type="text/html" href="https://wiki.webko.net.ua/index.php?title=MySQL_Backup&amp;action=history"/>
	<updated>2026-04-19T11:08:17Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.webko.net.ua/index.php?title=MySQL_Backup&amp;diff=146&amp;oldid=prev</id>
		<title>Sol: Новая страница: « == Простой бекап базы ==   mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c &gt; `date &quot;+\%Y-\%m-\%d&quot;`.gz    0  5  *  *  * root /var/sql_back…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.webko.net.ua/index.php?title=MySQL_Backup&amp;diff=146&amp;oldid=prev"/>
		<updated>2015-04-21T19:59:21Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « == Простой бекап базы ==   mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c &amp;gt; `date &amp;quot;+\%Y-\%m-\%d&amp;quot;`.gz    0  5  *  *  * root /var/sql_back…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== Простой бекап базы ==&lt;br /&gt;
&lt;br /&gt;
 mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c &amp;gt; `date &amp;quot;+\%Y-\%m-\%d&amp;quot;`.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 0  5  *  *  * root /var/sql_backup/pn_ua.sh&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 mysqldump -u root  -pKw7To7H0rlP5 pn.ua | gzip -c &amp;gt; /var/sql_backup/pn.ua_`date &amp;quot;+%Y-%m-%d&amp;quot;`.gz&lt;br /&gt;
&lt;br /&gt;
== Полный бекап базы ==&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # Эти данные нужно сменить, если какой-либо из параметров поменяется. Например при плановой замене пароля.&lt;br /&gt;
 export DB_BACKUP=&amp;quot;/home/backups/mysql&amp;quot; #Указать каталог для баз&lt;br /&gt;
 export DB_USER=&amp;quot;root&amp;quot; # Указать пользователя, от которого будет идти бэкап. Лучше не root, а имеющий возможность только чтения&lt;br /&gt;
 export DB_PASSWD=&amp;quot;qweqwe&amp;quot; # Указать пароль этого пользователя&lt;br /&gt;
 # название и версии бэкапов. Тут же - глубина бэкапов. Чем больше строк &amp;quot;mv $DB_BACK...&amp;quot; тем больше бэкапов сохранится. При каждом&lt;br /&gt;
 # срабатывании скрипта бэкапы перемещаются в сл. папку, а последний - удаляется. То есть такая достаточно примитивная ротация,&lt;br /&gt;
 # которая избавит от необходимости постоянно чистить диски от старых и уже ненужных бэкапов&lt;br /&gt;
 echo &amp;quot;* Идет бэкап, можете покурить, попить чаю или поиграть в косынку :)&amp;quot;&lt;br /&gt;
 rm -rf $DB_BACKUP/04&lt;br /&gt;
 mv $DB_BACKUP/03 $DB_BACKUP/04&lt;br /&gt;
 mv $DB_BACKUP/02 $DB_BACKUP/03&lt;br /&gt;
 mv $DB_BACKUP/01 $DB_BACKUP/02&lt;br /&gt;
 mkdir $DB_BACKUP/01&lt;br /&gt;
 echo &amp;quot;* Самый ответственный, нужный и необходимый момент. Спорцменк и комсомолк mysqldump делает свое черное дело...&amp;quot;&lt;br /&gt;
 echo &amp;quot;----------------------&amp;quot;&lt;br /&gt;
 mysqldump --user=$DB_USER --password=$DB_PASSWD -R имя_базы &amp;gt;$DB_BACKUP/01/имя базы-wi-`date +%Y-%m-%d-%H-%M-%S`.sql&lt;br /&gt;
 mysqldump --user=$DB_USER --password=$DB_PASSWD -R имя_еще одной базы &amp;gt;$DB_BACKUP/01/имя_еще_одной_базы-`date +%Y-%m-%d-%H-%M-%S`.sql&lt;br /&gt;
 echo &amp;quot;ready!&amp;quot;&lt;br /&gt;
 # строчку с ls я добавляю специально, чтобы в письме, которое мне придёт, можно было увидеть&lt;br /&gt;
 # размер бэкапа. Если он меньше вчерашнего - есть повод призадуматься. Если вообще нулевой - бэкап не прошёл точно.&lt;br /&gt;
 ls -lah $DB_BACKUP/01/&lt;br /&gt;
 exit 0&lt;br /&gt;
&lt;br /&gt;
Если необходимо сжать архив (а текстовые архивы жмутся действительно сильно), то просто нужно добавить&lt;br /&gt;
 | gzip -9 -c&lt;br /&gt;
Например:&lt;br /&gt;
 mysqldump --user=$DB_USER --password=$DB_PASSWD -R имя_базы | gzip -9 -c &amp;gt;$DB_BACKUP/01/имя базы-wi-`date +%Y-%m-%d-%H-%M-%S`.sql.gz&lt;br /&gt;
Сохраните данный скрипт в файл, например в backup.sh. Далее стоит сделать этот скрипт исполняемым:&lt;br /&gt;
 chmod +x backup.sh&lt;br /&gt;
Имя дампа базы создается с датой и временем, чтобы можно было не только знать, когда сделан бэкап, но и сколько он делался. Если cron запустил выполнение в 4.00, а в имени файла 4.02 - значит 2 минуты бэкапилась база.&lt;br /&gt;
&lt;br /&gt;
== Бэкапа отдельных таблиц ==&lt;br /&gt;
&lt;br /&gt;
 mysqldump --user=$DB_USER --password=$DB_PASSWD имя_базы имя_таблицы &amp;gt;$DB_BACKUP/01/имя базы-имя_таблицы-wi-`date +%Y-%m-%d-%H-%M-%S`.sql&lt;br /&gt;
&lt;br /&gt;
== Полный бекап баз и заливка их по фтп ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 # System + MySQL backup script&lt;br /&gt;
 # # ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 #########################&lt;br /&gt;
 ######TO BE MODIFIED#####&lt;br /&gt;
 &lt;br /&gt;
 ### System Setup ###&lt;br /&gt;
 BACKUP=/root&lt;br /&gt;
 PREFIX_BACKUP=&amp;quot;sitename&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ### Настройка Mysql ###&lt;br /&gt;
 MUSER=&amp;quot;DBUSER&amp;quot;&lt;br /&gt;
 MPASS=&amp;quot;DBPASSWORD&amp;quot;&lt;br /&gt;
 MHOST=&amp;quot;localhost&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ### Настройки FTP ###&lt;br /&gt;
 FTPD=&amp;quot;/&amp;quot;&lt;br /&gt;
 FTPU=&amp;quot;FTPUSER&amp;quot;&lt;br /&gt;
 FTPP=&amp;quot;FTPPASSWORD&amp;quot;&lt;br /&gt;
 FTPS=&amp;quot;FTPADDRESS&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #########################################&lt;br /&gt;
 &lt;br /&gt;
 ### Binaries ###&lt;br /&gt;
 TAR=&amp;quot;$(which tar)&amp;quot;&lt;br /&gt;
 GZIP=&amp;quot;$(which gzip)&amp;quot;&lt;br /&gt;
 FTP=&amp;quot;$(which ftp)&amp;quot;&lt;br /&gt;
 MYSQL=&amp;quot;$(which mysql)&amp;quot;&lt;br /&gt;
 MYSQLDUMP=&amp;quot;$(which mysqldump)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ### Today + hour in 24h format ###&lt;br /&gt;
 NOW=$(date +&amp;quot;%a%H&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 ### Create hourly dir ###&lt;br /&gt;
 &lt;br /&gt;
 mkdir $BACKUP/$NOW&lt;br /&gt;
 &lt;br /&gt;
 ### Получаем имена всех баз Mysql ###&lt;br /&gt;
 DBS=&amp;quot;$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')&amp;quot;&lt;br /&gt;
 for db in $DBS&lt;br /&gt;
 do&lt;br /&gt;
 &lt;br /&gt;
 ### Создаем директории для каждой базы. Резервное копирование будет происходить в различные каталоги ###&lt;br /&gt;
  mkdir $BACKUP/$NOW/$db&lt;br /&gt;
  FILE=$BACKUP/$NOW/$db/$db.sql.gz&lt;br /&gt;
  echo $i; $MYSQLDUMP --add-drop-table --allow-keywords -q -c -u $MUSER -h $MHOST -p$MPASS $db $i | $GZIP -9 &amp;gt; $FILE&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 ### Создаем один большой файл для его последующей закачки ###&lt;br /&gt;
 &lt;br /&gt;
 DUMPFILE=$PREFIX_BACKUP-$NOW.tar.gz&lt;br /&gt;
 &lt;br /&gt;
 ARCHIVE=$BACKUP/$DUMPFILE&lt;br /&gt;
 ARCHIVED=$BACKUP/$NOW&lt;br /&gt;
 &lt;br /&gt;
 $TAR -zcvf $ARCHIVE $ARCHIVED&lt;br /&gt;
 &lt;br /&gt;
 ### Закачиваем на FTP ###&lt;br /&gt;
 cd $BACKUP&lt;br /&gt;
 $FTP -n $FTPS &amp;lt;&amp;lt;END_SCRIPT&lt;br /&gt;
 quote USER $FTPU&lt;br /&gt;
 quote PASS $FTPP&lt;br /&gt;
 cd $FTPD&lt;br /&gt;
 mput $DUMPFILE&lt;br /&gt;
 quit&lt;br /&gt;
 END_SCRIPT&lt;br /&gt;
 &lt;br /&gt;
 ### Подчищаем за собой ###&lt;br /&gt;
 &lt;br /&gt;
 rm -rf $ARCHIVED&lt;br /&gt;
&lt;br /&gt;
== Полный бекап + инкриментный ==&lt;br /&gt;
&lt;br /&gt;
'''Инкрементальный бэкап с помощью утилиты tar'''&lt;br /&gt;
&lt;br /&gt;
Вы можете создавать резервные копии на магнитной ленте или стриммере (или работать с любым файлом как со стриммером или лентой). Но в наше время это решение утрачивает функциональность. Утилита GNU tar позволяет вам создавать инкрементальные резервные копии с помощью ключевого параметра -g. В нижеследующем примере команда tar создаст инкрементальные копии каталогов /var/www/html, /home, and /etc. Выполните её в консоли:&lt;br /&gt;
# tar -g /var/log/tar-incremental.log -zcvf /backup/today.tar.gz /var/www/html /home /etc&lt;br /&gt;
Здесь ключ -g создаёт/выводит/извлекает новую (инкрементальную) информацию из резервной копии и помещает её в файл /var/log/tar-incremental.log.&lt;br /&gt;
&lt;br /&gt;
'''Создание резервных копий баз данных MySQL'''&lt;br /&gt;
&lt;br /&gt;
Клиентское приложение mysqldump предназначено для дампа или резервного копирования баз данных (БД), таблиц и отдельных данных MySQL. Например, следующая команда покажет список баз данных в конкретной СУБД:&lt;br /&gt;
$ mysql -u root -h localhost -p -Bse 'show databases'&lt;br /&gt;
Результат вывода (приведён для примера):&lt;br /&gt;
brutelog&lt;br /&gt;
cake&lt;br /&gt;
faqs&lt;br /&gt;
mysql&lt;br /&gt;
phpads&lt;br /&gt;
snews&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
van&lt;br /&gt;
wp&lt;br /&gt;
Теперь можно создать резервную копию каждой из БД с помощью команды mysqldump; например, для базы данных faqs команда может иметь следующий вид:&lt;br /&gt;
 $ mysqldump -u root -h localhost -pmypassword faqs | gzip -9 &amp;gt; faqs-db.sql.gz&lt;br /&gt;
&lt;br /&gt;
'''Создание простой схемы резервного копирования для вашего проекта'''&lt;br /&gt;
&lt;br /&gt;
Принципиальное преимущество использования удалённого сетевого хранилища (FTP или NAS) для хранения резервных копий заключается в дополнительной защите от потери данных. Для пересылки резервных копий вы можете использовать несколько протоколов:&lt;br /&gt;
FTP&lt;br /&gt;
SSH&lt;br /&gt;
RSYNC&lt;br /&gt;
Разнообразные коммерческие решения&lt;br /&gt;
&lt;br /&gt;
Я хочу описать здесь только решение, предназначенное для резервного копирования по FTP. Идея стратегии бэкапа, лежащая в основе этого решения, такова:&lt;br /&gt;
Создание полной резервной копии нашей базы данных около полуночи каждого воскресенья (то есть, по воскресеньям воссоздаётся резервная копия всего содержимого СУБД);&lt;br /&gt;
В течение недели резервному копированию подвергаются только изменённые данные (инкрементальное копирование).&lt;br /&gt;
Цикл резервного копирования повторяется каждые 7 дней.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Параметры нашей тестовой конфигурации&lt;br /&gt;
&lt;br /&gt;
Наш сервер ===&amp;gt; ftp/nas server&lt;br /&gt;
IP:202.54.1.10 ===&amp;gt; 208.111.2.5&lt;br /&gt;
Предположим для теста следующую детальную информацию о нашем аккаунте FTP:&lt;br /&gt;
IP-адрес сервера FTP: 208.111.2.5&lt;br /&gt;
Имя аккаунта FTP: nixcraft&lt;br /&gt;
Пароль к аккаунту FTP: somepassword&lt;br /&gt;
Каталог FTP: /home/nixcraft (или /)&lt;br /&gt;
&lt;br /&gt;
Места, куда мы будем размещать резервные копии:&lt;br /&gt;
=&amp;gt; /home/nixcraft/full/dd-mm-yy/files — полные;&lt;br /&gt;
=&amp;gt; /home/nixcraft/incremental/dd-mm-yy/files — инкрементальные.&lt;br /&gt;
Здесь dd-mm-yy — даты создания резервных копий.&lt;br /&gt;
&lt;br /&gt;
Автоматическое резервное копирование с использованием утилиты tar&lt;br /&gt;
&lt;br /&gt;
Теперь вы знаете, как создавать резервные копии файлов и баз данных MySQL с помощью команд tar и mysqldump. Самое время автоматизировать раз навсегда всю процедуру, связав эти команды в единый скрипт.&lt;br /&gt;
Для начала наш скрипт собирает все данные как с сервера MySQL, так и из файловой системы, во временный каталог под названием /backup. Для этого используется команда tar.&lt;br /&gt;
Далее скрипт подключается к вашему серверу хранения данных через FTP и создаёт структуру каталогов, о которой было рассказано выше.&lt;br /&gt;
Скрипт сбрасывает файлы из каталога /backup на сервер FTP.&lt;br /&gt;
Из каталога /backup убираются врменные файлы.&lt;br /&gt;
Если резервное копирование на FTP по каким-либо причинам прервано или оказывается неуспешным, скрипт уведомляет вас об этом по E-mail.&lt;br /&gt;
&lt;br /&gt;
Для корректного использования скрипта у вас должны быть установлены следующие пакеты (в качестве FTP-клиента используется утилита ncftp):&lt;br /&gt;
ncftp&lt;br /&gt;
mysqldump&lt;br /&gt;
GNU tar&lt;br /&gt;
&lt;br /&gt;
Листинг нашего примера, названного ftpbackup.sh, приведён ниже:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 # System + MySQL backup script&lt;br /&gt;
 # Full backup day — Sun (rest of the day do incremental backup)&lt;br /&gt;
 # Copyright © 2005-2006 nixCraft &amp;lt;www.cyberciti.biz/fb/&amp;gt;&lt;br /&gt;
 # This script is licensed under GNU GPL version 2.0 or above&lt;br /&gt;
 # Automatically generated by bash.cyberciti.biz/backup/wizard-ftp-script.php&lt;br /&gt;
 &lt;br /&gt;
 ### System Setup ###&lt;br /&gt;
 DIRS=&amp;quot;/home /etc /var/www&amp;quot;&lt;br /&gt;
 BACKUP=/tmp/backup.$$&lt;br /&gt;
 NOW=$(date +&amp;quot;%d-%m-%Y&amp;quot;)&lt;br /&gt;
 INCFILE=&amp;quot;/root/tar-inc-backup.dat&amp;quot;&lt;br /&gt;
 DAY=$(date +&amp;quot;%a&amp;quot;)&lt;br /&gt;
 FULLBACKUP=«Sun»&lt;br /&gt;
 ### MySQL Setup ###&lt;br /&gt;
 MUSER=«admin»&lt;br /&gt;
 MPASS=«mysqladminpassword»&lt;br /&gt;
 MHOST=«localhost»&lt;br /&gt;
 MYSQL=&amp;quot;$(which mysql)&amp;quot;&lt;br /&gt;
 MYSQLDUMP=&amp;quot;$(which mysqldump)&amp;quot;&lt;br /&gt;
 GZIP=&amp;quot;$(which gzip)&amp;quot;&lt;br /&gt;
 ### FTP server Setup ###&lt;br /&gt;
 FTPD=&amp;quot;/home/vivek/incremental&amp;quot;&lt;br /&gt;
 FTPU=«vivek»&lt;br /&gt;
 FTPP=«ftppassword»&lt;br /&gt;
 FTPS=«208.111.11.2»&lt;br /&gt;
 NCFTP=&amp;quot;$(which ncftpput)&amp;quot;&lt;br /&gt;
 ### Other stuff ###&lt;br /&gt;
 EMAILID=«admin@theos.in»&lt;br /&gt;
 ### Start Backup for file system ###&lt;br /&gt;
 [! -d $BACKUP ] &amp;amp;&amp;amp; mkdir -p $BACKUP ||:&lt;br /&gt;
 ### See if we want to make a full backup ###&lt;br /&gt;
 if [ &amp;quot;$DAY&amp;quot; == &amp;quot;$FULLBACKUP&amp;quot; ]; then&lt;br /&gt;
 FTPD=&amp;quot;/home/vivek/full&amp;quot;&lt;br /&gt;
 FILE=«fs-full-$NOW.tar.gz»&lt;br /&gt;
 tar -zcvf $BACKUP/$FILE $DIRS&lt;br /&gt;
 else&lt;br /&gt;
 i=$(date +&amp;quot;%Hh%Mm%Ss&amp;quot;)&lt;br /&gt;
 FILE=«fs-i-$NOW-$i.tar.gz»&lt;br /&gt;
 tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS&lt;br /&gt;
 fi&lt;br /&gt;
 ### Start MySQL Backup ###&lt;br /&gt;
 # Get all databases name&lt;br /&gt;
 DBS=&amp;quot;$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')&amp;quot;&lt;br /&gt;
 for db in $DBS&lt;br /&gt;
 do&lt;br /&gt;
 FILE=$BACKUP/mysql-$db.$NOW-$(date +&amp;quot;%T&amp;quot;).gz&lt;br /&gt;
 $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 &amp;gt; $FILE&lt;br /&gt;
 done&lt;br /&gt;
 ### Dump backup using FTP ###&lt;br /&gt;
 #Start FTP backup using ncftp&lt;br /&gt;
 ncftp -u&amp;quot;$FTPU&amp;quot; -p&amp;quot;$FTPP&amp;quot; $FTPS&amp;lt;&amp;lt;EOF&lt;br /&gt;
 mkdir $FTPD&lt;br /&gt;
 mkdir $FTPD/$NOW&lt;br /&gt;
 cd $FTPD/$NOW&lt;br /&gt;
 lcd $BACKUP&lt;br /&gt;
 mput *&lt;br /&gt;
 quit&lt;br /&gt;
 EOF&lt;br /&gt;
 ### Find out if ftp backup failed or not ###&lt;br /&gt;
 if [ &amp;quot;$?&amp;quot; == «0» ]; then&lt;br /&gt;
 rm -f $BACKUP/*&lt;br /&gt;
 else&lt;br /&gt;
 T=/tmp/backup.fail&lt;br /&gt;
 echo «Date: $(date)»&amp;gt;$T&lt;br /&gt;
 echo «Hostname: $(hostname)» &amp;gt;&amp;gt;$T&lt;br /&gt;
 echo «Backup failed» &amp;gt;&amp;gt;$T&lt;br /&gt;
 mail -s «BACKUP FAILED» &amp;quot;$EMAILID&amp;quot; &amp;lt;$T&lt;br /&gt;
 rm -f $T&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
'''Как установить автоматическое периодическое выполнение скрипта резервного копирования с помощью утилиты cron?'''&lt;br /&gt;
&lt;br /&gt;
Просто добавьте задачу cron с требуемыми вам параметрами времени и периодичности:&lt;br /&gt;
 13 0 * * * /home/admin/bin/ftpbackup.sh &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
[[Category:DB]][[Category:Общее *nix]]&lt;/div&gt;</summary>
		<author><name>Sol</name></author>
	</entry>
</feed>