如何将SQL数据库拆分为多个文件(以后要重组)



我在本地访问一个相当数据的WordPress网站。我已经准备好推动生产,但数据库是18千兆字节(仅一张表,一个.ibd文件)。(是10.1.21-MariaDB

问题是,我的上传速度相当可怕。因此,我真的宁愿连续2天上传文件,只是在99%以99%的错误中重新开始。

那么,是否有一种方法可以将数据库分成可管理的块(例如1 GB),然后我可以一次上传一个,然后重新组合回到服务器上的原始表单(完整的工作数据库)?

不要切碎。使用支持压缩的rsync,如果您的连接退出,将其关闭的位置接收,最重要的是对于低频带宽度情况,调节其上传的速度。

例如:

rsync -avzP --bwlimit=1000 db/ remote:db/

其中db/是要复制的数据库目录,而remote是目标服务器。您需要非常仔细地阅读有关如何设置源和目的地路径的信息

要记住的另一件事是,您可能要使用mysqldump这样的工具来提取数据。MySQL数据目录包含许多额外的垃圾,这不一定很重要,可以重建。这包括交易期刊,该期刊可能会变得很大,并且数据上的索引可以轻松地以大小来蚀数据。

压缩的.sql文件通常是实际MySQL数据目录的大小的一小部分,即使它包含所有数据。这只是一个更紧凑的表示。请记住,数据库将事物存储在一种用于阅读和写作的方法的方法中,而不是为存储进行优化。

您还可以使用xtrabackup之类的工具,该工具可以创建InnoDB支持的数据库的一致快照。复制运行数据库的数据可能会大大问题,这些文件正在不断修改。xtrabackup工具创建了经过一致性测试的快照,它可以做的事情,因为它具有工作嵌入的InnoDB引擎,用于检查数据文件并根据需要在副本中操纵其状态。

使用OUTFILE创建文本文件如下:

示例:

SELECT customer_id, firstname, surname INTO OUTFILE '/exportdata/customers.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY 'n'
  FROM customers;

使用MySQL加载器将数据加载到表中:

LOAD DATA INFILE '/tmp/expense_upload.csv'
INTO TABLE expenses (ss_id, user_id, cost, context, date);

最新更新