Nhận chỉ báo tiến trình khi nhập cơ sở dữ liệu MySQL


21

Tôi thường nhập cơ sở dữ liệu MySQL và điều này có thể mất một lúc. Không có chỉ số tiến bộ nào. Ai đó có thể được hiển thị, bằng cách nào đó? Bản ghi được nhập, MB đã nhập hoặc bảng đã nhập ... mọi thứ đều tốt hơn là chỉ chờ đợi. Có ai có ý kiến ​​gì không?

Tôi sử dụng lệnh này:

mysql -uuser -p -hhost database < largefile.sql

Các tệp có dung lượng từ 40-300 MB và máy chủ lưu trữ nằm trong mạng cục bộ.



@sr_ Tôi nghĩ pvchính xác là những gì người hỏi tìm kiếm. Tôi vừa cài đặt nó trên CentOS thông qua rpmforge. Nếu được cung cấp thông số kích thước, nó thậm chí sẽ hiển thị ETA.
Nils

pvđã thực sự lừa Nếu ai đó có thể làm cho câu trả lời này, tôi có thể chấp nhận điều này!
Phục hồi Monica

Câu trả lời:


31

Có một công cụ hay pv

# On Ubuntu/Debian system
$ sudo apt-get install pv

# On Redhat/CentOS
$ sudo yum install pv

sau đó, ví dụ bạn có thể sử dụng nó như thế này

$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname

Vui lòng kiểm tra CẬP NHẬT 2 cho phiên bản mới nhất của tôi

ps: kiểm tra blog này http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

CẬP NHẬT: có vẻ như liên kết ở trên bị hỏng nhưng tôi tìm thấy cùng một bài viết ở đây http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

CẬP NHẬT 2: Giải pháp thậm chí tốt hơn với thanh tiến trình FULL. Để làm điều đó bạn cần sử dụng 2 pvtùy chọn xây dựng . Một là --progresschỉ ra thanh tiến trình và thứ hai là --sizecho biết pvtệp tổng thể lớn đến mức nào.

pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES

.. vấn đề là với .gzkích thước tập tin gốc. Bạn cần bằng cách nào đó lấy thông tin kích thước tệp gốc được giải nén mà không tự giải nén nó, nếu không bạn sẽ mất thời gian quý báu để giải nén tệp này hai lần (lần đầu tiên pvvà lần thứ hai zcat). Nhưng may mắn thay, bạn có gzip -ltùy chọn chứa thông tin không nén về tệp được nén của chúng tôi. Thật không may bạn có nó ở định dạng bảng vì vậy bạn cần giải nén trước khi có thể sử dụng nó. Tất cả cùng nhau có thể được nhìn thấy dưới đây:

gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'

Uff .. vì vậy điều cuối cùng bạn cần làm chỉ là kết hợp tất cả lại với nhau.

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname

Để làm cho nó thậm chí còn đẹp hơn, bạn có thể thêm progres NAME như thế này

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass dbname

Kết quả cuối cùng:

Importing.. : [===========================================>] 100%

CẬP NHẬT 3: Để sử dụng nhanh chóng tạo chức năng tùy chỉnh.

mysql_import() {
  zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass $1
}

sử dụng:

mysql_import dbname /path/to/our/database.sql.gz

Nếu bạn không biết đặt nó ở đâu, hãy đọc câu trả lời này: /unix//a/106606/20056

Bạn có thể thêm các chức năng giữa các bí danh. Vì vậy, bạn có thể sử dụng ~/.bash_aliasestập tin ví dụ .


điều này thật tuyệt.
dave

1
Một lớp lót có kết quả tốt hơn là đây có thể là:pv --progress --name 'DB Import in progress' -tea /path/to/our/database.sql.gz | zcat | mysql -h db_host -u db_user -pdb_password db_name
Denis Pitzalis

16

Sao lại phức tạp thế?

Điều này hoạt động tốt:

pv dump.sql.gz | zcat | mysql -u user -ppasswd database

Đơn giản và sạch sẽ hơn nhiều!
donquixote

7

Tôi luôn nhập cơ sở dữ liệu từ shell MySql. Nó không cung cấp chỉ báo tiến trình, nhưng nó (nhanh chóng) cuộn các hành động mà nó đang thực hiện để tôi biết nó đang hoạt động.

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.