پرش به محتوا

MariaDB روی Rocky و AlmaLinux

MariaDB را از AppStream نصب و امن کنید، کاربر برنامه بسازید، دسترسی شبکه را محدود کنید، پوشه‌ی داده را با برچسب SELinux درست جابه‌جا کنید و بکاپ بگیرید.

Rocky Linux 10سطح: مقدماتیبرای: Rocky Linux 10، AlmaLinux 10، CentOS Stream 10، Rocky Linux 9، AlmaLinux 9به‌روزرسانی: ۱۷ آبان ۱۴۰۵

۱. نصب

bash
dnf info mariadb-server | grep -E '^(Version|Release)'
sudo dnf install -y mariadb-server
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation

۲. پایگاه داده و کاربر

bash
sudo mariadb <<'SQL'
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app'@'192.168.10.%' IDENTIFIED BY 'change-me';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON appdb.* TO 'app'@'192.168.10.%';
SQL

برای کاربر برنامه فقط دسترسی‌های لازم را بدهید، نه ALL PRIVILEGES روی *.*.

۳. دسترسی شبکه

/etc/my.cnf.d/mariadb-server.cnf، در بخش [mysqld]:

ini
bind-address = 192.168.10.26
character-set-server = utf8mb4
innodb_buffer_pool_size = 2G
bash
sudo systemctl restart mariadb
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="mysql" accept'
sudo firewall-cmd --reload

۴. انتقال پوشه‌ی داده به دیسک دیگر

این همان جایی است که SELinux بیشتر وقت‌ها جلوی کار را می‌گیرد. ترتیب درست:

bash
sudo systemctl stop mariadb
sudo rsync -aX /var/lib/mysql/ /data/mysql/
sudo semanage fcontext -a -t mysqld_db_t '/data/mysql(/.*)?'
sudo restorecon -Rv /data/mysql

در /etc/my.cnf.d/mariadb-server.cnf مسیرها را عوض کنید:

ini
datadir = /data/mysql
socket  = /var/lib/mysql/mysql.sock

سوکت در جای قبلی می‌ماند تا برنامه‌های محلی به تغییر نیاز نداشته باشند.

bash
sudo systemctl start mariadb
sudo mariadb -e 'select @@datadir'

اگر سرویس بالا نیامد، دلیل را ببینید: sudo ausearch -m avc -c mariadbd -ts recent.

۵. بکاپ

bash
sudo mkdir -p /var/backups/mariadb
echo '15 2 * * * root mariadb-dump --single-transaction --routines --all-databases | gzip > /var/backups/mariadb/all-$(date +\%F).sql.gz && find /var/backups/mariadb -mtime +14 -delete' | sudo tee /etc/cron.d/mariadb-backup