RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Боковая панель


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:mysql:mysqldump


Памятка по бэкапу (mysqldump)

Создание дампа и восстановление из дампа

Создать дамп одной базы

mysqldump -u [user_name] -p [database_name] > [file_name].sql

gzip

mysqldump -u [user_name] -p [database_name] | gzip > [file_name].sql.gz

bz2

mysqldump -u [user_name] -p [database_name] | bzip2 > [file_name].sql.bz2

Создать дамп нескольких баз данных (ключ -B или --databases)

mysqldump -u [user_name] -p [database_name_X] [database_name_Y] [database_name_Z] > [file_name].sql

Создать дамп всех баз данных (ключ -A или --all-databases)

mysqldump -u [user_name] -p --all-databases > [file_name].sql

UPD Как добавить время создания бэкапа к имени файла

Добавить строку

$(date +%Y-%m-%d-%H.%M.%S)
mysqldump -u [user_name]> -p [database_name] | bzip2 -c > [filename]$(date +%Y-%m-%d-%H.%M.%S).sql.bz2

Восстановление из дампа

.sql

mysql -u [user_name] -p [database_name] < [file_name].sql

.gz

zcat [file_name].sql.gz | mysql -u [user_name] -p [database_name]

mysql-console

mysql> use [database_name];
mysql> source [file_name].sql

Кунг-фу в консоли

Как исключить одну таблицу из бэкапа?

С помощью опции --ignore-table

mysqldump -u [user] -p [database] --ignore-table=[database.table1] > [database].sql

Нашел на stackoverflow классный bash скрипт если нужно исключить несколько таблиц

#!/bin/bash
PASSWORD=XXXXXX
HOST=XXXXXX
USER=XXXXXX
DATABASE=databasename
DB_FILE=dump.sql
EXCLUDED_TABLES=(
table1
table2
table3
table4
tableN   
)
 
IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done
 
echo "Dump structure"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data ${DATABASE} > ${DB_FILE}
 
echo "Dump content"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} ${IGNORED_TABLES_STRING} >> ${DB_FILE}

Дамп всех баз кроме выбранных

Подсмотрел здесь: https://guillaume.moigneu.com/mysqldump-all-databases-except/

Например нужно сделать дамп всех баз, но исключить из дампа базы performance_schema и information_schema

Записываем список баз в txt файл

# echo 'show databases;' | mysql -u root -p<password> > databases.txt

Редактируем файл databases.txt и убираем базы, которые не нужны.

Создаем дамп

# cat databases.txt | xargs mysqldump -u root -p<password> --databases > mysqldump.sql

Дамп всех баз в отдельных файлах

Вариант 1

Нашел здесь

#! /bin/bash
 
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="backup"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/usr/bin/mysqldump
 
mkdir -p "$BACKUP_DIR/mysql"
 
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
 
for db in $databases; do
  $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done

Рекомендуется создать отдельного пользователя и дать ему следующие привилегии

  • SHOW DATABASES
  • SELECT
  • LOCK TABLES
  • RELOAD

Вариант 2

Еще один вариант для раздельного дампа

#! /bin/bash
 
TIMESTAMP=$(date +"%F-%H-%M-%S")
BACKUP_DIR="/full/path/to/directory"
MYSQL_USER="username"
MYSQL=/Applications/MAMP/Library/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/Applications/MAMP/Library/bin/mysqldump
$MYSQL -s -r -u $MYSQL_USER -p$MYSQL_PASSWORD -e 'show databases' |
while read db; do
$MYSQLDUMP -u $MYSQL_USER -p$MYSQL_PASSWORD $db > $BACKUP_DIR/$TIMESTAMP-${db}.sql;
done

Вариант 3

https://ma.ttias.be/mysql-back-up-take-a-mysqldump-with-each-database-in-its-own-sql-file/

Делаем бэкап в отдельные файлы

# mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done

Чтобы записать бэкапы в определенный каталог (например /var/backup/sql).

# mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done

Делаем бэкап в отдельные файлы и сжимаем

# mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; [[ $? -eq 0 ]] && gzip "$dbname".sql; done

Восстанавливаем данные из sql файлов

# for sql in *.sql; do dbname=${sql/\.sql/}; echo -n "Now importing $dbname ... "; mysql $dbname < $sql; echo " done."; done

Как вытащить базу данных из общего бэкапа

Дамп был сделан с ключом --all-databases, имя дампа alldb.sql

dbname1 - имя нужной базы
base1.sql - имя базы на выходе

sed -n -e '/CREATE DATABASE.*dbname1/,/CREATE DATABASE/p' alldb.sql > base1.sql
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/mysql/mysqldump.txt · Последнее изменение: 2017/09/13 01:15 (внешнее изменение)