Mysql backup

Материал из rrv-wiki
Перейти к навигации Перейти к поиску

Backup данных в MySQL

Бэкап структуры:

   % mysqldump --all --routines --add-drop-table [--all-databases] --force [--no-data] [-c] \
   --password=password --user=user [база]  [таблицы] > backup_file
  • --routines - копировать хранимые процедуры
  • -c - формировать в виде полных INSERT
  • --all-databases - backup всех баз
  • --no-data - backup только структуры таблиц в базах
  • [таблицы] - backup-ить только указанные таблицы.

Восстановление:

   % mysql < backupfile

(для прямой вставки из текстового файла можно воспользоваться mysqlimport) (для анализа структуры базы, например, списка таблиц: mysqlshow <база>)


Кодировка


Резервная копия с INSERT-ами и всеми метаданными (триггеры, процедуры, события)

   mysqldump -u username -p --complete-insert --triggers --routines --events database_name > backup_file.sql

Эта команда создаст дамп базы данных в виде SQL-файла с полными INSERT-запросами, триггерами, хранимыми процедурами и событиями.

Теперь при восстановлении этот файл будет содержать всю информацию о структуре базы данных, данных, триггерах и других объектах.

Скрипт для backup-а

Для того чтобы сделать дамп всех баз удобно воспользоватся скриптом:

#!/bin/sh
 /usr/local/bin/mysql --password='Здесь_указать_пароль_root' --user=root -e 'show databases;' | grep -v ^Database | \
 awk '{system ("/usr/local/bin/mysqldump -a -c --add-drop-database --add-drop-table --password=\"Здесь_указать_пароль_root\"  --user=root "$1" > /home/mysql/"$1".sql; chmod 400 /home/mysql/"$1".sql")}'

Старый вариант

Для того чтобы дампить все базы по отдельности но запаковывать в общий архив удобно воспользоватся скриптом:

/usr/bin/touch ./mysql_dump_bases.sh
/bin/chmod 600 ./mysql_dump_bases.sh
DATEDIR=`/bin/date +%d_%m_%Y-%H_%M`
mkdir ./$DATEDIR
/bin/chmod -R 700 ./$DATEDIR
/usr/local/bin/mysql -u root --password="здесь_указать_пароль_root" --execute="show databases" \
| /usr/bin/grep -v ^Database$ | /usr/bin/grep -v ^test$ \
| awk '{print "/usr/bin/touch ./"$1".sql && /bin/chmod 600 ./"$1".sql && /usr/local/bin/mysqldump --all --add-drop-table --force -c --password=\"здесь_указать_пароль_root\" --user=root "$1" > ./"$1".sql"}' \
> ./mysql_dump_bases.sh && /bin/chmod 600 ./mysql_dump_bases.sh && cd ./$DATEDIR \
&& /bin/sh ../mysql_dump_bases.sh && cd ../ \
&& /usr/bin/touch ./$DATEDIR.tar.gz && /bin/chmod 600 ./$DATEDIR.tar.gz \
&& /usr/bin/tar cfz ./$DATEDIR.tar.gz ./$DATEDIR \
&& /bin/rm -r ./$DATEDIR \
&& /bin/rm ./mysql_dump_bases.sh

Файл с архивом создается в той же папке, из которой запускается скрипт.