Backup and restore of postgresql
This commit is contained in:
parent
6fff2720bc
commit
5e5153eeaf
|
@ -337,6 +337,28 @@ function backup_mariadb {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function backup_postgresql {
|
||||||
|
if [ ! -d /etc/postgresql ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
temp_backup_dir=/root/temppostgresql
|
||||||
|
if [ ! -d $temp_backup_dir ]; then
|
||||||
|
mkdir $temp_backup_dir
|
||||||
|
fi
|
||||||
|
sudo -u postgres pg_dumpall --roles-only > $temp_backup_dir/postgresql.sql
|
||||||
|
if [ ! -s $temp_backup_dir/postgresql.sql ]; then
|
||||||
|
echo $"Unable to backup postgresql settings"
|
||||||
|
rm -rf $temp_backup_dir
|
||||||
|
umount $USB_MOUNT
|
||||||
|
rm -rf $USB_MOUNT
|
||||||
|
exit 684365
|
||||||
|
fi
|
||||||
|
echo "$DATABASE_PASSWORD" > $temp_backup_dir/db
|
||||||
|
chmod 400 $temp_backup_dir/db
|
||||||
|
backup_directory_to_usb $temp_backup_dir postgresql
|
||||||
|
}
|
||||||
|
|
||||||
# has the remove option been set ?
|
# has the remove option been set ?
|
||||||
remove_option=$2
|
remove_option=$2
|
||||||
if [[ $1 == "remove" ]]; then
|
if [[ $1 == "remove" ]]; then
|
||||||
|
@ -355,6 +377,7 @@ backup_configfiles
|
||||||
backup_blocklist
|
backup_blocklist
|
||||||
backup_admin_readme
|
backup_admin_readme
|
||||||
backup_mariadb
|
backup_mariadb
|
||||||
|
backup_postgresql
|
||||||
backup_extra_directories local
|
backup_extra_directories local
|
||||||
backup_unmount_drive $USB_DRIVE $USB_MOUNT
|
backup_unmount_drive $USB_DRIVE $USB_MOUNT
|
||||||
echo $"Backup to USB drive is complete. You can now unplug it."
|
echo $"Backup to USB drive is complete. You can now unplug it."
|
||||||
|
|
|
@ -336,6 +336,28 @@ function backup_mariadb {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function backup_postgresql {
|
||||||
|
if [ ! -d /etc/postgresql ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
temp_backup_dir=/root/temppostgresql
|
||||||
|
if [ ! -d $temp_backup_dir ]; then
|
||||||
|
mkdir $temp_backup_dir
|
||||||
|
fi
|
||||||
|
sudo -u postgres pg_dumpall --roles-only > $temp_backup_dir/postgresql.sql
|
||||||
|
if [ ! -s $temp_backup_dir/postgresql.sql ]; then
|
||||||
|
echo $"Unable to backup postgresql settings"
|
||||||
|
rm -rf $temp_backup_dir
|
||||||
|
umount $USB_MOUNT
|
||||||
|
rm -rf $USB_MOUNT
|
||||||
|
exit 684365
|
||||||
|
fi
|
||||||
|
echo "$DATABASE_PASSWORD" > $temp_backup_dir/db
|
||||||
|
chmod 400 $temp_backup_dir/db
|
||||||
|
backup_directory_to_friend $temp_backup_dir postgresql
|
||||||
|
}
|
||||||
|
|
||||||
# Returns the filename of a key share
|
# Returns the filename of a key share
|
||||||
function get_key_share {
|
function get_key_share {
|
||||||
no_of_shares=$1
|
no_of_shares=$1
|
||||||
|
@ -410,6 +432,7 @@ if [[ $TEST_MODE == "no" ]]; then
|
||||||
backup_web_server
|
backup_web_server
|
||||||
backup_admin_readme
|
backup_admin_readme
|
||||||
backup_mariadb
|
backup_mariadb
|
||||||
|
backup_postgresql
|
||||||
backup_certs
|
backup_certs
|
||||||
backup_mailing_list
|
backup_mailing_list
|
||||||
backup_apps remote
|
backup_apps remote
|
||||||
|
|
|
@ -289,6 +289,59 @@ function restore_mariadb {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restore_postgresql {
|
||||||
|
if [[ $RESTORE_APP != 'all' ]]; then
|
||||||
|
if [[ $RESTORE_APP != 'postgresql' ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(is_completed install_postgresql) == "0" ]]; then
|
||||||
|
function_check install_postgresql
|
||||||
|
install_postgresql
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $USB_MOUNT/backup/postgresql ]; then
|
||||||
|
echo $"Restoring postgresql settings"
|
||||||
|
temp_restore_dir=/root/temppostgresql
|
||||||
|
restore_directory_from_usb $temp_restore_dir postgresql
|
||||||
|
|
||||||
|
store_original_postgresql_password
|
||||||
|
|
||||||
|
echo $'Obtaining original postgresql password'
|
||||||
|
db_pass=$(cat /root/.postgresqloriginal)
|
||||||
|
if [ ${#db_pass} -gt 0 ]; then
|
||||||
|
echo $"Restore the postgresql user table"
|
||||||
|
if [ -d ${temp_restore_dir}${temp_restore_dir} ]; then
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}${temp_restore_dir}/postgresql.sql)
|
||||||
|
else
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}/postgresql.sql)
|
||||||
|
fi
|
||||||
|
if [ ! "$?" = "0" ]; then
|
||||||
|
echo $"Try again using the password obtained from backup"
|
||||||
|
db_pass=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
|
if [ -d ${temp_restore_dir}${temp_restore_dir} ]; then
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}${temp_restore_dir}/postgresql.sql)
|
||||||
|
else
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}/postgresql.sql)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ ! "$?" = "0" ]; then
|
||||||
|
echo "$mysqlsuccess"
|
||||||
|
set_user_permissions
|
||||||
|
backup_unmount_drive
|
||||||
|
exit 73825
|
||||||
|
fi
|
||||||
|
echo $"Restarting database"
|
||||||
|
systemctl restart postgresql
|
||||||
|
echo $"Ensure postgresql handles authentication"
|
||||||
|
POSTGRESQL_PASSWORD=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
|
DATABASE_PASSWORD=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
|
fi
|
||||||
|
rm -rf $temp_restore_dir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function restore_letsencrypt {
|
function restore_letsencrypt {
|
||||||
if [[ $RESTORE_APP != 'all' ]]; then
|
if [[ $RESTORE_APP != 'all' ]]; then
|
||||||
if [[ $RESTORE_APP != 'letsencrypt' ]]; then
|
if [[ $RESTORE_APP != 'letsencrypt' ]]; then
|
||||||
|
@ -865,6 +918,7 @@ restore_configfiles
|
||||||
same_admin_user
|
same_admin_user
|
||||||
restore_passwordstore
|
restore_passwordstore
|
||||||
restore_mariadb
|
restore_mariadb
|
||||||
|
restore_postgresql
|
||||||
restore_letsencrypt
|
restore_letsencrypt
|
||||||
restore_tor
|
restore_tor
|
||||||
restore_mutt_settings
|
restore_mutt_settings
|
||||||
|
|
|
@ -255,6 +255,56 @@ function restore_mariadb {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restore_postgresql {
|
||||||
|
if [[ $RESTORE_APP != 'all' ]]; then
|
||||||
|
if [[ $RESTORE_APP != 'postgresql' ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(is_completed install_postgresql) == "0" ]]; then
|
||||||
|
function_check install_postgresql
|
||||||
|
install_postgresql
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $SERVER_DIRECTORY/backup/postgresql ]; then
|
||||||
|
echo $"Restoring Postgresql settings"
|
||||||
|
temp_restore_dir=/root/temppostgresql
|
||||||
|
restore_directory_from_friend $temp_restore_dir postgresql
|
||||||
|
|
||||||
|
store_original_postgresql_password
|
||||||
|
|
||||||
|
echo $'Obtaining Postgresql password'
|
||||||
|
db_pass=$(cat /root/.postgresqloriginal)
|
||||||
|
if [ ${#db_pass} -gt 0 ]; then
|
||||||
|
echo $"Restore the Postgresql user table"
|
||||||
|
if [ -d ${temp_restore_dir}${temp_restore_dir} ]; then
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}${temp_restore_dir}/postgresql.sql)
|
||||||
|
else
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}/postgresql.sql)
|
||||||
|
fi
|
||||||
|
if [ ! "$?" = "0" ]; then
|
||||||
|
echo $"Try again using the password obtained from backup"
|
||||||
|
db_pass=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
|
if [ -d ${temp_restore_dir}${temp_restore_dir} ]; then
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}${temp_restore_dir}/postgresql.sql)
|
||||||
|
else
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore ${temp_restore_dir}/postgresql.sql)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ ! "$?" = "0" ]; then
|
||||||
|
echo "$mysqlsuccess"
|
||||||
|
exit 962
|
||||||
|
fi
|
||||||
|
echo $"Restarting database"
|
||||||
|
systemctl restart postgresql
|
||||||
|
echo $"Ensure postgresql handles authentication"
|
||||||
|
POSTGRESQL_PASSWORD=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
|
fi
|
||||||
|
rm -rf ${temp_restore_dir}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function restore_letsencrypt {
|
function restore_letsencrypt {
|
||||||
if [[ $RESTORE_APP != 'all' ]]; then
|
if [[ $RESTORE_APP != 'all' ]]; then
|
||||||
if [[ $RESTORE_APP != 'letsencrypt' ]]; then
|
if [[ $RESTORE_APP != 'letsencrypt' ]]; then
|
||||||
|
@ -769,6 +819,7 @@ restore_blocklist
|
||||||
restore_configfiles
|
restore_configfiles
|
||||||
restore_passwordstore
|
restore_passwordstore
|
||||||
restore_mariadb
|
restore_mariadb
|
||||||
|
restore_postgresql
|
||||||
restore_letsencrypt
|
restore_letsencrypt
|
||||||
restore_mutt_settings
|
restore_mutt_settings
|
||||||
restore_gpg
|
restore_gpg
|
||||||
|
|
|
@ -241,7 +241,7 @@ function backup_database_local_usb {
|
||||||
mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.sql
|
mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.sql
|
||||||
else
|
else
|
||||||
USE_POSTGRESQL=
|
USE_POSTGRESQL=
|
||||||
pg_dump ${1} > ${local_database_dir}/${1}.sql
|
sudo -u postgres pg_dump ${1} > ${local_database_dir}/${1}.sql
|
||||||
fi
|
fi
|
||||||
if [ -f ${local_database_dir}/${1}.sql ]; then
|
if [ -f ${local_database_dir}/${1}.sql ]; then
|
||||||
if [ ! -s ${local_database_dir}/${1}.sql ]; then
|
if [ ! -s ${local_database_dir}/${1}.sql ]; then
|
||||||
|
@ -557,7 +557,7 @@ function backup_database_remote {
|
||||||
mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.sql
|
mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.sql
|
||||||
else
|
else
|
||||||
USE_POSTGRESQL=
|
USE_POSTGRESQL=
|
||||||
pg_dump ${1} > ${local_database_dir}/${1}.sql
|
sudo -u postgres pg_dump ${1} > ${local_database_dir}/${1}.sql
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f ${local_database_dir}/${1}.sql ]; then
|
if [ -f ${local_database_dir}/${1}.sql ]; then
|
||||||
|
@ -659,7 +659,7 @@ function restore_database_from_friend {
|
||||||
mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${1} -o < ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
|
mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${1} -o < ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
|
||||||
else
|
else
|
||||||
USE_POSTGRESQL=
|
USE_POSTGRESQL=
|
||||||
mysqlsuccess=$(sudo -u postgres psql $database_name < ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
|
mysqlsuccess=$(sudo -u postgres pg_restore ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
|
||||||
fi
|
fi
|
||||||
if [ ! "$?" = "0" ]; then
|
if [ ! "$?" = "0" ]; then
|
||||||
echo "$mysqlsuccess"
|
echo "$mysqlsuccess"
|
||||||
|
@ -738,8 +738,13 @@ function restore_database {
|
||||||
backup_unmount_drive
|
backup_unmount_drive
|
||||||
exit 503
|
exit 503
|
||||||
fi
|
fi
|
||||||
|
if [ ! $USE_POSTGRESQL ]; then
|
||||||
keep_database_running
|
keep_database_running
|
||||||
mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${restore_app_name} -o < $database_file)
|
mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${restore_app_name} -o < $database_file)
|
||||||
|
else
|
||||||
|
USE_POSTGRESQL=
|
||||||
|
mysqlsuccess=$(sudo -u postgres pg_restore $database_file)
|
||||||
|
fi
|
||||||
if [ ! "$?" = "0" ]; then
|
if [ ! "$?" = "0" ]; then
|
||||||
echo "$mysqlsuccess"
|
echo "$mysqlsuccess"
|
||||||
function_check set_user_permissions
|
function_check set_user_permissions
|
||||||
|
|
|
@ -31,6 +31,15 @@
|
||||||
# Set this when calling backup and restore commands
|
# Set this when calling backup and restore commands
|
||||||
USE_POSTGRESQL=
|
USE_POSTGRESQL=
|
||||||
|
|
||||||
|
function store_original_postgresql_password {
|
||||||
|
if [ ! -f /root/.postgresqloriginal ]; then
|
||||||
|
echo $'Storing original postgresql password'
|
||||||
|
ORIGINAL_POSTGRESQL_PASSWORD=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
|
# We can store this in plaintext because it will soon be of historical interest only
|
||||||
|
echo -n "$ORIGINAL_POSTGRESQL_PASSWORD" > /root/.postgresqloriginal
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function get_postgresql_password {
|
function get_postgresql_password {
|
||||||
POSTGRESQL_PASSWORD=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
POSTGRESQL_PASSWORD=$(${PROJECT_NAME}-pass -u root -a postgresql)
|
||||||
if [[ "$POSTGRESQL_PASSWORD" == *'failed'* ]]; then
|
if [[ "$POSTGRESQL_PASSWORD" == *'failed'* ]]; then
|
||||||
|
|
Loading…
Reference in New Issue