AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 188496
Accepted
amaster
amaster
Asked: 2017-10-15 16:09:01 +0800 CST2017-10-15 16:09:01 +0800 CST 2017-10-15 16:09:01 +0800 CST

在本地复制数据库结构

  • 772

在我使用 PHP 和 MySQL 的 Web 应用程序设置中,我为每个用户的私有数据使用单独的数据库。所以本质上,每个经过身份验证的用户只能访问两个不同的数据库 myappdb_public 和 myappdb_user_###。用户凭据将保存在单独的数据库 myappdb_creds 中。此设置背后的想法是在维护共享数据资源的同时提高私有数据的安全性。

  1. 有没有办法从另一个数据库结构设置的“模板”创建新数据库。
  2. 有没有办法在更新模板时更新所有“子”数据库结构?

我以前使用过复制,但那是一个完全不同的设置,不确定是否有办法只在同一本地服务器上的多个数据库之间复制结构。

mysql database-design
  • 1 1 个回答
  • 161 Views

1 个回答

  • Voted
  1. Best Answer
    Basil Bourque
    2017-10-15T19:23:52+08:002017-10-15T19:23:52+08:00

    复制

    “数据库复制”是指将对一个数据库所做的任何传入插入/更新/删除语句动态复制到另一个相同的数据库。主数据库和辅助数据库被认为是“副本”,因为它们始终包含由相同历史产生的相同数据,尽管辅助数据库可能会延迟一小段时间。辅助可用于只读查询代替主要。在故障转移的情况下,次要可能会转换为主要。

    移民

    您正在寻找的是松散地称为 “数据库迁移”,也称为架构迁移。这里的想法是重现与另一个数据库相同的结构 ( DDL )。但是每个生成的数据库都是独立于其他数据库的,每个数据库中都存储着不同用户的数据。

    • 一个典型的例子是多租户。
    • 另一种用途可能是垂直市场应用程序的一部分,该应用程序被许可给不同的客户,在每次新销售中,您需要按照应用程序的预期以特定配置建立新的数据库。

    迁移工具

    开发人员和 DBA 过去常常手动执行此迁移工作,设计他们自己的临时解决方案或习惯。幸运的是,我们现在可以选择一些工具来帮助完成这项繁琐但至关重要的工作。

    飞路

    我最喜欢的工具是Flyway。内置 Java,但包装为命令行可执行文件,因此您可以从脚本或其他工具中使用。

    Flyway 运行一系列 SQL 脚本,以及可选的您可能编写的某些 Java 库。执行顺序由一定的文件命名方案决定。

    在数据库中自动创建一个表来跟踪脚本运行。当遇到新脚本时,Flyway 会检测到它们并适当地运行那些尚未应用于该特定数据库的脚本。

    Flyway 或其他此类工具不仅在生产中非常有用,而且在测试和开发中也非常有用。您可以自动重新创建一个一次性数据库,甚至可以将其恢复到其架构演变历史中的任何特定点。

    任何考虑 Flyway 的人也应该考虑另一个非常相似的产品:Liquibase。

    也存在其他选择,例如商业工具Redgate。

    模板

    一些数据库(例如Postgres )提供模板,您可以在其中创建一些表和索引等。之后,您可以创建一个全新的数据库,其初始状态是从该状态复制而来的。

    事实上,Postgres 总是这样工作的,当你在没有明确指定任何其他模板的情况下请求数据库时,默认情况下透明地使用template0和数据库。template1

    模板只解决起源问题,开始。您以后几乎肯定会改进您的数据库。您将添加或删除表、列、索引等。您可能需要运行代码来整体转换或更新现有数据。为此,您需要使用迁移工具,因为模板在初始生成后无法帮助您。所以在我看来,我不会为定义模板而烦恼,而是使用迁移脚本进行所有初始设置。

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve