MySQL 数据目录迁移需严格按步骤操作:先查当前路径(SELECT @@datadir),再停服务,完整复制数据,修改配置文件中 datadir 并同步权限与SELinux上下文,最后验证启动与库可见性。

确认 MySQL 当前数据目录位置
安装完 MySQL 后,datadir 默认值由配置文件决定,不同系统/安装方式初始路径不同(如 /var/lib/mysql 在 Linux,C:\ProgramData\MySQL\MySQL Server 8.0\Data\ 在 Windows)。直接改路径前必须先查清当前实际值,否则迁移会失败。
- 登录 MySQL 执行:
SELECT @@datadir;
- 或查看配置文件(Linux 常为
/etc/my.cnf或/etc/mysql/my.cnf;Windows 常为my.ini),搜索datadir行 - 注意:如果配置文件里没显式写
datadir,就以 MySQL 启动时默认路径为准,SELECT @@datadir最可靠
停止 MySQL 服务并复制数据文件
不能在服务运行时直接修改 datadir 路径,否则启动报错 Can't start server: Bind on TCP/IP port: Address already in use 或更常见的 Table 'mysql.plugin' doesn't exist —— 这是因为系统表未加载,根源是数据目录不对。
- Linux:
sudo systemctl stop mysql
(或mysqld,视服务名而定) - Windows:
net stop mysql
(服务名为实际注册名,可用sc query | findstr mysql查) - 用
rsync -av /var/lib/mysql/ /new/path/mysql/(Linux)或完整复制整个原datadir目录(含子目录和隐藏文件,如ibdata1、ib_logfile*、mysql/、performance_schema/等) - 切勿只复制数据库名对应的子目录,否则权限表、系统表丢失,MySQL 无法启动
修改配置文件并调整权限
只改 my.cnf 或 my.ini 中的 datadir 不够,新路径的属主和权限必须匹配 MySQL 进程运行用户(通常是 mysql),否则启动时日志报 Can't open the mysql.plugin table. Please run mysql_upgrade 或直接拒绝访问。
一款非常包包、衣服、鞋子类网站,页面干净清洁、一目了然,mttshop打造精致、简单、易用、免费的商城。 系统要求:IIS5.1以后,必须安装.net 3.5 安装步骤: 1、下载完成后,直接解压文件mttshop.rar 2、附加数据库:解压后的可以找一个叫db的文件夹,解压后直接附加就可以,支持SQL 2000、2005、2008 3、配置web.config文件,找到key=&qu
- 编辑配置文件,在
[mysqld]段下设置:datadir = /new/path/mysql
- Linux:执行
sudo chown -R mysql:mysql /new/path/mysql
和sudo chmod -R 750 /new/path/mysql
- Windows:右键新文件夹 → 属性 → 安全 → 编辑 → 添加
MySQL服务对应用户(如NT SERVICE\Mysql),赋予“完全控制” - 若启用了
selinux(如 CentOS/RHEL),还需运行:sudo semanage fcontext -a -t mysqld_db_t "/new/path/mysql(/.*)?"
,再sudo restorecon -Rv /new/path/mysql
验证启动与检查状态
MySQL 对 datadir 内容非常敏感,哪怕多一个空格、少一个文件,都可能卡在初始化阶段,错误日志(error.log)里常出现 InnoDB: Operating system error number 13(权限拒绝)或 unknown variable 'datadir'(配置语法错)。
- Linux 启动:
sudo systemctl start mysql
;查看状态:sudo systemctl status mysql
- Windows 启动:
net start mysql
;检查错误日志路径(SHOW VARIABLES LIKE 'log_error';) - 成功后执行:
SELECT @@datadir, SCHEMA_NAME FROM information_schema.SCHEMATA;
确认路径已更新且所有库可见 - 若启动失败,优先检查错误日志末尾几行,90% 的问题出在权限、SELinux、路径拼写或残留 pid 文件(
/var/run/mysqld/mysqld.pid)
chown 或忘了删旧 pid 文件,都会让服务卡在“启动中”。









