簡體   English   中英

如何使用 docker 將大型或中等大小的 SQL 轉儲導入 Mysql/MariaDB

[英]How to Import large or moderate size SQL dump into Mysql/MariaDB using docker

我是 Docker 的新手,想創建 MariaDB 容器。 在啟動容器時,我想導入一個大小為 50MB 的 SQL 轉儲。 我正在使用以下 Docker 撰寫文件,該文件目前需要超過 1 小時才能導入 SQL 轉儲。

services:
  mariadb:
    image: mariadb:10.1
    container_name: mariadb
    volumes:
      - ./mountedVolume/dbvolume:/var/lib/mysql
      - ./webAppDatabase/dctdatabase/appDB.sql:/docker-entrypoint-initdb.d/appDB.sql
    command: --max_allowed_packet=500M      
    environment:
      MYSQL_ROOT_PASSWORD: root123
    ports:
      - "3306:3306"

在導入 SQL 轉儲之前,我嘗試使用以下 Mysql 設置

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

導入 SQL 轉儲后,我已重置值

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

但上述設置沒有幫助。 我也使用了鏈接上發布的解決方案,但沒有幫助。

我已經嘗試將 SQL 文件分成更小的塊並將其導入 MariaDB 容器,但它需要相同的時間

我只是想在更短的時間內導入約 50MB 的 SQL 轉儲,我已經嘗試了互聯網上所有可能的方法,但沒有一個解決方案可以幫助我縮短時間。 請讓我知道是否有解決方法。

經過長時間的搜索,我得到了解決方案。 聽到我將解釋 3 種不同的方法來使用性能統計導入/導出Mysql/MariaDB 數據庫。

導入 SQL 轉儲的傳統方式需要大量時間來導入數據,因為它必須先創建表,然后按順序導入數據。但仍然可以通過將 CREATE/INSERT 語句分隔在兩個不同的文件中來提高性能並執行它。 它只會比傳統的導入方式提高一點性能。

為了提高更多性能,我們可以 go 以gz格式導入/導出SQL 轉儲。!!

例子:

導出數據庫:

mysqldump -u [user] -p [DATA_BASE_NAME] | gzip > [SQL_FILE_DUMP.sql.gz]   

導入數據庫:

gunzip < [SQL_FILE_DUMP.sql.gz]  | mysql -u [user] -p[password] [DATA_BASE_NAME]

為了提高導入/導出性能,我們應該使用 go 來獲取/var/lib/mysql目錄的 Mysql/MariaDB 快照。!!。

[注意:由於我使用的是InnoDB表,因此我沒有嘗試使用其他數據庫引擎,我在其中 一篇博客中找到了解決方案]

導出數據庫:

docker run --rm --volumes-from mariadb carinamarina/backup backup --source /var/lib/mysql/ --stdout --zip > db-data-volume.tar.gz

導入數據庫:

docker run --rm --interactive --volumes-from mariadb carinamarina/backup restore --destination /var/lib/mysql/ --stdin --zip < db-data-volume.tar.gz

導入 ~50mb 的 Mysql/MariaDB 數據的測試用例統計數據:

___Method_______________Size_____________Time Taken in minits_____________

Traditional way         50mb                  50 min

gzip / .gz              50mb                  29 min        

/var/lib/mysql/         50mb                  0.2 min or 20 seconds  

[注:測試用例在 Ubuntu 14.04、Intel® Core™ i5-3470 CPU 和 4gb 內存中執行。 可以在高端系統中提高性能]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM