یکی از سریع ترین روش های پشتیبان گیری از دیتابیس mariadb استفاده از mariadb-backup است. در حقیقت این این برنامه از xtrabackup که از دیتابیس های mysql و xtradb پشتیبان گیری می کند، گرفته شده است.

Mariadb Backup

قبلا درباره دیگر روش های پشتیبان گیری از دیتابیس 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

و این چرخه را ادامه می دهیم تا خطا رفع شود

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

منابع

برچسب ها: database mariadb backup