mysql - 在同一台服务器上复制整个数据库?

标签 mysql mariadb

我们正在运行一项服务,必须为每个新站点设置一个新数据库。数据库完全相同,因此我们可以简单地从备份文件转储或从同一服务器的示例数据库克隆(仅出于克隆目的而创建,不会运行任何事务,因此不必担心损坏数据)。数据库本身大概有100个表,还有一些数据,导入需要1-2分钟左右,速度太慢了。

我正在尝试找到一种尽快完成此操作的方法,首先想到的是复制示例数据库 data_dir 中的文件,但似乎我还需要以某种方式编辑表列表或mysql 将无法读取我的新数据库的表,尽管它仍然显示它们。

最佳答案

您复制数据库的方式是错误的,如果做得正确的话,速度会快得多。

以下是复制数据库的方法:

create database new_database;
create table new_database.table_one select * from source_database.table_one;
create table new_database.table_two select * from source_database.table_two;
create table new_database.table_three select * from source_database.table_three;
...

我刚刚做了一个性能测试,在 700 万个表行中复制 750MB 的数据需要 81 秒。想必您的数据库比这个小?

我认为你不会更快地找到任何东西。您可以做的一件事是已经有一个备用数据库队列,可供随时提取和使用。因此,您根本不需要创建新数据库,只需从可用数据库队列中重命名现有数据库即可。并运行一个 cron 作业以确保队列永远不会空。

关于mysql - 在同一台服务器上复制整个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23052197/

相关文章:

mysql - 结果集是 1 条记录的对象,多条记录的数组?

Mysql存储过程将表的特定列数据选择到临时表中

mysql - 我无法执行我的存储过程,我的查询一直在运行

mysql - NodeJS + ExpressJS 管理与 mysql 数据库连接的正确方法

MySQL 在单行中获取最小和最大列的匹配行

MySQL 查询按日期排序未按需要执行

php - 比较 SQL 和 PHP 中的 float

MySQL LOAD DATA IN FILE 未插入所有值

java - 本地日期被保存为 utcin est 区域 - MariaDB

mysql - 在 mariadb/mysqldb 中更新插入