首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 修改 MySQL 數據目錄 (datadir) 完整操作步驟與避坑指南

     編輯:MySQL 資料庫相關知識

核心原則:只做兩件事

  1. 物理移動:mv /var/lib/mysql /new/path/data;
  2. 修改配置:更新 my.cnf、啟動腳本、AppArmor/SELinux 策略中的路徑。

驗證當前路徑

mysql> SHOW VARIABLES LIKE '%dir%';
+---------------------------+------------------+
| Variable_name             | Value            |
+---------------------------+------------------+
| datadir                   | /var/lib/mysql/  |
| ...                       | ...              |
+---------------------------+------------------+

標準遷移流程


# 1. 停止服務
systemctl stop mysqld   # 或 service mysql stop

# 2. 移動數據目錄(保留權限、屬性)
rsync -av /var/lib/mysql/ /new/path/mysql/
# 或 mv /var/lib/mysql /new/path/mysql

# 3. 修改主配置
vi /etc/my.cnf
[mysqld]
datadir=/new/path/mysql
socket=/new/path/mysql/mysql.sock

# 4. 修改啟動腳本(如使用 systemd 需改 unit 文件)
vi /etc/init.d/mysqld   # 或 /usr/lib/systemd/system/mysqld.service
# 將 datadir 路徑同步修改

# 5. AppArmor/SELinux 策略同步
# Ubuntu/Debian:
vi /etc/apparmor.d/usr.sbin.mysqld
# 將 /var/lib/mysql/ 替換為 /new/path/mysql/
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

# CentOS/RHEL (SELinux):
semanage fcontext -a -t mysqld_db_t "/new/path/mysql(/.*)?"
restorecon -Rv /new/path/mysql

# 6. 啟動驗證
systemctl start mysqld
mysql> SHOW VARIABLES LIKE 'datadir';

常見失敗原因

  • 只改 my.cnf 忘改啟動腳本/SELinux;
  • 移動時丟失 ibdata1、ib_logfile* 導致 InnoDB 無法恢復;
  • socket 路徑未同步導致客戶端連不上。

快速驗證腳本


#!/bin/bash
# check_datadir.sh
mysql -NBe "SHOW VARIABLES LIKE 'datadir'" | grep -q "$1" && echo "OK: $1" || echo "FAIL"

用法:./check_datadir.sh /new/path/mysql

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved