mysql从旧服务器迁移到新服务器_mysql全量迁移步骤
发布时间 - 2026-02-01 00:00:00 点击率:次mysqldump导出必须加--single-transaction和--routines:前者保证InnoDB一致性快照,后者导出存储过程、函数、触发器;推荐命令含--triggers、--events、--hex-blob及utf8mb4字符集显式指定。
mysqldump 导出时必须加 --single-transaction 和 --routines
不加 --single-transaction,在有写入的旧库上导出可能产生不一致快照,尤其对 InnoDB 表;而 --routines 是为了导出存储过程、函数、触发器——这些默认不被包含。如果业务依赖自定义函数或定时触发逻辑,漏掉会导致新库功能异常。
推荐导出命令:
mysqldump -h old_host -u user -p --single-transaction --routines --triggers --events --hex-blob --default-character-set=utf8mb4 database_name > dump.sql
-
--triggers和--events显式加上,避免因 MySQL 版本差异导致默认行为变化 -
--hex-blob防止二进制字段(如VARBINARY、BLOB)在导出时被错误转义 - 务必确认旧库字符集是
utf8mb4,否则导出文件里中文可能乱码,导入后变成问号或截断
导入前要在新服务器上创建同名数据库并指定 utf8mb4 字符集
直接 CREATE DATABASE db_name; 会继承 MySQL 实例默认字符集,而很多老服务器默认还是 latin1 或 utf8(即 utf8mb3)。一旦库级字符集不对,即使 dump.sql 里声明了 CHARSET=utf8mb4,表和列仍可能建错。
安全做法是显式指定:
CREATE DATABASE `database_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
- 导入前执行
SET NAMES utf8mb4;,确保客户端连接使用正确编码 - 如果导入报错
ERROR 1366 (HY000): Incorrect string value,大概率是某张表的列没继承库级字符集,需检查dump.sql中CREATE TABLE语句是否含CHARSET=utf8mb4 - 不要依赖
my.cnf的全局设置来“一劳永逸”,迁移过程必须显式控制
导入大文件时禁用唯一性检查和自动提交能提速 5–10 倍
默认导入会逐条插入并校验唯一索引、外键,还频繁刷盘。对于百万级以上数据,这会让导入从几分钟拖到几小时。
在 dump.sql 开头手动插入三行(或用 sed 预处理):
SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET AUTOCOMMIT=0;
并在结尾补上:
SET UNIQUE_CHECKS=1; SET FOREIGN_KEY_CHECKS=1; COMMIT;
- 跳过唯一性检查只在确认源数据本身无重复的前提下才安全
- 关闭
AUTOCOMMIT后,整个导入变成一个事务,内存压力增大,但 IO 减少显著;若中途失败,需重跑全量 - 导入完成后务必手动执行
SHOW ENGINE INNODB STATUS\G查看是否有未释放的锁或长事务残留
迁移后必须验证 mysql.proc 表和 DEFINER 权限问题
存储过程/函数导出时会带 DEFINER=`user`@`host`,如果新库没有这个用户,或者用户权限不足,调用时会报 ERROR 1449 (HY000): The user specified as a definer does not exist。
- 导入后运行
SELECT db, name, type, definer FROM mysql.proc WHERE db = 'database_name';检查所有对象的definer - 批量修正:用
mysqldump加--skip-definer重新导出,或导入后执行UPDATE mysql.proc SET definer='new_user@localhost' WHERE db='database_name';(注意操作前先FLUSH TABLES) - 别忘了
GRANT EXECUTE ON PROCEDURE给应用账号,否则即使过程存在也无法调用
跨版本迁移(比如 5.7 → 8.0)时,mysql.proc 表结构已废弃,改用 information_schema.routines,此时必须用 mysqldump --routines 而不是直接拷表。
# mysql
# 编码
# sql
# String
# select
# Error
# 继承
# 对象
# table
# database
# 数据库
# 存储过程
# 并在
# 要在
# 自定义
# 只在
# 几分钟
# 不被
# 别忘了
# 报错
# 不加
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器选型指南:免备案配置与高效建站方案解析
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Linux系统运维自动化项目教程_Ansible批量管理实战
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Linux系统命令中screen命令详解
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
中国移动官方网站首页入口 中国移动官网网页登录
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
如何挑选优质建站一级代理提升网站排名?
Python文件操作最佳实践_稳定性说明【指导】
Laravel如何使用模型观察者?(Observer代码示例)
如何在IIS服务器上快速部署高效网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel如何创建自定义Facades?(详细步骤)
php json中文编码为null的解决办法
用yum安装MySQLdb模块的步骤方法
如何在VPS电脑上快速搭建网站?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
简历没回改:利用AI润色让你的文字更专业
JS碰撞运动实现方法详解
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
SQL查询语句优化的实用方法总结
打造顶配客厅影院,这份100寸电视推荐名单请查收
JS中对数组元素进行增删改移的方法总结
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何快速使用云服务器搭建个人网站?
如何在宝塔面板中修改默认建站目录?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
JavaScript常见的五种数组去重的方式
高端云建站费用究竟需要多少预算?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
如何在万网开始建站?分步指南解析
黑客如何通过漏洞一步步攻陷网站服务器?
,交易猫的商品怎么发布到网站上去?
个人摄影网站制作流程,摄影爱好者都去什么网站?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
BootStrap整体框架之基础布局组件
Laravel API资源类怎么用_Laravel API Resource数据转换
如何在自有机房高效搭建专业网站?
简单实现jsp分页
黑客如何利用漏洞与弱口令入侵网站服务器?
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程


