在CentOS系统下将MySQL数据库迁移到SQLite是一个常见的需求,尤其是在轻量化部署或测试环境中,SQLite作为嵌入式数据库,具有无需服务、文件存储、易于迁移等优势,适合小型应用或开发场景,本文将详细介绍迁移步骤、注意事项及相关工具使用,确保过程顺利且数据完整。

迁移前准备
在开始迁移前,需确认当前MySQL数据库的版本、表结构及数据量,建议使用mysqldump工具导出MySQL数据,并确保导出文件格式兼容SQLite,检查CentOS系统是否已安装SQLite及必要的依赖工具,如sqlite3命令行客户端,若未安装,可通过yum install sqlite快速部署,备份原始MySQL数据以防迁移过程中出现意外。
导出MySQL数据
使用mysqldump命令导出MySQL数据时,需选择合适的参数。--no-create-info可避免导出表结构(因SQLite需重新定义),而--skip-opt和--complete-insert能确保数据格式兼容,具体命令如下:
mysqldump -u [用户名] -p[密码] --no-create-info --skip-opt --complete-insert [数据库名] > mysql_data.sql
导出后,检查文件内容,确保数据完整且格式正确,若包含特殊字符或复杂类型,需提前处理,避免后续解析错误。
转换数据格式
SQLite不支持MySQL的部分数据类型(如ENUM、SET),因此需手动调整SQL语句,将MySQL的INT(11)转为SQLite的INTEGER,VARCHAR转为TEXT,可使用文本编辑器或脚本批量替换,SQLite主键需定义为INTEGER PRIMARY KEY AUTOINCREMENT,需检查并修改表结构定义。
创建SQLite数据库
使用sqlite3命令创建新的数据库文件:

sqlite3 new_database.db
进入SQLite交互环境后,先创建表结构,若表结构复杂,可从MySQL导出DDL语句并简化后导入。
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
);
确保所有表结构定义正确后,退出SQLite环境。
导入数据到SQLite
将转换后的数据文件导入SQLite,可通过以下方式:
- 使用
.import命令:需确保数据为CSV格式,且列数与表结构匹配。 - 使用
.read命令:直接执行转换后的SQL文件,若数据量大,建议分批导入以避免超时。
sqlite3 new_database.db ".read mysql_data.sql"
导入过程中,若遇语法错误,需检查并修正SQL语句,SQLite对大小写敏感,需确保表名和列名一致。
验证数据完整性
导入完成后,对比MySQL和SQLite的数据条数及关键记录,使用SELECT COUNT(*)统计表记录数,或随机抽查数据验证一致性,若发现数据缺失或格式错误,需重新检查转换步骤并修正。

常见问题处理
- 字符编码问题:若MySQL使用
utf8mb4,SQLite需确保数据库创建时设置PRAGMA encoding = "UTF-8"。 - 自增主键冲突:SQLite的
AUTOINCREMENT与MySQL的AUTO_INCREMENT行为略有不同,需确保导入时无重复ID。
相关问答FAQs
Q1: 迁移过程中遇到“near syntax error”如何解决?
A: 通常是因为SQL语句不符合SQLite语法,需检查数据类型转换是否正确(如将datetime转为TEXT或INTEGER),并确保字符串用单引号包裹,使用sqlite3的.schema命令查看表结构,对比修正SQL。
Q2: 如何处理大型数据库的迁移?
A: 对于大数据量,可分批导出和导入,按表导出MySQL数据,逐个导入SQLite;或使用编程语言(如Python)编写脚本,分块读取和写入数据,避免内存溢出,关闭SQLite的journal_mode和synchronous可提升导入速度,但需在完成后恢复设置以保证数据安全。