یک سیستم بکاپگیری قابل اعتماد، یکی از مهمترین بخشهای هر راهحل میزبانی وب است. روش های مختلفی برای بکاپ گیری از MySQL وجود دارد مثل بکاپ کامل (Fuul Backup)، بکاپ افزایشی (Incremental Backup)و … . بکاپ کامل برای بیشتر سایتها، به خوبی جواب میدهد اما این روش برای همه سایت ها مناسب نیست. سایتهایی که هر ساعت تعداد زیادی تراکنش (مثل خرید و فروش) پردازش میکنند، دیگر بکاپ کامل برایشان مناسب نیست چرا که روشی زمان بر است و داده ها مدام تغییر می کند از این رو راهکار بکاپگیری افزایشی به کمک این سایت ها میآید. در این روش، هر تغییر در پایگاه داده ثبت و ذخیره میشود. بنابراین ما نیز در این مقاله، ابتدا تفاوت بین بکاپ کامل و بکاپ افزایشی را توضیح میدهم، سپس به شما نشان میدهم چگونه بکاپگیری افزایشی را به صورت دستی روی سرور خود پیاده کنید و چگونه این کار را با استفاده از سرویسی به نام SqlBak خودکار کنید.
مشکل بکاپهای اسنپشات
بیشتر ابزارهای بکاپگیری پایگاه داده، یک اسنپشات از پایگاه داده میگیرند؛ یعنی یک کپی کامل از ساختار و دادهها در لحظه بکاپگیری. این روش برای سایتهایی با پایگاه داده کوچک که تغییرات زیادی ندارند، خوب است. اما سایتهایی که پایگاه داده بزرگ و پرتغییری دارند، به راهحل بهتری نیاز دارند.
برای مثال، یک فروشگاه آنلاین را در نظر بگیرید. در این سایت، دادههای محصولات، مشتریان و سفارشها همیشه در حال افزایش است. هرچه تعداد مشتریان فعال بیشتر شود، میزان خواندن و نوشتن دادهها در پایگاه داده هم بیشتر میشود.
اگر پایگاه داده شما بزرگ باشد، هر بار که بکاپ میگیرید، عملکرد سرور تحت تأثیر قرار میگیرد. هر ابزار بکاپگیری، باید فرآیندی را روی سرور اجرا کند تا دادهها را ذخیره کند. با افزایش حجم دادهها، منابع بیشتری برای بکاپگیری نیاز است و این باعث میشود منابع کمتری برای عملکرد سایت باقی بماند. در نهایت، مجبور میشوید بکاپها را فقط در زمانهای کمترافیک، مثلاً ساعت 5 صبح، اجرا کنید.
این موضوع مشکل دیگری ایجاد میکند: خطر از دست دادن دادهها. اگر فقط روزی یک بار بکاپ بگیرید و بین دو بکاپ دادهای از دست برود، آن داده برای همیشه از بین میرود. این اتفاقات نادر هستند، اما ممکن است رخ دهند. روی یک وب سرور، ممکن است به دلیل خرابی سختافزار یا مشکل امنیتی باشد. اگر سایت شما یک فروشگاه آنلاین باشد و منبع درآمدتان به آن وابسته است، باید مطمئن شوید که میتوانید پس از هر مشکلی اطلاعات را بازیابی کنید.
بکاپ افزایشی (Incremental Backup) چیست؟
بکاپ افزایشی فقط تغییراتی را که از آخرین اسنپشات در پایگاه داده رخ داده، ذخیره میکند. از آنجا که بکاپهای افزایشی حجم کمی دارند، میتوانید آنها را مرتبتر انجام دهید بدون اینکه سرور را تحت فشار بگذارید. یک روش رایج این است که هر روز یک بکاپ کامل بگیرید و آن را به فضای ذخیرهسازی خارج از سرور منتقل کنید. اگر سایت شما خیلی شلوغ نیست، میتوانید این کار را هفتگی یا حتی ماهیانه انجام دهید. سپس هر تغییر در پایگاه داده را از زمان آخرین بکاپ در یک لاگ ثبت کنید و این لاگها را در زمانهای مشخص به فضای خارج از سرور بفرستید.
آموزش بکاپ گیری افزایشی MySQL
ابزار mysqldump به شما امکان بکاپ گیری کامل از پایگاه داده MySQL را میدهد، همچنین میتوانید انتخاب کنید که از جدولها، دادهها یا ساختار ها نیز بکاپ گیری شود یا نه. اما این ابزار از بکاپ افزایشی پشتیبانی نمیکند. نسخه MySQL Enterprise این قابلیت را دارد، اما هزینه زیادی دارد. خوشبختانه، در نسخه رایگان MySQL هم میتوانید بکاپ افزایشی ایجاد کنید.
اما برای این کار اول باید لاگ باینری MySQL را فعال کنید. این لاگ، تمام تغییراتی که در پایگاه داده رخ میدهد را ثبت میکند. به صورت پیشفرض این لاگ خاموش است، اما میتوانید با تغییر فایل تنظیمات MySQL آن را روشن کنید.
فعال سازی لاگ باینری MySQL
در این مقاله، من از سروری استفاده میکنم که روی اوبونتو 22.04 و MySQL 8.0.23 اجرا میشود. اکنون برای بکاپ گیری از سرور،من با دسترسی sudo و احراز هویت SSH وارد میشوم، اما برای اجرای دستورات به root سوئیچ میکنم. چون با فایلهای مختلفی کار میکنم که صاحبان متفاوتی دارند، این کار را سادهتر میکند.
sudo -i
MySQL دو نوع فایل تنظیمات دارد: یکی برای کلاینت و یکی برای سرور. برای فعال کردن لاگهای باینری، باید فایل تنظیمات سرور را ویرایش کنید. مکان این فایل به سیستم عامل شما بستگی دارد. اگر نمیدانید فایل کجاست، از دستور زیر استفاده کنید:
find / -type f -name mysql*.cnf
خروجی این دستور ممکن است چیزی شبیه آنچه در زیر می بینید باشد:
root@turnipjuice:~$ find / -type f -name mysql.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.cnf
/etc/mysql/conf.d/mysql.cnf
/etc/mysql/conf.d/mysqldump.cnf
هر کدام از این فایلها را میتوانید با nano ویرایش کنید:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
فایل درست معمولاً mysqld.cnf نام دارد و بخشی به نام [mysqld] دارد که تنظیمات سرور MySQL را مشخص میکند. اگر از MariaDB به جای MySQL استفاده میکنید، ساختار فایلها مشابه است، اما تفاوتهایی دارد. از دایرکتوری /etc/mysql/ شروع کنید و ببینید فایلها چگونه بارگذاری میشوند. در نصب پیشفرض اوبونتو 22.04، فایل درست /etc/mysql/mariadb.conf.d/50-server.cnf است.
برای من، فایل در /etc/mysql/mysql.conf.d/mysqld.cnf است و به این شکل است:
[mysqld]
#
# * Basic Settings
#
user = mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
# port = 3306
# datadir = /var/lib/mysql
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size = 16M
# max_allowed_packet = 64M
# thread_stack = 256K
# thread_cache_size = -1
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options = BACKUP
# max_connections = 151
# table_open_cache = 4000
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file = /var/log/mysql/query.log
# general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds = 2592000
max_binlog_size = 100M
# binlog_do_db = include_database_name
# binlog_ignore_db = include_database_name
وقتی فایل درست را پیدا کردید، در بخش [mysqld] تنظیمات زیر را فعال کنید یا اضافه کنید تا با این مقادیر مطابقت داشته باشند:
server-id = 1
expire_logs_days = 10
binlog_format = row
log_bin = /var/log/mysql/mysql-bin
برای ذخیره فایل، Ctrl + X را بزنید، سپس Y و Enter. حالا سرور MySQL را به کمک دستور زیر دوباره راهاندازی کنید:
service mysql restart
برای مطمئن شدن از اعمال تنظیمات، با کاربری root به MySQL وارد شوید و دستورات زیر را اجرا کنید:
show binary logs;
show variables like 'server_id';
show variables like 'expire_logs_days';
show variables like 'binlog_format';
خروجی باید چیزی شبیه این باشد:
root@turnipjuice:~$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show binary logs;
+------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+------------------+-----------+-----------+
| mysql-bin.000001 | 156 | No |
+------------------+-----------+-----------+
1 row in set (0.01 sec)
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.01 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 10 |
+------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)
mysql>
لاگهای باینری در دایرکتوری /var/log/mysql/ با پیشوند mysql-bin ایجاد میشوند. برای دیدن آنها میتوانید از این دستور استفاده کنید:
root@turnipjuice:/var/log/mysql# ls -lah
total 64K
drwxr-x--- 2 mysql adm 4.0K Jan 26 08:29 .
drwxrwxr-x 13 root syslog 4.0K Jan 26 07:58 ..
-rw-r----- 1 mysql adm 43K Jan 26 08:29 error.log
-rw-r----- 1 mysql mysql 156 Jan 26 08:29 mysql-bin.000001
-rw-r----- 1 mysql mysql 32 Jan 26 08:29 mysql-bin.inde
ایجاد اولین بکاپ کامل
حالا که لاگهای باینری را فعال کردید، باید یک اسنپشات اولیه بسازید. همانطور که گفتیم، بکاپهای افزایشی فقط تغییرات بعد از آخرین بکاپ کامل را ذخیره میکنند، پس به یک نقطه شروع نیاز داریم. من یک دایرکتوری به نام /sites/backups ساختهام تا بکاپها را آنجا ذخیره کنم. با دستور mysqldump اولین بکاپ کامل را میسازم:
mysqldump --flush-logs --delete-source-logs --single-transaction --all-databases -uroot -p -hlocalhost > /sites/backups/$(date +%d-%m-%Y_%H-%M-%S)_databases.sql
این فایل را با فرمت تاریخ میسازم تا بدانم کی ساخته شده است.
بیایید با هم بررسی کنیم که این دستور چه کار میکند:
- –flush-logs: لاگهای سرور MySQL را بهروز میکند و یک فایل لاگ باینری جدید ایجاد میکند.
- –delete-source-logs: لاگهای باینری قدیمی را حذف میکند (در نسخههای بعد از 8.0.26 استفاده شود، چون –delete-master-logs منسوخ شده است).
- –single-transaction: برای جدولهایی که از موتور InnoDB استفاده میکنند لازم است.
- –all-databases: تمام پایگاههای داده را بکاپ میگیرد.
شاید بپرسید چرا همه پایگاههای داده را بکاپ میکنیم؟ در بخش بعدی توضیح میدهم. بعد از ساخت بکاپ کامل، اگر دایرکتوری لاگ را چک کنید، میبینید که لاگها تغییر کردهاند:
root@turnipjuice:/var/log/mysql# ls -lah
total 64K
drwxr-x--- 2 mysql adm 4.0K Jan 26 10:28 .
drwxrwxr-x 13 root syslog 4.0K Jan 26 07:58 ..
-rw-r----- 1 mysql adm 43K Jan 26 08:29 error.log
-rw-r----- 1 mysql mysql 156 Jan 26 10:28 mysql-bin.000002
-rw-r----- 1 mysql mysql 32 Jan 26 10:28 mysql-bin.index
لاگ باینری از mysql-bin.000001 به mysql-bin.000002 تغییر کرده است.
مشاهده تغییرات لاگ باینری
حالا وقت خوبی است که ببینیم داخل فایل لاگ باینری چیست. با ابزار mysqlbinlog و اجرای دستور زیر میتوانید این کار را انجام دهید:
mysqlbinlog --no-defaults /var/log/mysql/mysql-bin.000002
خروجی نشاندهنده تمام تغییرات سرور MySQL است (به شکل زیر):
root@turnipjuice:~$ sudo mysqlbinlog --no-defaults /var/log/mysql/mysql-bin.000002
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#220126 10:28:04 server id 1 end_log_pos 125 CRC32 0x48cbe0ee Start: binlog v 4, server v 8.0.23 created 220126 10:28:04
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
NCLxYQ8BAAAAeQAAAH0AAAABAAQAOC4wLjIzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigB7uDLSA==
'/*!*/;
# at 125
#220126 10:28:04 server id 1 end_log_pos 156 CRC32 0x9366ef7e Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
یک نکته درباره لاگهای باینری، آنها تمام تغییرات MySQL در همه پایگاههای داده سرور را شامل میشوند. به همین دلیل در مرحله قبل همه پایگاهها را بکاپ گرفتیم. اگر بخواهید فقط یک پایگاه داده را بازیابی کنید، باید خروجی را با گزینه -d محدود کنید:
mysqlbinlog --no-defaults -dturnipjuice /var/log/mysql/mysql-bin.000002
بکاپ گیری از لاگهای باینری MYSQL
میتوانید فایلها را از دایرکتوری لاگ کپی کنید، اما اگر در حین کپی کردن تغییری ثبت شود، ممکن است مشکل پیش بیاید. بهتر است ابتدا لاگها را بهروزکنید تا فایل فعلی بسته شود و یک فایل جدید ایجاد شود، برای این منظور دستور زیر را اجرا کنید:
FLUSH BINARY LOGS;
اکنون با اجرای دستور زیر دایرکتوری لاگ را چک کنید:
root@turnipjuice:/var/log/mysql# ls -lah
total 80K
drwxr-x--- 2 mysql adm 4.0K Jan 26 14:43 .
drwxrwxr-x 13 root syslog 4.0K Jan 26 07:58 ..
-rw-r----- 1 mysql adm 50K Jan 26 14:30 error.log
-rw-r----- 1 mysql mysql 6.8K Jan 26 14:43 mysql-bin.000002
-rw-r----- 1 mysql mysql 156 Jan 26 14:43 mysql-bin.000003
-rw-r----- 1 mysql mysql 64 Jan 26 14:43 mysql-bin.index
فایل mysql-bin.000002 تغییرات آخرین بکاپ کامل را نشان میدهد و mysql-bin.000003 فایل فعلی است.
حالا از همه فایلها (مثل mysql-bin.000002) به جز فایل فعلی بکاپ میگیریم. سپس به کمک دستور زیر آن را به دایرکتوری /sites/backups/ کپی کنید و تاریخ را اضافه کنید:
cp /var/log/mysql/mysql-bin.000002 /sites/backups/$(date +%d-%m-%Y_%H-%M-%S).mysql-bin
بعد از کپی، به کمک دستور زیر فایلها را از دایرکتوری لاگ حذف میکنیم تا تکراری نشوند:
PURGE BINARY LOGS TO 'mysql-bin.000003';
حالا دایرکتوری را دوباره چک کنید:
root@turnipjuice:/var/log/mysql# ls -lah
total 72K
drwxr-x--- 2 mysql adm 4.0K Jan 26 14:44 .
drwxrwxr-x 13 root syslog 4.0K Jan 26 07:58 ..
-rw-r----- 1 mysql adm 50K Jan 26 14:30 error.log
-rw-r----- 1 mysql mysql 156 Jan 26 14:43 mysql-bin.000003
-rw-r----- 1 mysql mysql 32 Jan 26 14:44 mysql-bin.index
میتوانید بکاپها را به فضای خارج از سرور منتقل کنید.
بازگردانی داده ها از طریق لاگهای باینری
حالا که یک بکاپ کامل و یک بکاپ لاگ باینری داریم، بیایید ببینیم چگونه آنها را بازیابی کنیم. دایرکتوری بکاپ ما الان اینطور است:
root@turnipjuice:/sites/backups# ls -lah
total 7.9M
drwxr-xr-x 2 root root 4.0K Jan 26 14:44 .
drwxr-xr-x+ 9 root root 4.0K Jan 26 14:32 ..
-rw-r--r-- 1 root root 7.9M Jan 26 14:37 26-01-2022_14-37-30_databases.sql
-rw-r----- 1 root root 6.8K Jan 26 14:44 26-01-2022_14-44-46.mysql-bin
برای بازیابی، به کمک دستور زیر ابتدا آخرین بکاپ کامل را بازمیگردانیم:
mysql -uroot -p {database_name} < /sites/backups/26-01-2022_14-37-30_databases.sql
سپس لاگهای باینری را با اجرای دستور زیر اعمال میکنیم:
mysqlbinlog --no-defaults -dturnipjuice /sites/backups/26-01-2022_14-44-46.mysql-bin | mysql -uroot -p turnipjuice
اگر چند فایل لاگ دارید، همه را در یک دستور به شکل زیر میتوانید اجرا کنید:
mysqlbinlog --no-defaults -dturnipjuice /sites/backups/26-01-2022_14-44-46.mysql-bin /sites/backups/26-01-2022_14-49-46.mysql-bin | mysql -uroot -p turnipjuice
بکاپهای افزایشی خودکار MySQL
این دستورات را میتوانید با یک اسکریپت خودکار کنید. این اسکریپت چند فایل لاگ باینری را هم پشتیبانی میکند:
#!/bin/sh
# set up the date variable
NOW=$(date +%Y%m%d%H%M%S)
BINLOG_BACKUP=${NOW}_binlog.tar.gz
# set up the database credentials
DB_USER=root
DB_PASSWORD=root_password
# binary log files directory path
BINLOGS_PATH=/var/log/mysql/
# flush the current log and start writing to a new binary log file
mysql -u$DB_USER -p$DB_PASSWORD -E --execute='FLUSH BINARY LOGS;' mysql
# get a list of all binary log files
BINLOGS=$(mysql -u$DB_USER -p$DB_PASSWORD -E --execute='SHOW BINARY LOGS;' mysql | grep Log_name | sed -e 's/Log_name://g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# get the most recent binary log file
BINLOG_CURRENT=`echo "${BINLOGS}" | tail -n -1`
# get list of binary logs to be backed up (everything except the most recent one)
BINLOGS_FOR_BACKUP=`echo "${BINLOGS}" | head -n -1`
# create a list of the full paths to the binary logs to be backed up
BINLOGS_FULL_PATH=`echo "${BINLOGS_FOR_BACKUP}" | xargs -I % echo $BINLOGS_PATH%`
# compress the list of binary logs to be backed up into an archive in the backup location
tar -czvf /sites/backups/$禁止
$BINLOG_BACKUP $BINLOGS_FULL_PATH
# delete the binary logs that have been backed up
echo $BINLOG_CURRENT | xargs -I % mysql -u$DB_USER -p$DB_PASSWORD -E --execute='PURGE BINARY LOGS TO "%";' mysql
اسکریپت را مثلاً در ~/scripts/mysql_inc_backup.sh ذخیره کنید و با crontab خودکار کنید:
crontab -e
برای بکاپ کامل روزانه (ساعت 5 صبح) و بکاپ افزایشی ساعتی دستور زیر را اجرا کنید:
0 5 * * * mysqldump --flush-logs --delete-master-logs --all-databases -uroot -proot_password -hlocalhost > /sites/backups/$(date +%d-%m-%Y_%H-%M-%S)_databases.sql
*/60 * * * * bash ~/scripts/mysql_inc_backup.sh
بکاپ گیری از لاگهای دودویی
فرآیندی که در بالا توضیح دادیم، از تمام دادههای MySQL روی سرور پشتیبانگیری میکند. دلیل این امر این است که لاگهای دودویی شامل تمام تغییرات کل سرور MySQL هستند. اگرچه میتوان MySQL را طوری پیکربندی کرد که برای هر پایگاه داده، لاگهای دودویی جداگانه ایجاد کند، اما این یک فرآیند پیچیده است که به چندین سرویس MySQL و استفاده از رپلیکیشن نیاز دارد. این یک روش پیچیده است، بنابراین توصیه میکنیم به جای آن از SqlBak برای پشتیبانگیری از لاگهای دودویی خود استفاده کنید.
بکاپ گیری از MYSQL با SqlBak
اگر تصمیم دارید بکاپهای خود را به یک سرویس منتقل کنید تا بتوانید از بکاپ گیری افزایشی برای پایگاه دادهتان استفاده کنید، SqlBak را توصیه میکنیم. استفاده آن به مدت یک ماه رایگان است. همچنین برای استفاده از SqlBak نیازی به نصب دستی هیچ نرمافزار اضافی روی سرور شما نیست و آموزش های ساده و قابل فهمی نیز برای آن در مستندات وجود دارد. در نهایت این ابزار با رابط کاربری ساده خود شما را در هر مرحله از فرآیند بکاپ گیری راهنمایی میکند. اکنون اگر قصد دارید از این ابزار برای بکاپ گیری از پایگاه داده MYSQL خود استفاده کنیدمراحل زیر را دنبال کنید.
1. پس از ثبت نام در SqlBak، اولین قدم اضافه کردن یک سرور جدید از طریق داشبورد SqlBak است. برای این کار روی گزینه Add Server کلیک و سیستم عامل سرور خود را مشخص کنید.
2. اکنون SqlBak دستوراتی را برای سیستم عامل انتخابی شما ارائه میدهد. این ابزار به شما امکان میدهد دستورات مربوطه را برای اجرا، کپی کنید.
در نهایت پس از اجرای دستورات فوق، خروجی به شکل زیر خواهد بود:
asimpson@turnipjuice:~$ sudo sqlbak -r -k <secret-key> -n turnipjuice.media
turnipjuice.media has been successfully registered in SqlBak.com (account Abraham Simpson).
Now you need to add a connection to DBMS (MySQL, PostgreSQL, MSSQL Server). Run:
sudo sqlbak -ac -dt <dbms_type> -h <host> -u <user_name> -p <password>
For example:
MySQL: sudo sqlbak -ac -dt mysql -h <host> -u <user> -p <user_password>
PostgreSQL: sudo sqlbak -ac -dt postgresql -h <host> -u <user> -p <user_password>
MS SQL SERVER: sudo sqlbak -ac -dt mssql -h <host> -u <user> -p <user_password>
MongoDB: sudo sqlbak -ac -dt mongo -h <host> -u <user> -p <user_password>
To find more details use: sudo sqlbak -h -c ac
4. در این مرحله از شما خواسته میشود که یک اتصال به سرور پایگاه داده خود اضافه کنید، که در این مورد MySQL است. از آنجا که ما میخواهیم از گزینه بکاپ گیری افزایشی استفاده کنیم، باید این کار را با دسترسی root انجام دهید. پس از پیکربندی سرور، میتوانید از داشبورد SqlBak، با اجرای دستور زیر یک Job برای بکاپگیری از پایگاه داده ایجاد کنید.
asimpson@turnipjuice:~$ sudo sqlbak -ac -dt mysql -h localhost -u root -p root_password
The connection has been successfully added. Connection-Id: 1, DBMS-Type: mysql, Connection-Name: localhost:3306
To create a backup job, click the 'Add new Job' button at https://sqlbak.com/dashboard
ایجاد اولین Job بکاپگیری
1. برای ایجاد یک Job بکاپگیری جدید، روی Add new job کلیک کنید.
2. در این مرحله از شما خواسته میشود سرور و نوع بکاپ گیری را انتخاب کنید.
3. در این مرحله باید پایگاه داده را انتخاب کنید. ( از آنجایی که SqlBak را برای استفاده با دسترسی root پیکر بندی کردیم ، میتوانیم در این مرحله از بین تمام پایگاههای داده موجود لنتخاب کنیم.)
4. برای مقصد، از همان دایرکتوری که قبلاً استفاده کردهاید استفاده کنید، بنابراین روی Add destination کلیک کنید، Local/Network folder, External HDD/NAS را انتخاب کنید و مسیر روی سرور را وارد کنید. همچنین میتوانید از هر یک از گزینههای ذخیرهسازی خارج از سایت که SqlBak از آن پشتیبانی میکند به عنوان مقصد خود استفاده کنید. این یکی دیگر از مزایای استفاده از سرویسی مانند SqlBak است.
5. هنگام پیکربندی local destination ابزار SqlBak یک دکمه TEST دارد که می توانید به کمک آن مشخص کنید ابزار sqlbak که نصب کردهاید میتواند در مقصد مشخص شده داده ها را ذخیره کند یا خیر.
6. برای زمانبندی، باید روی گزینه Advanced settings کلیک کنید تا گزینه incremental فعال شود.
7. در تنظیمات Advanced Backup Schedule برای پشتیبانگیری، میتوانید گزینه پشتیبانگیری افزایشی را بررسی کنید و برنامه خود را مشخص کنید.
8. آخرین کاری که باید انجام دهید این است که برای Job پشتیبانگیری خود یک نام تعیین کنید و برای ذخیره و بازگشت به داشبورد، روی دکمه Save یا Save & Exit کلیک کنید.
9. پس از ذخیره، میتوانید یک گزارش کلی از تمام تنظیمات Job پشتیبانگیری و همچنین لیستی از تمام پشتیبانگیریهای ایجاد شده را مشاهده کنید. همچنین دکمهای با عنوان Run now وجود دارد که میتوانید با کمک آن بلافاصله فرایند بکاپ گیری را شروع کنید.
10. پس از تکمیل اولین نسخه پشتیبان، آنها در Backup history لیست میشوند. میتوانید روی یک نسخه پشتیبان کلیک کنید تا گزارش پشتیبانگیری را مشاهده کنید، نسخه پشتیبان را دانلود کنید یا نسخه پشتیبان قبلی را بازیابی کنید. همچنین یک دکمه Restore در بالای Backup history وجود دارد تا آخرین نسخه بکاپ موفق را بازیابی کنید.
جمع بندی
در دنیای دیجیتال که دادهها قلب تپنده هر کسبوکار آنلاینی هستند، داشتن یک استراتژی بکاپگیری کارآمد نه تنها یک انتخاب، بلکه یک ضرورت است. در این مقاله، با تفاوتهای بکاپ کامل و افزایشی آشنا شدیم و دیدیم که چگونه بکاپگیری افزایشی میتواند راهحلی ایدهآل برای سایتهای پویا با حجم تراکنش بالا باشد. این روش با ثبت تغییرات کوچک و منظم، نه تنها فشار روی سرور را کاهش میدهد، بلکه خطر از دست دادن دادهها را به حداقل میرساند.
ما قدم به قدم فعالسازی لاگهای باینری، ایجاد بکاپ کامل، ثبت تغییرات افزایشی و بازیابی دادهها را بررسی کردیم. حالا که ابزارها و دانش لازم را در اختیار دارید، وقت آن است که با پیادهسازی یک سیستم بکاپ گیری افزایشی MySQL ، خیال خود را از امنیت دادههایتان راحت کنید. آینده کسبوکار شما به دادههایتان وابسته است؛ پس با یک استراتژی هوشمندانه، آنها را در برابر هر خطری محافظت کنید!
منبع: spinupwp.com