一、准备工作
1. 确认新硬盘挂载状态
# 查看挂载点是否正常
df -h | grep /opt/mysql
# 预期输出示例:
/dev/sdb1 13T 0% /opt/mysql
2. 确保MySQL配置允许符号链接
编辑 /etc/my.cnf
,确认以下参数已启用:
[mysqld]
symbolic-links = 1 # 允许符号链接
innodb_file_per_table = 1 # 必须开启(每个表独立存储)
3. 创建子目录并设置权限
sudo mkdir -p /opt/mysql/tables
sudo chown -R mysql:mysql /opt/mysql
二、手动迁移单表到机械硬盘
1. 停止MySQL服务
sudo systemctl stop mysqld
2. 迁移指定表文件(以 big_table
为例)
# 进入MySQL数据目录
cd /home/mysql
# 假设数据库名为 `mydb`,表名为 `big_table`
# 移动表文件到机械硬盘(保留权限)
sudo rsync -av ./mydb/big_table.* /opt/mysql/tables/
没有rsync命令也可以使用cp -rf
# 删除原文件(确保rsync成功后再操作)
sudo rm -f ./mydb/big_table.ibd ./mydb/big_table.frm
3. 创建符号链接
# 在MySQL数据目录中创建软链接
sudo ln -s /opt/mysql/tables/big_table.ibd /home/mysql/mydb/
sudo ln -s /opt/mysql/tables/big_table.frm /home/mysql/mydb/
# 验证链接
ls -l /home/mysql/mydb/big_table.*
# 正确输出应显示箭头指向目标文件:
lrwxrwxrwx 1 mysql mysql 25 Aug 10 10:00 big_table.ibd -> /opt/mysql/tables/big_table.ibd
4. 修复权限(关键步骤)
sudo chown -R mysql:mysql /home/mysql/mydb
sudo chown -R mysql:mysql /opt/mysql/tables
5. 启动MySQL并验证
sudo systemctl start mysqld
# 登录MySQL检查表状态
mysql -u root -p -e "USE mydb; CHECK TABLE big_table;"
# 预期输出:
# Table Op Msg_type Msg_text
# mydb.big_table check status OK