forked from Copypanthers/shell-scripts
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdbbackup.sh
More file actions
executable file
·61 lines (51 loc) · 2.01 KB
/
dbbackup.sh
File metadata and controls
executable file
·61 lines (51 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
# Script to backup MySQL databases
# Parent backup directory
backup_parent_dir="./data"
# Amazon s3 Bucket
bucket_name="backup-of-development"
# MySQL settings
mysql_user="root"
mysql_password=""
test_database="copypanthers_test"
production_database="copypanthers"
# Read MySQL password from stdin if empty
if [ -z "${mysql_password}" ]; then
echo -n "Enter MySQL ${mysql_user} password: "
read -s mysql_password
echo
fi
# Check MySQL password
echo exit | mysql --user=${mysql_user} --password=${mysql_password} -B 2>/dev/null
if [ "$?" -gt 0 ]; then
echo "MySQL ${mysql_user} password incorrect"
exit 1
else
echo "MySQL ${mysql_user} password correct."
fi
# Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 700 "${backup_dir}"
# Get MySQL databases
mysql_databases=`echo 'show databases' | mysql --user=${mysql_user} --password=${mysql_password} -B | sed /^Database$/d`
# Backup and compress each database
for database in $mysql_databases
do
if [ "${database}" == "information_schema" ] || [ "${database}" == "performance_schema" ]; then
additional_mysqldump_params="--skip-lock-tables"
else
additional_mysqldump_params=""
fi
echo "Creating backup of \"${database}\" database"
mysqldump ${additional_mysqldump_params} --user=${mysql_user} --password=${mysql_password} ${database} | gzip > "${backup_dir}/${database}.gz"
chmod 600 "${backup_dir}/${database}.gz"
done
# Compressing all folder
tar -czf ${backup_parent_dir}/mysql-${backup_date}.tar.gz ${backup_dir}/
rm -rf ${backup_parent_dir}/${backup_date}
s3cmd put --guess-mime-type ${backup_parent_dir}/mysql-${backup_date}.tar.gz s3://${bucket_name}/mysql/mysql-${backup_date}.tar.gz
# Move test database to production
mysqldump --user=${mysql_user} --password=${mysql_password} --add-drop-table ${test_database} | mysql --user=${mysql_user} --password=${mysql_password} ${production_database}