خانه » بلاگ » بک آپ گرفتن از دیتابیس در سرور

بک آپ گرفتن از دیتابیس در سرور

بک آپ گیری از پایگاه دا دهای Mysql در Ubuntu server

امروزه اکثرا وب سایت ها و شرکت های های نرم افزاری مورد حملات گستره قرار می گیرد و هدف از این کار اغلب از بین بردن اطلاعات حیاتی و از دسترس خارج کردن سرور ها هست که اینجا اهمیت گرفتن بک آپ از پایگاه داده و فایل های سرور پر رنگ تر می شود.

برای گرفتن بک آپ از نرم افزار بسیار قدرتمند Percona XtraBackup استفاده می کنیم .

مرحله اول نصب percona xtraback روی اوبونتو سرور :
apt install percona-xtrabackup

اگر هم کسی بخواد مستقیم دانلود کند و روی سیستمی که به اینترنت وصل نیست نصب کند روی لینک کلیک کند.

روند گرفتن بک آپ با percona اینجوری هست که از همه ای فایل ها مهم یک کپی می گیرد و به آدرسی که ما می دهیم می ریزد و ما باید این فایل ها رو فشرده کنیم و فایل های که ایجاد شده رو حذف کنیم.

مرحله دوم گرفتن بک آپ با اجرای دستور زیر:
MysqlBackupDir=/home/backups/xtrabackup-files

 xtrabackup --user=bkuser --password=dbpass --host=localhost 
 --port=3306 --socket=/var/run/mysqld/mysqld.sock   --backup --target-dir=${MysqlBackupDir}

یک نام کاربری و پسورد با دسترسی کامل به mysql ایجاد می کنیم و داخل دستور با اطلاعات پیش فرض جایگزین می کنیم.

و در بخش آخر دستور مسیر گرفتن خروجی رو تعیین می کنیم که من داخل home/backup-files گذاشتم.

اگر اطلاعات رو درست وارد کرده باشید باید همچین فایل های رو ایجاد کند

حالا بسته به اینکه شما چند تا دیتابیس داخل mysql دارید می تواند فرق کند.

کار بک آپ گیری تمام شد اما مشکلی که هست اینکه اگر قرار باشه هر باز این همه فایل ایجاد بشود بعد از مدتی حجم هارد سرور پر می شود از کلی فایل های بک آپ تکراری . برای حل این مشکل اول باید این فایل ها رو zip کنیم و فایل های باز رو حذف کنیم و بعد از این این روند رو خودکار کنیم تا هر روز به صورت اتوماتیک این کار انجام شود.

مرحله سوم فشرده سازی و حذف فایل ها و پوشه های خروجی گرفته شده:

اگر روی سرور شما zip نصب نشده هست با دستور زیر ابتدا نصب کنید

apt install zip

و سپس با دستور زیر فایل زیب را ایجاد کنید

BackupFile=$(date +%Y-%m-%d_%H-%M-%S)
zip -qr /home/backups/mysql_backup_"${BackupFile}".zip ./.

ما برای فایل های بک یک نام بر اساس تاریخ و ساعت بک آپ گیری تعیین می کنم که دستور اول همین کار را انجام می دهد و خط دوم فایل زیپ را ایجاد می کند.

بعد از ایجاد فایل zip حال فایل های که خروجی گرفته شده بود را حذف می کنیم

MysqlBackupDir=/home/backups/xtrabackup-files
rm -rf "${BackupDir}"

مرحله چهارم زمانبدی کردن بک آپ گیری :

خب برای راحتی کار دوستان و من همه ای این کار ها رو داخل یک فایل bash آماده کردم و در اختیار شما می زارم و این فایل bash رو داخل crontab اضافه می کنیم

یک فایل ایجاد کنید و دستورات زیر را داخل آن کپی کنید .

#!/bin/bash



# Define variables
TmpDir=/tmp
BackupsDir=/backups
MysqlBackupDir=mysql-xtrabackup
BackupDir=$(date +%Y-%m-%d_%H-%M-%S)

# Change the directory into temp
cd ${TmpDir} || exit

# Make sure the backups directory exists
mkdir -p ${BackupsDir}

# Create the backup directory and change the directory into it
mkdir -p "${BackupDir}"
cd "${BackupDir}" || exit

# Create a MySQL backup with Percona XtraBackup
echo "➤ Creating a full MySQL backup with Percona XtraBackup ..."

# Create the MySQL XtraBackup directory
mkdir ${MysqlBackupDir}

# Create backup
  xtrabackup --user=bkpuser --password=dbpass --host=localhost  --port=3306 --socket=/var/run/mysqld/mysqld.sock   --backup --target-dir=${MysqlBackupDir} &> /dev/null

# Compress the backup directory
echo "➤ Compressing the backup directory ..."
  zip -qr ${BackupsDir}/mysql_backup_"${BackupDir}".zip ./.

# Delete the backup directory from the temp directory
cd ..
  rm -rf "${BackupDir}"

بعد از کپی کردن فایل های ابتدا باید فایل ایجاد شده را executeable کنید یعنی بتونه داخل linux اجرا بشه بعد داخل crontab

اضافه کنید.

دستور زیر این کار را انجام می دهد:

chmod a+w /home/mysql_backup.sh
crontab -e

اکثرا بک آپ گیری بهتره شب انجام داده بشه موقعی که درخواست ها کم هست و سرور خلوت تر هست من معمولا ساعت یازده به بعد زمانبندی می کنم . یه مثال برای زمانبدی بک آپ گیری برای ساعت 11 شب

0 23  * * * /home/mysql_backup.sh > /dev/null 1>&1

نکات پایانی :

دوستانی که پروژشون به صورت داکرایز شده هست و می خواهند از ایمیج داکر percona xtraback استفاده کنند از این لینک می توانند استفاده کنند.

بعد از انجام همه ای این مراحل توانستم از دیتابیس ها و اطلاعات مهم mysql بک آپ بگیرم اما وقتی سرور مورد حمله قرار گیرد و همه ای اطلاعاتش پاک شود اصلا کار بک آپ گیری ما فایده نداره در نتیجه همیشه بهتر هست فایل های بک آپ رو در یک سرور جداگانه یا جای امن نگهداری شود. در پست بعدی نحوه ای آپلود شدن خودکار فایل های بک آپ روی گوگل درایو رو به شما دوستان عزیر آموزش خواهیم داد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.