手头有一个小项目,线上是 SQLite 数据库,本地开发环境为了管理方便用的是 MySQL 数据库。有时为了验证线上的一些数据问题,想要把线上的数据同步到本地来,而后导入到 MySQL 中。原本觉得很简单的事情,实际仍是花了些时间。mysql
完整的过程主要分三步:sql
这一步很简单,用 scp
命令能够解决文件的下载。导出成 SQL 文件也只须要使用下面的命令:数据库
sqlite3 database.sqlite .dump > sqlite_dump.sql
database.sqlite
是下载的 SQLite 数据库名称,sqlite_dump.sql
就是导出后的 SQL 格式数据文件。code
SQLite 导出的 SQL 文件是没法直接在 MySQL 中使用的,须要对一些差别的语法进行转换。主要的差别点以下:sqlite
BEGIN TRANSACTION
, COMMIT
, sqlite_sequence
。varchar not null
,这种在 MySQL 中执行会报错。""
,但 MySQL 用的是上引号: `
`。t
和 f
表达布尔值, MySQL 用的是 1
和 0
。AUTOINCREMENT
, MySQL 是 AUTO_INCREMENT
。转换这一步就是最耗时的了,网上搜了几个现成的转化代码,结果转换后都没法直接使用。只能本身一个一个的解决。索引
经过第二步的转换后,就能够直接用 mysql
命令来导入 SQL 数据了。命令格式以下:开发
mysql -uroot -p123456 db_name < sqlite_dump.sql
db_name
就是要在 MySQL 中要导入的数据表名称。同步