WIUNIX ACADEMY
آموزش نصب و راهاندازی رپلیکیشن MariaDB در اوبونتو و دبیان
صفحهٔ 5 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من3 مقدار قابلتغییر
نمونهٔ توضیحی وضعیت
این خروجی صرفاً نمونه است و نباید اجرا شود. نام لاگ، موقعیت و تأخیر واقعی باید از سرور خودتان خوانده شود.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Errno: 0
Last_SQL_Errno: 0
Using_Gtid: Slave_Pos
Master_Server_Id: 101
Master_SSL_Allowed: Yes
Master_SSL_Verify_Server_Cert: Yes
Seconds_Behind_Master: 0قدم بعدی
بازکردن نوشتن و ثبت دادهٔ جدید
فقط روی سرور اصلی و پس از تأیید وضعیت رپلیکا و ردیف اولیه اجرا کنید. وقفهٔ نوشتن تمام میشود و یک ردیف جدید پس از اسنپشات ثبت میگردد. GTID خروجی محرمانه نیست؛ همان مقدار دقیق برای انتظار محدود روی رپلیکا استفاده میشود. مقصد نوشتن برنامه همچنان سرور اصلی است.
سرور اصلی
sudo mariadb -e "SET GLOBAL read_only=OFF; INSERT INTO academy_lab.replication_probe VALUES (2,'after-seed'); SELECT @@GLOBAL.gtid_binlog_pos AS target_gtid; SELECT * FROM academy_lab.replication_probe ORDER BY id;"
سرور اصلی قابلنوشتن، ردیفهای1 و2 حاضر و target_gtid واقعی ثبت شود.
قدم بعدی
انتظار برای همان تراکنش و مقایسهٔ داده
با روش قبلی نشست SQL رپلیکا را باز کنید و GTID واقعی مرحلهٔ قبل را جایگزین نمایید. نتیجهٔ غیرمنفی یعنی رسیدن به تراکنش؛ مقدار1- یعنی پایان مهلت و NULL یعنی خطا. هیچکدام را موفقیت حساب نکنید، حتی اگر فیلد تأخیر صفر باشد. هر دو ردیف و متنشان باید با سرور اصلی یکسان باشند. این بررسی برای جدول کوچک آزمایش است و تطبیق همهٔ دادههای تولیدی محسوب نمیشود.
نشست SQL رپلیکا
SELECT MASTER_GTID_WAIT('REPLACE_WITH_ACTUAL_TARGET_GTID',30) AS wait_result;
SELECT id,note FROM academy_lab.replication_probe ORDER BY id;
SHOW SLAVE STATUS\G
EXIT;
نتیجهٔ انتظار غیرمنفی؛ ردیف1 consistent-seed و ردیف2 after-seed؛ هر دو رشته بدون خطا فعال باشند.
قدم بعدی
آزمودن ادامهٔ تکثیر پس از راهاندازی مجدد
این آزمون اختیاری فقط رپلیکا را پس از مقایسهٔ موفق داده موقتاً قطع میکند. چون شروع خودکار غیرفعال نشده، کانال معمولاً پس از راهاندازی بالا میآید. داده، GTID، هر دو رشته و وضعیت فقطخواندنی را دوباره ببینید. راهاندازی مجدد، نبود باینریلاگ یا ناسازگاری داده را درمان نمیکند.
رپلیکا
sudo systemctl restart mariadb
systemctl is-active mariadb
sudo mariadb -e "SHOW SLAVE STATUS\G; SELECT @@read_only,@@GLOBAL.gtid_slave_pos; SELECT * FROM academy_lab.replication_probe ORDER BY id;"
داده و موقعیت حفظ، read_only برابر1 و هر دو رشته بدون خطا دوباره فعال شوند.
قدم بعدی
نگهداری بکاپ مستقل و قابلبازیابی
روی سرور اصلی و بدون تغییر ساختار همزمان اجرا کنید. دادهٔ آزمایشی، تنظیمات و گواهی با ساختار مسیرها بایگانی میشوند؛ خطا باعث توقف است و اصل فایلها باقی میماند. بایگانی کلید خصوصی دارد و باید در محل مجاز خارج از سرور با رمزنگاری نگهداری شود. تأیید هش و خواندن آرشیو جای بازیابی واقعی نیست. پیش از اتکا یا کنارگذاشتن هر دادهای، SQL را در نمونهٔ تازه و جدا با نسخهٔ متناظر بازیابی و ردیفها را بررسی کنید؛ فایل بازیابی را روی سرور نویسندهٔ فعال وارد نکنید. برای محیط واقعی، حسابها و اشیای سیستمی هم برنامهٔ بکاپ جدا میخواهند.
سرور اصلی
sudo bash -eu <<'BACKUP'
umask 077
install -d -m 0700 /root/academy-backups
backup=$(mktemp -d /root/academy-backups/mariadb-XXXXXXXX)
mariadb-dump --single-transaction --quick --routines --events --triggers --databases academy_lab > "$backup/academy_lab.sql"
test -s "$backup/academy_lab.sql"
tar -C / -cpf "$backup/config-tls.tar" etc/mysql/mariadb.conf.d/90-academy-replication.cnf etc/mysql/tls
cd "$backup"
sha256sum academy_lab.sql config-tls.tar > SHA256SUMS
sha256sum -c SHA256SUMS
tar -tf config-tls.tar >/dev/null
tar -C / -df config-tls.tar
printf 'Retained backup: %s\n' "$backup"
BACKUP
خواندن و هش آرشیو موفق و اصل داده حفظ شود؛ بازیابی جدا و نسخهٔ امن خارج از سرور همچنان لازم است.
قدم بعدی
حفظ توقف آگاهانه پس از راهاندازی مجدد
برای توقف یا برگشت، خواندن برنامه را از رپلیکا جدا کنید و نویسندهٔ سالم را همان سرور اصلی نگه دارید. هیچکدام را ارتقا ندهید. در فایل رپلیکا، گزینهٔ پنل بعدی را داخل گروه موجود اضافه کنید و read_only را روشن نگه دارید. توقف رشته بهتنهایی پس از راهاندازی مجدد پایدار نیست.
رپلیکا
sudo nano /etc/mysql/mariadb.conf.d/90-academy-replication.cnf
فایل رپلیکا برای افزودن تنها گزینهٔ توقف پایدار باز شود.
قدم بعدی
گزینهٔ توقف پایدار
فقط همین گزینه را داخل گروه موجود mariadb در فایل رپلیکا اضافه کنید؛ باقی فایل را جایگزین نکنید.
محتوای فایل؛ در فایل مشخصشده ذخیره شود، نه در پوسته.
skip_slave_start=ON
تنها یک خط skip_slave_start در گروه موجود ذخیره و read_only روشن بماند.