WIUNIX ACADEMY
آموزش نصب و راهاندازی رپلیکیشن MariaDB در اوبونتو و دبیان
صفحهٔ 2 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من3 مقدار قابلتغییر
قدم بعدی
نصب و بررسی گواهی سرور اصلی
روی سرور اصلی اجرا کنید. فایلها باید قبلاً تحویل شده باشند؛ این مسیرها آدرس دانلود نیستند. کلید فقط برای root و mysql قابلخواندن است. دو هش کلید عمومی باید یکسان باشند. نام داخلی سرور اصلی باید از رپلیکا به آدرس خصوصی درست برسد؛ رکورد DNS داخلی را پیش از ادامه آماده کنید.
سرور اصلی
(
set -euo pipefail
sudo install -d -o root -g mysql -m 0750 /etc/mariadb/tls
sudo install -o root -g mysql -m 0640 /root/academy-pki/ca.pem /etc/mariadb/tls/ca.pem
sudo install -o root -g mysql -m 0640 /root/academy-pki/primary-fullchain.pem /etc/mariadb/tls/server.pem
sudo install -o root -g mysql -m 0640 /root/academy-pki/primary-key.pem /etc/mariadb/tls/server.key
sudo openssl x509 -in /etc/mariadb/tls/server.pem -noout -subject -issuer -dates -ext subjectAltName
sudo openssl x509 -in /etc/mariadb/tls/server.pem -checkend 86400 -noout
sudo openssl x509 -in /etc/mariadb/tls/server.pem -pubkey -noout | openssl sha256
sudo openssl pkey -in /etc/mariadb/tls/server.key -pubout | openssl sha256
sudo -u mysql test -r /etc/mariadb/tls/server.key
)
نام SAN و اعتبار درست، دو هش یکسان و کلید فقط برای root و mysql قابلخواندن باشد.
قدم بعدی
بازکردن تنظیمات سرور اصلی
فایل افزودهٔ زیر را روی سرور اصلی بسازید؛ فایل پایهٔ توزیع را جایگزین نکنید. مسیر این پنل با انتخاب سیستمعامل تغییر میکند و مسیر واقعی LTS و دبیان را نشان میدهد.
سرور اصلی
sudo nano /etc/mariadb/mariadb.conf.d/90-academy-replication.cnf
فایل افزودهٔ تازهٔ سرور اصلی باز و فایل پایه حفظ شود.
قدم بعدی
تنظیمات شناسه، ثبت تراکنش و TLS
محتوای فایل، فقط برای سرور اصلی است. دامنهٔ صفر یک جریان تراکنش را مشخص میکند؛ شناسهٔ یکتای میزبان همان server_id است. قالب ROW وابستگی به اجرای دوبارهٔ عبارت SQL را کم میکند. نگهداری هفتروزهٔ باینریلاگ فقط نمونهٔ آزمایش است؛ برای زمان تهیه و انتقال داده، جبران تأخیر و قطعی ظرفیت کافی بگذارید. این تنظیمات، جابهجایی بدون ازدسترفتن داده را تضمین نمیکنند.
محتوای فایل؛ در فایل مشخصشده ذخیره شود، نه در پوسته.
[mariadb]
server_id=101
bind_address=10.20.0.10
log_bin=/var/lib/mariadb/primary-bin
binlog_format=ROW
gtid_domain_id=0
gtid_strict_mode=ON
log_slave_updates=ON
sync_binlog=1
innodb_flush_log_at_trx_commit=1
binlog_expire_logs_seconds=604800
read_only=OFF
ssl_ca=/etc/mariadb/tls/ca.pem
ssl_cert=/etc/mariadb/tls/server.pem
ssl_key=/etc/mariadb/tls/server.key
فایل با شناسه101 و مسیرهای خصوصی و تنظیمات توضیحدادهشده ذخیره شود.
قدم بعدی
بررسی گزینهها و راهاندازی مجدد سرور اصلی
فقط روی سرور اصلی. فرمان help خطای گزینهها را میگیرد، اما جای بررسی راهاندازی واقعی یا گواهی نیست. راهاندازی مجدد اتصالها را قطع میکند. اگر سرویس بالا نیامد، برنامه را متصل نکنید و بخش عیبیابی را ببینید. مقدارهای فعال و شنوندهٔ خصوصی باید با تنظیمات یکسان باشند.
سرور اصلی
(
set -euo pipefail
sudo mariadbd --verbose --help >/dev/null
sudo systemctl restart mariadb
systemctl is-active mariadb
sudo mariadb -e "SHOW VARIABLES WHERE Variable_name IN ('server_id','log_bin','binlog_format','gtid_domain_id','gtid_strict_mode','read_only','have_ssl','sync_binlog','innodb_flush_log_at_trx_commit','binlog_expire_logs_seconds');"
sudo ss -lntp 'sport = :3306'
)
sudo mariadb -e "SELECT @@datadir;"
شناسه101، باینریلاگ روشن، قالب ROW، دامنه0، strict روشن، read_only خاموش و TLS فعال؛ شنونده روی10.20.0.10 باشد.
قدم بعدی
نصب CA و بررسی نام سرور از رپلیکا
روی رپلیکا اجرا کنید. در این طراحی یکطرفه، رپلیکا با CA و نام گواهی هویت سرور اصلی را میسنجد؛ سرور اصلی هم حساب محدود رپلیکا را با رمز تأیید میکند. کلید خصوصی کلاینت لازم نیست. خروجی DNS باید آدرس خصوصی سرور اصلی باشد. خود CA محرمانه نیست، اما تعویض آن مرز اعتماد را تغییر میدهد.
رپلیکا
(
set -euo pipefail
sudo install -d -o root -g mysql -m 0750 /etc/mariadb/tls
sudo install -o root -g mysql -m 0640 /root/academy-pki/ca.pem /etc/mariadb/tls/ca.pem
sudo -u mysql test -r /etc/mariadb/tls/ca.pem
getent ahostsv4 db-primary.example.internal
)
mysql زنجیرهٔ CA را بخواند و DNS داخلی به10.20.0.10 برسد.
قدم بعدی
بازکردن تنظیمات رپلیکا
روی رپلیکا فایل افزودهٔ متناسب با سیستمعامل انتخابی را باز کنید. محتوای پنل بعدی مخصوص رپلیکا است و نباید با تنظیمات سرور اصلی عوض شود.
رپلیکا
sudo nano /etc/mariadb/mariadb.conf.d/90-academy-replication.cnf
فایل افزودهٔ رپلیکا در مسیر سیستمعامل انتخابی باز شود.
قدم بعدی
تنظیم رپلیکا برای جلوگیری از نوشتن عادی
محتوای فایل رپلیکا. گزینهٔ read_only نوشتن عادی را رد میکند؛ رشتهٔ تکثیر و مدیر دارای اختیار READ_ONLY ADMIN یا SUPER همچنان میتوانند بنویسند. این اختیارها نباید به حساب برنامه داده شوند. فعالبودن باینریلاگ و ثبت رویدادهای دریافتی به معنی ارتقای خودکار نقش نیست. این دستورها برای MariaDB 10.11 و11.8 نوشته شدهاند و به گزینهٔ اختصاصی MySQL تکیه ندارند.
محتوای فایل؛ در فایل مشخصشده ذخیره شود، نه در پوسته.
[mariadb]
server_id=102
bind_address=127.0.0.1
log_bin=/var/lib/mariadb/replica-bin
relay_log=/var/lib/mariadb/replica-relay
binlog_format=ROW
gtid_domain_id=0
gtid_strict_mode=ON
log_slave_updates=ON
sync_binlog=1
innodb_flush_log_at_trx_commit=1
binlog_expire_logs_seconds=604800
read_only=ON
فایل رپلیکا با شناسه102، شنوندهٔ محلی و read_only روشن ذخیره شود.