Skip to content

Instantly share code, notes, and snippets.

@Nex-Otaku
Created January 18, 2019 10:11
Show Gist options
  • Save Nex-Otaku/7220bc4d0eccf0af94c021634e1d781a to your computer and use it in GitHub Desktop.
Save Nex-Otaku/7220bc4d0eccf0af94c021634e1d781a to your computer and use it in GitHub Desktop.
#!/bin/bash
# Экспорт полной структуры БД и данных без некоторых таблиц.
# Имя БД
dbname=MYDBNAME
# Пароль
dbpassword=MYDBPASSWORD
# Исключённые таблицы
skipped_tables=( table1 table2 table3 )
# Папка для записи дампа
dump_dir=/home/my-user/tmp/backup
# Определяем весь список таблиц.
all_tables=( $(mysql MYDBUSER -p$dbpassword -s -N -e 'show tables') )
# Процедура для сравнения массивов
diff(){
awk 'BEGIN{RS=ORS=" "}
{NR==FNR?a[$0]++:a[$0]--}
END{for(k in a)if(a[k])print k}' <(echo -n "${!1}") <(echo -n "${!2}")
}
# Определяем, по каким таблицам будут выгружены данные.
dump_tables=( $(diff all_tables[@] skipped_tables[@]) )
# Фиксируем время.
datetime=`date +\%Y-\%m-\%d_\%H-\%M-\%S`
# Определяем имена файлов
sql_data_file=$dump_dir/$dbname-$datetime-data.sql
zip_data_file=$sql_data_file.zip
sql_schema_file=$dump_dir/$dbname-$datetime-schema.sql
zip_schema_file=$sql_schema_file.zip
# Дополнительные параметры для дампа
dump_schema_params='--no-data --hex-blob --max-allowed-packet=512000000'
dump_data_params='--no-create-info --hex-blob --max-allowed-packet=512000000'
# Выгружаем структуру БД.
mysqldump $dbname $dump_schema_params > $sql_schema_file
# j - не переносим структуру папок
zip -j $zip_schema_file $sql_schema_file
rm $sql_schema_file
# Выгружаем данные по отдельным таблицам.
mysqldump $dbname ${dump_tables[@]} $dump_data_params > $sql_data_file
# j - не переносим структуру папок
zip -j $zip_data_file $sql_data_file
rm $sql_data_file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment