Debian下的MariaDB迁移数据和日志目录
MariaDB 数据目录和日志目录迁移教程
目标
原路径:
|
1 2 |
/var/lib/mysql /var/log/mysql |
迁移到:
|
1 2 |
/home/var/lib/mysql /home/var/log/mysql |
并保留软链接:
|
1 2 |
/var/lib/mysql -> /home/var/lib/mysql /var/log/mysql -> /home/var/log/mysql |
1. 停止 MariaDB
|
1 |
systemctl stop mariadb |
确认已停止:
|
1 |
systemctl status mariadb |
2. 迁移数据目录
创建目标目录:
|
1 |
mkdir -p /home/var/lib |
复制原数据目录,保留权限和属主:
|
1 |
rsync -a /var/lib/mysql/ /home/var/lib/mysql/ |
设置权限:
|
1 2 |
chown -R mysql:mysql /home/var/lib/mysql chmod 750 /home/var/lib/mysql |
备份原目录并创建软链接:
|
1 2 |
mv /var/lib/mysql /var/lib/mysql.old ln -s /home/var/lib/mysql /var/lib/mysql |
检查:
|
1 2 3 |
ls -la /var/lib/mysql readlink -f /var/lib/mysql ls -ld /home /home/var /home/var/lib /home/var/lib/mysql |
3. 迁移日志目录
创建目标目录:
|
1 |
mkdir -p /home/var/log |
复制原日志目录:
|
1 |
rsync -a /var/log/mysql/ /home/var/log/mysql/ |
设置权限:
|
1 2 |
chown -R mysql:adm /home/var/log/mysql 2>/dev/null || chown -R mysql:mysql /home/var/log/mysql chmod 750 /home/var/log/mysql |
备份原目录并创建软链接:
|
1 2 |
mv /var/log/mysql /var/log/mysql.old ln -s /home/var/log/mysql /var/log/mysql |
检查:
|
1 2 3 |
ls -la /var/log/mysql readlink -f /var/log/mysql ls -ld /home/var/log /home/var/log/mysql |
4. 处理 systemd 的 ProtectHome 限制
MySQL 服务默认可能有:
|
1 |
ProtectHome=true |
这会导致 MySQL 无法访问 /home/var/lib/mysql 或 /home/var/log/mysql。
查看当前限制:
|
1 |
systemctl cat mariadb | grep -E 'ProtectHome|ReadWritePaths|ProtectSystem' |
创建 override:
|
1 2 3 4 5 6 7 |
mkdir -p /etc/systemd/system/mariadb.service.d cat > /etc/systemd/system/mariadb.service.d/datadir-home.conf << 'EOF' [Service] ProtectHome=false ReadWritePaths=-/var/lib/mysql -/home/var/lib/mysql -/var/log/mysql -/home/var/log/mysql EOF |
重新加载 systemd:
|
1 |
systemctl daemon-reload |
确认配置生效:
|
1 |
systemctl cat mariadb | grep -E 'ProtectHome|ReadWritePaths|ProtectSystem' |
看到同时有 ProtectHome=true 和 ProtectHome=false 没关系,后面的 drop-in 会覆盖前面的配置。
5. 启动 MariaDB