暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译] 从 SQLite 迁移到 MySQL

原创 刺史武都 3天前
20

什么是SQLite

SQLite是一种开源关系型数据库管理系统(RDBMS),它与其他大多数基于客户端-服务器模型构建的数据库管理系统不同,因为它是一种无服务器的嵌入式数据库。这意味着SQLite数据库在访问数据的软件内部运行,无需单独的服务器。由于这种架构,SQLite是一个高度可靠、高效的系统,非常适合在低内存环境中运行。

SQLite的一个主要优势是它的跨平台兼容性,允许它在各种现代操作系统上运行。作为一个包含在C库中的RDBMS,SQLite可以被任何能够连接到C语言编写的外部库的应用程序使用。例如,它非常适合用于开发嵌入式软件,如移动电话、游戏机、相机和机顶盒等数字设备中的软件。此外,SQLite还可以作为应用程序处理数据的临时数据集。

此外,SQLite的简单性和多功能性使其成为大多数处理低到中等流量HTTP请求的网站的绝佳数据库引擎。由于其易于使用和设置,它还被广泛用于教育机构的培训和学习目的。

在不需要全面用户管理功能的小型数据库的情况下,SQLite是一个合适的选择。然而,如果需要与其他用户协作或需要可扩展性和定制化,则可能不是最佳选择。

另一方面,MySQL可以支持多个用户,并以表格形式处理大量数据。随着您的业务增长和数据库扩展,SQLite可能不再满足您的需求。因此,如果您处理大量的数据,并且正在寻找一个功能强大的DBMS,拥有丰富的高级功能,那么从SQLite迁移到MySQL是合理的。

介绍MySQL

MySQL是一种非常流行的开源关系型数据库管理系统,根据GNU许可证分发。它支持大多数用于定义、查询和更新数据库的标准结构化查询语言(SQL)。与其他流行的DBMS相比,MySQL更快、更具可扩展性,并且更易于使用。

它遵循客户端-服务器模型,数据库在服务器上运行,数据通过网络由客户端和工作站访问。服务器然后通过返回请求的输出来响应客户端的GUI请求。MySQL支持多种操作系统和多种编程语言,如PHP、PERL、JAVA、C++、C等。

许多组织和公司广泛使用MySQL进行Web开发,因为它是LAMP堆栈的关键部分,支持PHP和Perl,便于构建网站和Web应用程序。

此外,MySQL的灵活性允许数据库专业人员根据不同的目的配置数据库服务器,从在线商店到商业智能和数据分析。凭借其高速加载能力、独特的内存缓存和其他性能增强功能,MySQL可以满足企业级数据仓库的所有性能要求。

我是否需要迁移到MySQL?

SQLite和MySQL都有各自的优缺点,因此重要的是评估迁移的好处是否值得付出努力。SQLite是小型或中型便携式软件(如移动应用或游戏)中嵌入式数据库的绝佳选择。然而,不建议使用SQLite用于以下情况:

大量数据。SQLite的官方网站建议不要将其用于超过1TB的数据库。
同时数据访问。由于SQLite直接向磁盘读取和写入数据,它限制了并行读取,并且只允许一次写入操作。
另一方面,MySQL非常适合网站和Web应用程序,并且由于支持复制和自动分片(在商业MySQL产品中可用),可以实现可扩展性。同时,MySQL并不完全符合SQL标准,这可能是对于需要至少接近完全SQL合规性的项目的一个阻碍因素。

迁移策略:SQLite3 + MySQL

从SQLite迁移到MySQL最流行且最直接的方法是基于SQLite3和MySQL命令行工具的组合:

1.将SQLite数据库导出为创建表和复制数据的SQL语句。

sqlite3 {SQLite数据库} .dump > {输出脚本文件}
复制

2.如果需要,创建目标MySQL数据库。

echo "CREATE DATABASE {MySQL数据库}" | mysql -u {MySQL用户} -p
复制

3.修改脚本文件,使其符合MySQL语法。

  • 删除所有以PRAGMA、BEGIN TRANSACTION和COMMIT开头的行
  • 将可能包围数据库对象名称的引号和’[’、’]‘符号替换为MySQL等效的’`’
  • 将AUTOINCREMENT替换为AUTO_INCREMENT
  • 将布尔值’t’和’f’转换为1和0
  • 将未指定长度的VARCHAR类型转换为TEXT

4.将结果脚本文件导入到MySQL数据库中。

mysql -u {MySQL用户} -p {MySQL数据库} < {脚本文件}
复制

迁移策略:Python/Django脚本

可以通过Perl或Python脚本从SQLite迁移到MySQL。然而,这种方法相当复杂,可能需要Perl或Python编程技能。

以下是使用Python/Django将SQLite数据库迁移到MySQL的示例:

1.在settings.py配置文件中定义数据库,以告知Django将使用的数据库服务器。

    'sqlite': {
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': 'sqlite3.db',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },
    'mysql': {
        'NAME': 'mysql_database',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'mysql_password',
        'HOST': 'mysql_host',
        'PORT': '3306'
    }
}

复制

2.编写一个Python脚本,如下所示:

objlist = ModelObject.objects.using('sqlite').all()
for obj in objlist:
    obj.save(using='mysql')
复制

提供的代码显然只是一个方法的演示,可能不足以完成完整的SQLite到MySQL数据库迁移。在这种情况下,可以考虑使用商业第三方解决方案来自动化和简化整个迁移过程。

迁移策略:专用转换器

有一些商业工具结合了用户友好的图形界面和强大的功能,可以以完全自动化的模式将数据库从SQLite迁移到MySQL。使用此类软件进行迁移,用户不需要具备任何数据库管理或开发技能。高质量的SQLite到MySQL迁移工具必须具备的关键功能包括:

  • 支持源数据库和目标数据库的适当版本
  • 支持MySQL的DBaaS变体(如Azure for MySQL和Amazon RDS)是一个额外的优势
  • 迁移主要数据库条目——架构、数据、索引以及表之间的关系(外键)
  • 通过主键或唯一索引将目标数据库与SQLite数据合并和同步
  • 命令行支持是一个额外的优势,适用于脚本和计划目的

结论

本文介绍了SQLite和MySQL,这两个开源关系型数据库管理系统,每个DBMS都有其适用范围。文章进一步探讨了从SQLite迁移到MySQL、MariaDB或Percona的三种方法,突出了每种方法的优缺点。

原文地址:https://dzone.com/articles/migrate-from-sqlite-to-mysql
原文作者: Vlad Bilyak

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 什么是SQLite
  • 介绍MySQL
  • 我是否需要迁移到MySQL?
  • 迁移策略:SQLite3 + MySQL
  • 迁移策略:Python/Django脚本
  • 迁移策略:专用转换器
  • 结论