挂载无法启动的Ubuntu 16.04 LVM硬盘后,如何导出MySQL数据库及修复启动?
我来帮你一步步解决这两个问题——先搞定MySQL数据库导出,再聊聊修复硬盘启动的思路:
从挂载的LVM硬盘导出MySQL数据库
既然你已经把旧服务器的LVM卷挂载到了工作站上,有两种可靠的方法可以导出MySQL数据库:
方法一:直接用mysqldump读取数据目录(无需启动MySQL服务)
这种方法最安全,不会影响工作站上的现有MySQL服务:
- 首先确认旧系统MySQL数据目录的挂载路径:假设你把旧系统根目录挂载到了
/mnt/old_server,那么数据目录通常是/mnt/old_server/var/lib/mysql - 用
sudo执行导出命令,确保权限足够读取MySQL数据文件:- 导出所有数据库:
sudo mysqldump --datadir=/mnt/old_server/var/lib/mysql --all-databases > all_old_databases.sql - 只导出特定数据库(替换
your_db_name为实际库名):sudo mysqldump --datadir=/mnt/old_server/var/lib/mysql your_db_name > your_db_name.sql
- 导出所有数据库:
- 提示:如果工作站的MySQL版本和旧服务器差异较大,可以添加
--compatible=mysql5.7(根据旧版本调整)参数避免兼容性问题。
方法二:临时启动MySQL服务使用旧数据目录
如果需要先验证数据库内容再导出,或者遇到方法一的兼容性问题,可以临时启动服务:
- 先停止工作站上的MySQL服务,避免端口冲突:
sudo systemctl stop mysql - 复制旧系统的MySQL配置文件并修改路径:
编辑cp /mnt/old_server/etc/mysql/my.cnf /tmp/old_mysql.cnf/tmp/old_mysql.cnf,将datadir改为/mnt/old_server/var/lib/mysql,socket改为/tmp/old_mysql.sock(避免覆盖工作站的socket) - 启动临时MySQL服务:
sudo mysqld_safe --defaults-file=/tmp/old_mysql.cnf & - 连接到临时服务导出数据:
mysqldump -S /tmp/old_mysql.sock --all-databases > all_old_databases.sql - 导出完成后停止临时服务,恢复工作站的MySQL:
sudo mysqladmin -S /tmp/old_mysql.sock shutdown sudo systemctl start mysql
修复旧LVM硬盘的启动问题
先从基础排查开始,逐步定位问题:
步骤1:验证LVM卷组状态
- 检查系统识别到的LVM资源:
sudo vgscan sudo vgdisplay sudo lvdisplay - 如果卷组处于未激活状态,执行激活命令:
sudo vgchange -ay
步骤2:修复GRUB引导加载器
这是最常见的启动故障原因:
- 挂载旧系统根目录及必要的虚拟文件系统:
sudo mount /dev/mapper/[旧卷组名]-root /mnt/old_server sudo mount --bind /dev /mnt/old_server/dev sudo mount --bind /proc /mnt/old_server/proc sudo mount --bind /sys /mnt/old_server/sys - 进入旧系统的chroot环境:
sudo chroot /mnt/old_server - 更新GRUB配置并重新安装到旧硬盘(替换
/dev/sdX为旧硬盘的设备名,比如sdb,不要加分区号):update-grub grub-install /dev/sdX - 退出chroot并卸载挂载:
exit sudo umount /mnt/old_server/sys sudo umount /mnt/old_server/proc sudo umount /mnt/old_server/dev sudo umount /mnt/old_server
步骤3:检查文件系统完整性
如果文件系统损坏也会导致启动失败:
- 确保旧逻辑卷已经卸载:
sudo umount /mnt/old_server - 运行fsck检查并修复(替换为你的逻辑卷路径):
sudo e2fsck -f /dev/mapper/[旧卷组名]-root
注意:执行fsck前必须卸载逻辑卷,否则可能造成不可逆的数据损坏
步骤4:排查initramfs问题
如果启动时提示initramfs错误,重新生成initramfs:
- 进入chroot环境(参考步骤2的挂载操作)
- 重新生成所有内核版本的initramfs:
update-initramfs -u -k all
步骤5:查看启动日志定位问题
如果以上步骤无效,查看旧系统的启动日志找线索:
cat /mnt/old_server/var/log/syslog | grep -i error cat /mnt/old_server/var/log/dmesg | grep -i disk
日志里的错误信息(比如磁盘IO错误、LVM挂载失败)能帮你精准定位问题。
内容的提问来源于stack exchange,提问作者Jacco
相关产品推荐
相关产品推荐

