یکی از سریع ترین روش های پشتیبان گیری از دیتابیس mariadb
استفاده از mariadb-backup
است. در حقیقت این
این برنامه از xtrabackup
که از دیتابیس های mysql
و xtradb
پشتیبان گیری می کند، گرفته شده است.
قبلا درباره دیگر روش های پشتیبان گیری از دیتابیس mysql/mariadb
صحبت کرده ایم، از جمله
آشنایی با mydumper/myloader
و یک اشاره اولیه به mysqldump
در مقاله
(راه اندازی Mysql/Mariadb Slave Replication)[https://shgn.ir/2024-04-14/mysql-master-slave-replication.html]
کرده ایم. در این دو حالت مطمئن ترین روش mysqldump/mariadb-dump
می باشد اما سرعت در
mydumper/myloader
خیلی بیشتر است.
در روش mariadb-backup
ما در پشتیبان گیری به ویژه به صورت افزایشی - incremantal - نیز سرعت بسیار قابل
قبولی را داریم. نکته ای که باید در نظر داشت، از هر نسخه ای از mariadb
پشتیبان گیری انجام شود، بازگرداندن
نیز باید روی همان نسخه صورت پذیرد.
پشتیبان گیری کامل از دیتابیس
به صورت خیلی ساده برای پشتیبان گیری از دیتابیس می توان با اجرا دستور زیر پشتیبان گیری انجام داد. نکته حائز اهمیت این است که، هاستی که قرار است پشتیبان گیری آن جا انجام شود، نیازمند به فضای دیسکی برابر با میزان فعلی دیتابیس می باشد.
mariadb-backup --backup --target-dir=/path/to/save/backup/files --user=backup_user --password="${PASSWORD}" --host=mariadb-host-address
بعد از اجرای دستور فوق باید دستور زیر اجرا شود تا پشتیبان گرفته شده جهت بازیابی معتبر و پایدار شود:
mariadb-backup --prepare --target-dir=/path/to/save/backup/files
پشتیبان گیری افزایشی
برای انجام پشتیبان گیری افزایشی از دیتابیس، مراحل به این صورت است که ابتدا باید یک پشتیبان گیری کامل از دیتابیس انجام شود، که بالاتر بیان شد، سپس با دستور زیر به صورت افزایشی از دیتابیس پشتیبان گیری انجام شود:
mariabackup --backup --target-dir=/path/to/save/backup/inc1 --incremental-basedir=/path/to/save/backup/files --host=host-maridb-address --user=backup_user --password="${PASSWORD"
گزینه --target-dir
مشخص کننده مسیر قرار گیری فایل های تغییرات بر اساس گزینه --incremental-basedir
می باشد
که محل قرارگیری پشتیبان کامل است.
برای انجام پشتیبان گیری افزایش بعدی، به صورت زیر عمل می شود:
mariabackup --backup --target-dir=/path/to/save/backup/inc2 --incremental-basedir=/path/to/save/backup/inc1 --host=host-maridb-address --user=backup_user --password="${PASSWORD"
آماده سازی پشتیبان
در پشتیبان گیری افزایشی ما حداقل ۲ یا بیشتر پشتیبان خواهیم داشت که اولین آن پشتیبان کامل و مابقی افزایشی
می باشد. جهت بازگرداندن پشیتبان، ابتدا باید افزایشی ها را به پشتیبان کامل پایه اعمال نمود، برای این مهم
با گزینه --prepare
و همچنین --aply-log-only
قابل انجام است.
mariadb-backup --prepare --target-dir=/path/to/save/backup/files
با این دستور، پشتیبان کامل پایه گرفته شده، در مسیر مشخص شده، با تغییرات InnoDB redo log
همسان سازی
می شوند، سپس با دستور زیر پشتیبان های افزایشی به پشیتبان کامل اعمال می شود:
mariadb-backup --prepare --target-dir=/path/to/save/backup/files --incremental-dir=/path/to/save/backup/inc1
با اجرای این دستور پشتیبان افزایشی اول به پشتیبان کامل پایه اعمال می گردد.
بازیابی دیتابیس پشتیبان گرفته شده
بعد از انجام پشتیبان گیری از دیتابیس و آماده سازی پشتیبان های کامل و افزایشی، گام بعدی، انتقال فایل ها و
بازگرداندن پشتیبان در سرور مقصد می باشد. برای این مهم باید از گزینه های --copy-back
یا--move-back
استفاده کرد. با گزینه --copy-back
علاوه بر بازگرداندن پشتیبان دیتابیس، فایل های پشتیبان نیز حفظ می شوند،
اما در گزینه --move-back
فقط پشتیبان بازگردانده می شود و فایل ها حذف می شوند.
مراحل بازگرداندن پشتیبان دیتابیس:
-
توقف سرویس دیتابیس
MariaDB Server
sudo systemctl stop mariadb.service
-
از خالی بودن
datadir
اطمینان حاصل کنیدsudo rm -rf /var/lib/mysql/*
-
اجرای دستور بازگردانی پشتیبان:
sudo rsync -avrP /path/to/save/backup/files /var/lib/mysql/
-
تصحیح دسترسی و مجوز فایل های بازگردانده شده:
sudo chown -R mysql:mysql /var/lib/mysql
-
در پایان راه اندازی مجدد سرویس دیتابیس:
sudo systemctl strat mariadb.service
این مراحل خیلی ساده و سریع انجام می شود.
رفع خطا در replication
در ارتباط بین سرور master/slave
بعضا ممکن است خطایی رخ دهد که رپلیکیشن متأثر از آن شود.
ممکن است خطا جزئی باشد و بتوان دستی آن را رفع نمود، و گاها ممکن خطا اساسی باشد یا زمان زیادی
از رخ دادن خطا گذشته باشد و bonlog
های مربوطه در دسترس نباشند، که در این صورت لازم است تا
رپلیکیشن از ابتدا ایجاد و راه اندازی شود.
اما در حالتی که خطایی چزئی رخ داده و بتوان آن را به صورت دستی رفع نمود، کافی است برای راه
اندازی مجدد رپلیکیشن با استفاده از دستورsql_slave_skip_counter = N
کهN
تعداد رخدادی
است که در binlog
ثبت شده و با این دستور اعلام می شود تا به اندازه آن، از آن رخدادها چشم
پوشی شود. پس کافی است تا به ترتیب زیر عمل نمود.
show slave status \G
خطا به صورت فرضی مشاهده شد.
stop slave;
-- THE COMMAND WHICH SOLVE TH PROBLEM --
set global sql_slave_skip_counter = 1;
start slave;
show slave status \G
و این چرخه را ادامه می دهیم تا خطا رفع شود
نکته مهم این که اگر این چشم پوشی ها زیاد اتفاق بیفتد، اون نود اسلیو از اعتبار لازم ساقط می شود و داده های آن ناقص می باشد و در این زمان، لازم است تا رپلیکیشن از ابتدا و کامل راه اندازی شود.