mariadb配置数据存储文件夹
piaoling 2025-06-04 14:42:00
在 MariaDB 中指定自定义数据存储目录需要以下步骤,请谨慎操作:
### 1. **停止 MariaDB 服务**
```bash
sudo systemctl stop mariadb
```
### 2. **创建新数据目录**
```bash
sudo mkdir -p /path/to/new/datadir # 替换为你的目标路径(如 /mnt/dbdata)
sudo chown mysql:mysql /path/to/new/datadir # 设置权限
```
### 3. **复制现有数据(重要!)**
```bash
sudo rsync -av /var/lib/mysql/ /path/to/new/datadir
```
- 如果是新安装可跳过此步
- 使用 `rsync` 保留权限和属性
### 4. **备份原数据目录(可选但推荐)**
```bash
sudo mv /var/lib/mysql /var/lib/mysql.bak
```
### 5. **修改 MariaDB 配置文件**
编辑配置文件(根据你的系统选择):
```bash
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf # Ubuntu/Debian
# 或
sudo nano /etc/my.cnf.d/server.cnf # CentOS/RHEL
```
在 `[mysqld]` 部分添加:
```ini
[mysqld]
datadir = /path/to/new/datadir
socket = /path/to/new/datadir/mysql.sock # 同步修改 socket 路径
```
### 6. **更新 AppArmor/SELinux 策略**
#### Ubuntu (AppArmor):
```bash
sudo nano /etc/apparmor.d/tunables/alias
```
添加:
```conf
alias /var/lib/mysql/ -> /path/to/new/datadir/,
```
重启 AppArmor:
```bash
sudo systemctl restart apparmor
```
#### CentOS (SELinux):
```bash
sudo semanage fcontext -a -t mysqld_db_t "/path/to/new/datadir(/.*)?"
sudo restorecon -Rv /path/to/new/datadir
```
### 7. **修改 systemd 服务文件(解决启动问题)**
```bash
sudo systemctl edit mariadb
```
添加以下内容:
```ini
[Service]
ProtectHome=false
ReadWritePaths=/path/to/new/datadir
```
### 8. **启动 MariaDB**
```bash
sudo systemctl start mariadb
sudo systemctl status mariadb # 检查状态
```
### 9. **验证数据目录**
登录 MariaDB 检查:
```sql
SHOW VARIABLES LIKE 'datadir';
```
应显示新路径:`/path/to/new/datadir/`
### 10. **清理旧数据(确认运行正常后)**
```bash
sudo rm -rf /var/lib/mysql.bak
```
### 常见问题解决:
1. **启动失败**:
- 检查日志:`sudo journalctl -xe -u mariadb`
- 确认目录权限:`sudo chown -R mysql:mysql /path/to/new/datadir`
2. **Socket 错误**:
在配置文件中同步修改:
```ini
[client]
socket = /path/to/new/datadir/mysql.sock
```
3. **权限问题**:
```bash
sudo chmod 750 /path/to/new/datadir
sudo setfacl -R -m u:mysql:rwx /path/to/new/datadir
```
4. **磁盘空间不足**:
确保新目录挂载在足够大的分区:
```bash
df -h /path/to/new/datadir
```
> **重要提示**:生产环境操作前务必备份数据库!可使用:
> ```bash
> sudo mysqldump --all-databases > full_backup.sql
> ```
完成上述步骤后,MariaDB 将使用新位置存储所有数据文件(包括数据库、日志和临时文件)。
### 1. **停止 MariaDB 服务**
```bash
sudo systemctl stop mariadb
```
### 2. **创建新数据目录**
```bash
sudo mkdir -p /path/to/new/datadir # 替换为你的目标路径(如 /mnt/dbdata)
sudo chown mysql:mysql /path/to/new/datadir # 设置权限
```
### 3. **复制现有数据(重要!)**
```bash
sudo rsync -av /var/lib/mysql/ /path/to/new/datadir
```
- 如果是新安装可跳过此步
- 使用 `rsync` 保留权限和属性
### 4. **备份原数据目录(可选但推荐)**
```bash
sudo mv /var/lib/mysql /var/lib/mysql.bak
```
### 5. **修改 MariaDB 配置文件**
编辑配置文件(根据你的系统选择):
```bash
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf # Ubuntu/Debian
# 或
sudo nano /etc/my.cnf.d/server.cnf # CentOS/RHEL
```
在 `[mysqld]` 部分添加:
```ini
[mysqld]
datadir = /path/to/new/datadir
socket = /path/to/new/datadir/mysql.sock # 同步修改 socket 路径
```
### 6. **更新 AppArmor/SELinux 策略**
#### Ubuntu (AppArmor):
```bash
sudo nano /etc/apparmor.d/tunables/alias
```
添加:
```conf
alias /var/lib/mysql/ -> /path/to/new/datadir/,
```
重启 AppArmor:
```bash
sudo systemctl restart apparmor
```
#### CentOS (SELinux):
```bash
sudo semanage fcontext -a -t mysqld_db_t "/path/to/new/datadir(/.*)?"
sudo restorecon -Rv /path/to/new/datadir
```
### 7. **修改 systemd 服务文件(解决启动问题)**
```bash
sudo systemctl edit mariadb
```
添加以下内容:
```ini
[Service]
ProtectHome=false
ReadWritePaths=/path/to/new/datadir
```
### 8. **启动 MariaDB**
```bash
sudo systemctl start mariadb
sudo systemctl status mariadb # 检查状态
```
### 9. **验证数据目录**
登录 MariaDB 检查:
```sql
SHOW VARIABLES LIKE 'datadir';
```
应显示新路径:`/path/to/new/datadir/`
### 10. **清理旧数据(确认运行正常后)**
```bash
sudo rm -rf /var/lib/mysql.bak
```
### 常见问题解决:
1. **启动失败**:
- 检查日志:`sudo journalctl -xe -u mariadb`
- 确认目录权限:`sudo chown -R mysql:mysql /path/to/new/datadir`
2. **Socket 错误**:
在配置文件中同步修改:
```ini
[client]
socket = /path/to/new/datadir/mysql.sock
```
3. **权限问题**:
```bash
sudo chmod 750 /path/to/new/datadir
sudo setfacl -R -m u:mysql:rwx /path/to/new/datadir
```
4. **磁盘空间不足**:
确保新目录挂载在足够大的分区:
```bash
df -h /path/to/new/datadir
```
> **重要提示**:生产环境操作前务必备份数据库!可使用:
> ```bash
> sudo mysqldump --all-databases > full_backup.sql
> ```
完成上述步骤后,MariaDB 将使用新位置存储所有数据文件(包括数据库、日志和临时文件)。
发表评论(评论将通过邮件发给作者):