WIUNIX ACADEMY
آموزش نصب و راهاندازی رپلیکیشن MariaDB در اوبونتو و دبیان
صفحهٔ 3 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من3 مقدار قابلتغییر
قدم بعدی
راهاندازی و کنترل رپلیکای خالی
فقط روی رپلیکا اجرا کنید. راهاندازی مجدد اتصالها را قطع میکند؛ در این آزمایش هنوز برنامهای متصل نیست. شناسه، وضعیت فقطخواندنی و اتصال محلی را بررسی کنید. نباید کانال تکثیر یا دیتابیس کاربر وجود داشته باشد. کانال موجود را بازنشانی نکنید؛ وجود آن دلیل توقف است.
رپلیکا
(
set -euo pipefail
sudo mariadbd --verbose --help >/dev/null
sudo systemctl restart mariadb
systemctl is-active mariadb
sudo mariadb -e 'SELECT VERSION(),@@server_id,@@read_only,@@gtid_domain_id; SHOW DATABASES; SHOW SLAVE STATUS\G'
sudo ss -lntp 'sport = :3306'
)
sudo mariadb -e "SELECT @@datadir;"
شناسه102، read_only برابر1، دامنه0؛ کانال تکثیر و دیتابیس کاربر غایب و شنونده محلی باشد.
قدم بعدی
ورود امن به نشست مدیریتی سرور اصلی
روی سرور اصلی نشست زیر را باز کنید. پنلهای SQL بعدی در همین نشست اجرا میشوند، نه در Bash. تاریخچهٔ کلاینت غیرفعال است. رمز بلند و یکتای حساب تکثیر را از مدیر رمز دریافت و فقط داخل نشست امن جایگزین کنید؛ رمز را در آرگومان فرمان، تاریخچهٔ پوسته، عکس یا تیکت نگذارید. مقدار نمونه رمز واقعی نیست. سیاست ضبط نشست و لاگ ممیزی را هم بررسی کنید؛ فرادادهٔ تکثیر شامل اطلاعات حساس اتصال است. رمز تصادفی۶۴کاراکتری فقط با رقم و حروف a تا f انتخاب کنید تا در رشتهٔ SQL به escaping نقلقول نیاز نباشد.
ترمینال سرور اصلی
sudo env MYSQL_HISTFILE=/dev/null mariadb
نشست مدیریتی محلی سرور اصلی بدون ثبت تاریخچه باز شود.
قدم بعدی
ساخت حساب محدود برای تکثیر
داخل نشست SQL سرور اصلی اجرا کنید. میزبان حساب باید دقیقاً IP مبدأ رپلیکا باشد؛ wildcard یا آدرس اشتباه پشت NAT نگذارید. تنها مجوز دریافت رویداد و الزام TLS داده میشود. بررسی نام گواهی در مرحلهٔ اتصال رپلیکا صریحاً فعال خواهد شد. ساخت حساب و GRANT به بارگذاری دستی جدول مجوز نیاز ندارند.
نشست SQL اصلی
CREATE USER 'academy_repl'@'10.20.0.11' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_SECRET' REQUIRE SSL;
GRANT REPLICATION SLAVE ON *.* TO 'academy_repl'@'10.20.0.11';
حساب تازه فقط مجوز تکثیر، مبدأ محدود و الزام TLS داشته باشد؛ رمز در خروجی چاپ نشود.
قدم بعدی
ساخت دادهٔ آزمایش و بستن مسیر نوشتن
در نشست SQL اصلی، تنها دیتابیس کاربر این آزمایش را بسازید. برنامه و job یا مدیر دیگری نباید همزمان بنویسند. وضعیت فقطخواندنی را تا مقایسهٔ داده حفظ کنید. این گزینه جلوی مدیر پرامتیاز را نمیگیرد؛ بنابراین پنجرهٔ توقف نوشتن باید هماهنگ باشد. این توالی برای دیتابیس تولیدی موجود مجاز نیست.
نشست SQL اصلی
CREATE DATABASE academy_lab CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE academy_lab.replication_probe (id INT PRIMARY KEY, note VARCHAR(80) NOT NULL) ENGINE=InnoDB;
INSERT INTO academy_lab.replication_probe VALUES (1,'consistent-seed');
SET GLOBAL read_only=ON;
SELECT @@read_only;
SELECT * FROM academy_lab.replication_probe;
EXIT;
یک ردیف InnoDB و read_only برابر1؛ نویسندهای باقی نماند و نشست به پوسته برگردد.
قدم بعدی
گرفتن نسخهٔ سازگار همراه با موقعیت GTID
در Bash سرور اصلی اجرا کنید. پوشه باید تازه باشد؛ اجرای مجدد بهجای بازنویسی بکاپ قبلی متوقف میشود. اسنپشات InnoDB و موقعیت دقیق GTID در یک خروجی ثبت میشوند؛ قفل کوتاه ابتدای کار ممکن است منتظر تراکنش طولانی بماند. تغییر ساختار، جدول غیرتراکنشی یا نوشتن مدیر در این بازه مجاز نیست. این خروجی بذر همان دیتابیس آزمایشی است، نه بکاپ کامل همهٔ حسابها و دیتابیسها. موقعیت جدید سرور را به نسخهٔ قدیمی داده نچسبانید.
سرور اصلی
sudo bash -eu <<'SEED'
umask 077
mkdir /root/academy-seed
mariadb-dump --single-transaction --quick --master-data=2 --gtid --routines --events --triggers --skip-add-drop-table --databases academy_lab > /root/academy-seed/seed.sql
test -s /root/academy-seed/seed.sql
grep -E "^-- SET GLOBAL gtid_slave_pos='[0-9,-]+';" /root/academy-seed/seed.sql
cd /root/academy-seed
sha256sum seed.sql > SHA256SUMS
sha256sum -c SHA256SUMS
SEED
خروجی کامل، هش موفق و دقیقاً یک GTID ثبتشده. در خطا فایلها حفظ و ورود داده متوقف شود.
قدم بعدی
ساخت پوشهٔ خصوصی دریافت داده
روی رپلیکا با کاربر dbadmin اجرا کنید. پوشه نباید از قبل وجود داشته باشد. انتقال با SSH فعلی و کلید میزبان تأییدشده انجام میشود؛ بررسی کلید میزبان را خاموش نکنید.
پوستهٔ رپلیکا با dbadmin
( umask 077; mkdir "$HOME/academy-seed" )
پوشهٔ دریافت تازه با مالک dbadmin و دسترسی0700 ساخته شود.