迁移前必须确认的 MySQL 版本与数据目录一致性
新旧环境的
mysqld版本主版本号必须一致(如都是 8.0.x),否则直接拷贝数据文件会触发启动失败或数据损坏。尤其注意 5.7 升级到 8.0 不属于“硬件迁移”,而是升级操作,需走
mysql_upgrade或逻辑导出导入流程。
确认
datadir路径下所有子目录(如
mysql、
performance_schema系统库)完整,且
ibdata1、
ib_logfile*、
undo_*等 InnoDB 共享表空间和日志文件一并迁移——遗漏任一都会导致实例无法启动。 用
SELECT @@datadir;查当前路径,避免误迁 /var/lib/mysql 下的软链接目标之外的内容 检查
my.cnf中
innodb_data_home_dir和
innodb_log_group_home_dir是否显式指定,若不同路径需同步迁移对应文件 禁止在新机器上先初始化实例再覆盖数据目录;必须清空目标
datadir后再复制
文件权限与用户归属不能靠“复制”自动继承
Linux 下 MySQL 进程以
mysql用户运行,但 rsync/scp 默认不保留属主,迁移后常见错误是
mysqld: Can't create/write to file ... (Errcode: 13),本质是文件属主为 root 或其他用户。
必须在新机器上执行:
chown -R mysql:mysql /var/lib/mysql,且确保父目录(如
/var/lib)对
mysql用户可读可执行。SELinux 启用时还需恢复上下文:
restorecon -Rv /var/lib/mysql。 不要用
cp -r,优先用
rsync -avz --owner --group检查
ls -ld /var/lib/mysql,输出中第二列应为
mysql,而非
rootsystemd 环境下,若使用
ProtectHome=yes等安全限制,需在
/etc/systemd/system/mysqld.service.d/override.conf中显式放开路径
配置文件中的硬件敏感参数必须重校准
my.cnf里很多参数直接受新机器 CPU 核数、内存大小、磁盘 IOPS 影响,照搬旧配置轻则性能下降,重则 OOM 或写入卡死。关键项包括:
innodb_buffer_pool_size:建议设为物理内存的 50%–75%,旧机器 32G 内存配了 24G,新机器 128G 就不能还写 24G
innodb_log_file_size:总日志容量(×2)不宜超过
buffer_pool_size的 25%,且单个文件不宜大于 2GB(MySQL 8.0.30+ 支持更大,但需验证)
max_connections和
table_open_cache:需按新机器并发能力调整,过高会耗尽文件描述符(见
ulimit -n)
tmp_table_size和
max_heap_table_size:过大会导致大查询频繁落磁盘,过小则触发内部临时表转换为 MyISAM
迁移后首次启动前,务必用
mysqld --validate-config检查语法,并用
mysqld --verbose --help | grep -A 1 "Default options"确认实际生效路径是否为你修改的
my.cnf。
二进制日志与 GTID 状态必须显式处理
如果原库启用了
log_bin,迁移后不重置 binlog 位置会导致从库 IO 线程报错
Could not find first log file name in binary log index file。即使不用于复制,也建议清空 binlog 并重置索引:
RESET MASTER;(仅当确认无下游依赖时)或更稳妥地:删除
mysql-bin.*文件 + 清空
mysql-bin.index,再重启 mysqld。 启用 GTID 时,必须保证
gtid_executed和
gtid_purged在新实例中准确反映迁移前状态,可用
SELECT * FROM performance_schema.replication_applier_status_by_coordinator;辅助核对 若原库有半同步插件(
rpl_semi_sync_master),迁移后需重新安装并配置,否则主库会卡在 commit 等待应答 检查
SHOW SLAVE STATUS\G中
Seconds_Behind_Master是否为
NULL,避免误以为从库已就绪
最易被忽略的是时区和字符集:迁移后执行
SELECT @@time_zone, @@character_set_server, @@collation_server;,确认与旧库完全一致,否则时间字段或中文排序可能异常。
