8人参与 • 2025-12-08 • Mysql
因为 mysql 数据量越来越大,导致原磁盘空间被撑满,只能将数据目录迁移到新的硬盘。这里记录一下整个过程。
如果你本身已有大盘,只是想把 mysql 的 data 目录换到新的路径,那这一步可以跳过。
我这里是新增了一块硬盘,因此需要先做好分区 + 格式化 + 挂载工作,并最终让新硬盘挂载到:

sudo mkdir -p /data/mysql sudo chown -r mysql:mysql /data/mysql
要确保目录权限属于 mysql 用户,否则服务无法启动。
理论上 完全不停机、保证数据完整 是非常困难的。我的方案都是需要短暂停机的,如果无法接受,只能想别的办法了。
这一步不会影响线上 mysql,可提前把大量数据同步过去,减少停机压力:
sudo rsync -av --progress /opt/mysql-8.0.43/data/ /data/mysql/
大家改好自己相应的路径就可以了。
注意两个路径末尾的 / ,避免目录套目录问题。
sudo systemctl stop mysql ps -ef | grep mysql
确认所有 mysql 进程已退出。
rsync 默认行为就是跳过目标中已存在且未变化的文件。保证数据一致性:
sudo rsync -av --delete --progress /opt/mysql-8.0.43/data/ /data/mysql/
具体说明: rsync -av /source/ /dest/
-a:归档模式,会保留权限、时间戳、软硬链接等-v:显示详细信息如果想更严格确保文件内容完全一致,可以加 -c(checksum)参数,但会慢很多,因为会计算每个文件的校验和。
上面都执行了这步就不用执行了:
比如是测试库、开发库,那就可以一步到位:
sudo systemctl stop mysql sudo rsync -av --progress /opt/mysql-8.0.43/data/ /data/mysql/
找到:
datadir = /opt/mysql-8.0.43/data
把它改成:
datadir = /data/mysql
同理,如果你想调整 mysql 临时文件目录(可选),也可以:
tmpdir = /data/mysql_tmp
sudo systemctl start mysql systemctl status mysql
验证是否生效:
mysql -e "show variables like 'datadir';" mysql -e "show variables like 'tmpdir';"
输出正确路径即可。
至此,mysql 已经使用新的数据磁盘运行。
如果运行稳定一段时间(建议至少一天),就可以考虑删除旧的数据目录,释放原磁盘空间。
到此这篇关于mysql数据目录迁移的完整过程的文章就介绍到这了,更多相关mysql数据目录迁移内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论