将MySQL数据库导出到SQLite数据库

Dev*_*evi 72 mysql database sqlite

请帮我将MySQL数据库导出到SQLite数据库中.

geo*_*sey 64

在Github上有一个很棒的Linux shell脚本,可以将Mysql转换为Sqlite3文件.您需要在服务器上安装mysqldump和sqlite3.效果很好.

  • https://github.com/dumblob/mysql2sqlite现在是官方版本.`2016-05-11 17:32 GMT + 2 @esperlu宣布麻省理工学院为合格许可证(也追溯)并且原来的要点已弃用. (3认同)
  • 作者anandoned脚本,但在这个分支继续工作:https://github.com/dumblob/mysql2sqlite (2认同)
  • 感谢 ilyaigpetrov 和 @Li-aungYip,我已经更新了链接 (2认同)

Geo*_*her 8

由@quassy 编辑的@user2111698 的答案按承诺工作。由于我经常这样做,因此我将他们的指令放入 bash 脚本中:

#!/bin/bash

mysql_host=localhost
mysql_user=george
mysql_dbname=database
sqlite3_dbname=database.sqlite3

# dump the mysql database to a txt file
mysqldump \
  --skip-create-options \
  --compatible=ansi \
  --skip-extended-insert \
  --compact \
  --single-transaction \
  -h$mysql_host \
  -u$mysql_user \
  -p $mysql_dbname \
  > /tmp/localdb.txt

# remove lines mentioning "PRIMARY KEY" or "KEY"
cat /tmp/localdb.txt \
  | grep -v "PRIMARY KEY" \
  | grep -v KEY \
  > /tmp/localdb.txt.1

# mysqldump leaves trailing commas before closing parentheses  
perl -0pe 's/,\n\)/\)/g' /tmp/localdb.txt.1 > /tmp/localdb.txt.2

# change all \' to ''
sed -e 's/\\'\''/'\'''\''/g' /tmp/localdb.txt.2 > /tmp/localdb.txt.3

if [ -e $sqlite3_dbname ]; then
    mv $sqlite3_dbname $sqlite3_dbname.bak
fi
sqlite3 $sqlite3_dbname < /tmp/localdb.txt.3
Run Code Online (Sandbox Code Playgroud)

可以在https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d找到带有详细评论的要点


Orb*_*bit -18

导出数据

  mysqldump database > database.sql
Run Code Online (Sandbox Code Playgroud)

并导入数据

  sqlite3 database < database.sql
Run Code Online (Sandbox Code Playgroud)

您可能需要 -u (用户)和 -p (密码)选项

  • 这实际上可以与 mysql 中可用的差异和功能一起使用,而不是在 sqlite 中使用吗? (9认同)
  • 这是行不通的。MySQL 和 SQLite 之间的索引、表描述、二进制数据转义序列、锁定机制,可能还有其他内容都是不同的。 (5认同)
  • 这是行不通的。请在发布您首先想到的任何内容之前测试解决方案...... (4认同)