2012-06-10 55 views

Trả lời

47

Tệp này là tệp SQL được nén (nén), gần như chắc chắn là tệp văn bản thuần túy có đuôi .sql làm phần mở rộng của tệp. Điều đầu tiên bạn cần làm là sao chép các tập tin đến máy chủ cơ sở dữ liệu của bạn thông qua scp .. I think PuTTY's is pscp.exe

# Copy it to the server via pscp 
C:\> pscp.exe numbers.sql.gz [email protected]:/home/user 

Sau đó, SSH vào máy chủ của bạn và giải nén các tập tin với gunzip

[email protected]$ gunzip numbers.sql.gz 
[email protected]$ ls 

numbers.sql 

Cuối cùng, nhập nó vào cơ sở dữ liệu MySQL của bạn bằng cách sử dụng toán tử chuyển hướng < đầu vào:

[email protected]$ mysql -u mysqluser -p < numbers.sql 

Nếu file numbers.sql không tạo ra một cơ sở dữ liệu nhưng exp ECTS một có mặt đã có, bạn sẽ cần phải bao gồm các cơ sở dữ liệu trong lệnh cũng như:

[email protected]$ mysql -u mysqluser -p databasename < numbers.sql 

Nếu bạn có khả năng kết nối trực tiếp đến máy chủ MySQL của bạn từ bên ngoài, sau đó bạn có thể sử dụng một khách hàng MySQL địa phương thay vì phải sao chép và SSH. Trong trường hợp đó, bạn chỉ cần một tiện ích có thể giải nén các tệp .gz trên Windows. Tôi tin rằng 7zip làm như vậy, hoặc bạn có thể có được gzip/gunzip binaries cho Windows.

43

Nếu không có một bước riêng biệt để giải nén lưu trữ:

# import gzipped-mysql dump 
gunzip < DUMP_FILE.sql.gz | mysql --user=DB_USER --password DB_NAME 

tôi sử dụng đoạn mã trên để tái nhập khẩu mysqldump-sao lưu, và sau đây để sao lưu nó lên.

# mysqldump and gzip (-9 ≃ highest compression) 
mysqldump --user=DB_USER --password DB_NAME | gzip -9 > DUMP_FILE.sql.gz 
+2

@Wasim Đã lùi về phiên bản mà không cần 'PASSWORD' trong lệnh. Người ta không nên chỉ định mật khẩu trực tiếp trên dòng lệnh, trừ khi nó là hoàn toàn cần thiết. Trên hầu hết các hệ thống, các lệnh shell được lưu trữ trong một tệp lịch sử như '.bash_history' và do đó các mật khẩu được chỉ định trực tiếp trong lệnh cũng được lưu trữ trong tệp lịch sử đó. Nếu bạn bỏ mật khẩu, MySQL sẽ nhắc nó một cách tương tác. Nếu bạn thực sự cần phải bao gồm các mật khẩu trong lệnh, bạn nên thụt lề lệnh bằng ký tự khoảng trắng, điều này ngăn cản lệnh được ghi lại trong lịch sử trình bao. – feeela

3

Đối với người trực tuyến, trên linux hoặc cygwin, bạn cần thực hiện xác thực khóa công khai trên máy chủ, nếu không ssh sẽ yêu cầu mật khẩu.


gunzip -c numbers.sql.gz | ssh [email protected] mysql --user=user_name --password=your_password db_name 

Hoặc làm cổng chuyển tiếp và kết nối với mysql từ xa sử dụng một kết nối "địa phương":

ssh -L some_port:host:local_mysql_port [email protected]

sau đó làm kết nối mysql trên máy tính địa phương của bạn để localhost: some_port.

Chuyển tiếp cổng cũng sẽ hoạt động từ putty, với tùy chọn -L tương tự hoặc bạn có thể định cấu hình từ bảng cài đặt, ở đâu đó trên cây.

+0

Oneliner là tốt đẹp nhưng kết quả trong mật khẩu cơ sở dữ liệu hiển thị trong lịch sử lệnh của bạn mà không phải là an toàn nói chung. –

96

Đăng nhập vào máy chủ của bạn bằng chương trình vỏ như putty.

Gõ lệnh sau trên dòng lệnh

zcat DB_File_Name.sql.gz | mysql -u username -p Target_DB_Name 

nơi

DB_File_Name.sql.gz = đường dẫn đầy đủ của sql.tập tin gz được nhập khẩu

username = bạn mysql username

Target_DB_Name = tên cơ sở dữ liệu mà bạn muốn nhập cơ sở dữ liệu

Khi bạn nhấn enter trong dòng lệnh, nó sẽ nhắc cho mật khẩu. Nhập mật khẩu MySQL của bạn.

Bạn đã hoàn tất!

+11

gzcat, thực sự. – thomaspaulb

+9

Đây là câu trả lời hay nhất nếu bạn muốn tránh lãng phí không gian đĩa (và thời gian). – hafichuk

+0

cho điểm (.gz và không phải sql) – onalbi

0

Nếu bạn có nhiều cơ sở dữ liệu mà nó nhập và các bãi chứa lớn (tôi thường làm việc với các bãi chứa Gzip được multigigabyte).

Có một cách để làm điều đó bên trong mysql.

$ mkdir databases 
$ cd databases 
$ scp [email protected]:*.sql.gz . # Here you would just use putty to copy into this dir. 
$ mkfifo src 
$ mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 1 
Server version: 5.5.41-0 
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. 
Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> create database db1; 
mysql> \! (zcat db1.sql.gz > src &) 
mysql> source src 
. 
. 
mysql> create database db2; 
mysql> \! (zcat db2.sql.gz > src &) 
mysql> source src 

Lợi thế duy nhất này có hơn

zcat db1.sql.gz | mysql -u root -p 

là bạn có thể dễ dàng làm nhiều mà không cần nhập mật khẩu nhiều lần.

0

Nếu bạn có scp thì:

Để di chuyển tập tin của bạn từ địa phương để từ xa:

$scp /home/user/file.gz [email protected]:path/to/file.gz 

Để di chuyển tập tin của bạn từ xa đến địa phương:

$scp [email protected]:path/to/file.gz /home/user/file.gz 

Để xuất mysql của bạn tệp mà không cần đăng nhập vào hệ thống từ xa:

$mysqldump -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p databasename | gzip -9 > databasename.sql.gz 

Để nhập mysql tập tin withoug đăng nhập của bạn vào hệ thống từ xa:

$gunzip < databasename.sql.gz | mysql -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p 

Lưu ý: Hãy chắc chắn rằng bạn có quyền truy cập mạng vào ipaddress của máy chủ từ xa

Để kiểm tra truy cập mạng:

$ping ipaddressofremotehost 
0

Nếu kết xuất mysql là tệp .gz, bạn cần phải giải nén tệp để giải nén tệp bằng cách nhập $ gunzip mysqldump.sql.gz

Điều này sẽ giải nén tệp .gz và sẽ chỉ lưu trữ mysqldump.sql trong cùng một vị trí.

Gõ lệnh sau để import sql tập tin dữ liệu:

$ mysql -u username -p -h localhost thử nghiệm cơ sở dữ liệu < mysqldump.sql mật khẩu: _

Các vấn đề liên quan