nhập tệp SQL lớn phpmyadmin


12

Tôi đang cố gắng nhập tệp SQL này bằng phpmyadmin và nhận được thông báo này

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

Tôi phải làm gì để nhập hàng này?

Câu trả lời:


12

Giả sử bạn không thể tăng thêm kích thước bộ nhớ thì có một vài lựa chọn.

  • Nếu bạn không quen thuộc với dòng lệnh và bạn thực sự muốn gắn bó với kiểu nhập GUI thì bạn có thể sử dụng BigDump ( http://www.ozerov.de/bigdump/ ). Tôi đã sử dụng nó một lần nhưng đã được một lúc. Từ những gì tôi nhớ, bạn sẽ tải xuống một tệp có tên bigdump.php (với một số hướng dẫn) và đưa nó vào máy chủ web của bạn trong thư mục chứa tệp kết xuất MySQL DB quá lớn để nhập qua PHPMYADMIN. Sau đó điều hướng đến nó bằng trình duyệt của bạn - một cái gì đó như http://your-website.com/bigdump.php .

  • Nếu bạn quen thuộc với dòng lệnh và sử dụng hệ thống dựa trên Linux thì bạn có thể sử dụng mã như thế này:

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

Cơ sở dữ liệu và người dùng (có đặc quyền cho cơ sở dữ liệu) sẽ cần tồn tại trước khi chạy lệnh này. Lưu ý tôi đã sao chép lệnh trên từ một nguồn khác. Tôi luôn luôn thực hiện các bãi chứa của mình và khôi phục như thế này: DUMP: mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz RESTORE:gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • Cuối cùng, và đau đớn nhất, bạn có thể chọn đổ từng bảng hoặc nhóm bảng thành các bãi nhỏ đủ nhỏ. Sau đó khôi phục từng bãi rác riêng lẻ này qua PHPMYADMIN.

Hướng dẫn FTP & RESTORE:

Tải xuống FileZilla tại đây: http://filezilla-project.org/doad.php?type=client

Thông thường, bạn có thể FTP vào máy chủ của mình (đặc biệt là máy chủ được chia sẻ) bằng cùng thông tin đăng nhập và mật khẩu bạn muốn cho SSH (bạn đăng nhập dòng lệnh). Chỉ cần đảm bảo thiết lập kết nối đến máy chủ của bạn đúng cách trong FileZilla.

Sau khi kết nối, đường dẫn mặc định của bạn có thể sẽ là thư mục $ HOME của bạn (trên các máy nix). Nếu bạn không có kế hoạch thực hiện nhiều FTP, chỉ cần bỏ những gì bạn muốn vào đó. Bạn luôn có thể di chuyển nó từ dòng lệnh.

Nếu bạn FTP một kết xuất MySQL vào thư mục $ HOME của bạn thì lệnh RESTORE cho DB có tên mydb và tệp kết xuất db có tên mydb.sql.gz (trong thư mục $ HOME) sẽ là:

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

nơi bạn rõ ràng sẽ cần thay đổi các giá trị DB_USER và DB_PASSWORD thành tên người dùng và mật khẩu bạn thiết lập cho DB.

Nhớ lại:

  • DB phải tồn tại (nhưng để trống) trước khi lệnh RESTORE được thực thi
  • DB_USER và DB_PASSWORD phải được thiết lập cho DB trước lệnh RESTORE (bạn có thể thực hiện việc này từ tab PHPMYADMIN - Đặc quyền)
  • Khi bạn thiết lập DB_USER từ PHPMYADMIN, nó sẽ mặc định chỉ cho phép DB_USER truy cập DB từ localhost (máy chủ DB được lưu trữ trên đó). Tôi cho rằng điều này tốt cho việc cấp tình huống của bạn. Khi bạn tham gia vào các DUMP và RESTORE tiên tiến hơn, bạn có thể muốn thực hiện nó từ một máy khác hoàn toàn không khó nhưng đòi hỏi một vài thông tin được cung cấp và DB_USER với các đặc quyền thích hợp.

FTP DB và RESTORE nó ... Từng bước

  1. Định vị tệp kết xuất MySQL đã nén trên máy tính để bàn của bạn (Ví dụ: C: \ Web \ DB \ Dumps \ mydb.sql.zip)
  2. Tải xuống và cài đặt FileZilla
  3. Trong FileZilla, đi đến File-> Trình quản lý trang và nhấp vào nút Trang web mới (góc phần tư phía dưới bên trái của GUI). Đặt máy chủ thành tên miền (Ví dụ: Dest.com) trên đó nằm trên máy chủ DESTINATION của bạn. Đặt Giao thức thành FTP hoặc SFTP (điều này phụ thuộc vào lưu trữ của bạn, hãy hỏi họ). Đặt Người dùng và Mật khẩu (Ví dụ: Người dùng = cấp, Mật khẩu = mật khẩu cấp) - nếu giao thức FTP là SFTP thì mọi bộ thông tin đăng nhập SSH hợp lệ sẽ hoạt động.
  4. (Trong FileZilla) Nhấp vào Kết nối (nút dưới cùng bên trái)
  5. (Trong FileZilla) Sau khi được kết nối với máy chủ từ xa (nên là máy chủ DESTINATION của bạn), hãy sử dụng phía bên trái của FileZilla để điều hướng đến thư mục chứa tệp kết xuất bạn nằm trong Bước 1. .
  6. (Trong FileZilla) Xác định vị trí trang web từ xa: nhãn trực tiếp ở bên phải của trang web địa phương :.
  7. (Trong FileZilla) Không có lý do kỹ thuật nào bạn không thể đặt DB DUMP vào thư mục mà FileZilla mở ra. Nó có thể sẽ mặc định cho thư mục $ HOME của bạn. Nếu bạn không có bất kỳ lý do nào để đặt DB Dump vào một thư mục cụ thể - chẳng hạn như cho mục đích tổ chức của riêng bạn - thì hãy để lại đường dẫn trên trang web Remote. Viết đường dẫn đó (Ví dụ Linux: / usr / Grant).
  8. .
  9. Trong PHPMYADMIN trên máy chủ DESTINATION của bạn, hãy tạo cơ sở dữ liệu mới (nhập mydb vào hộp văn bản Tạo cơ sở dữ liệu mới và Nhấp vào nút Tạo).
  10. (Trong PHPMYADMIN) Chọn mydb từ menu bên trái.
  11. (Trong PHPMYADMIN) Nhấp vào tab Đặc quyền (phía trên bên phải). Khi vào trang đó, nhấp vào Thêm người dùng mới.
  12. (Trong PHPMYADMIN-> Đặc quyền-> Thêm người dùng mới) Cung cấp tên người dùng (Ví dụ: mydb_grant) và mật khẩu (Ví dụ: mydb_password). Trong danh sách thả xuống Host, chọn Local. Đảm bảo rằng nút radio bên cạnh "Cấp tất cả các đặc quyền trên cơ sở dữ liệu" đã được chọn. Sau đó bấm Go (dưới cùng bên phải của màn hình).
  13. SSH vào máy chủ DESTINATION của bạn.
  14. (Trong thiết bị đầu cuối SSH của bạn) Điều hướng đến thư mục mà bạn đã ghi lại trong Bước 7. Sử dụng lệnh như - cd $HOMEhoặc cd /usr/grant. (Trên các máy Linux $ HOME là một biến môi trường sẽ bằng một cái gì đó như / usr / Grant.)
  15. (Trong thiết bị đầu cuối SSH của bạn) Thực hiện lệnh sau: gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(không có khoảng trắng giữa -p và mật khẩu vì đó là cách nó cần phải có, đó không phải là một lỗi đánh máy).

Khi lệnh cuối cùng hoàn thành DB của bạn đã được RESTORED. Tôi không khuyên bạn nên sử dụng người dùng DB và mật khẩu mà tôi đã cung cấp chỉ cần thay thế chúng bằng các lựa chọn an toàn hơn của riêng bạn.

DUMP và RESTORE trên các máy chủ khác nhau không có FTP

Nếu bạn muốn bỏ qua nội dung FTP và không ngại làm lại DUMP thì bạn có thể làm theo cách này:

  1. Đăng nhập vào máy chủ DESTINATION (nơi bạn muốn DB cư trú - chúng tôi sẽ gọi nó là Destination.com)
  2. Tạo DB, Người dùng và các đặc quyền thích hợp như đã đề cập ở trên trên máy chủ DESTINATION
  3. Đảm bảo các đặc quyền trên máy chủ SOURCE cho phép SOURCE_DB_USER truy cập DB từ xa - cho phép truy cập từ Dest.com hoặc từ% (% - mọi người và mọi nơi nếu họ có tên người dùng và mật khẩu phù hợp)
  4. Trên máy chủ DESTINATION chạy: mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gznơi source.com là máy chủ SOURCE (nơi DB hiện đang cư trú)
  5. Sau đó (trên máy chủ DESTINATION) chạy: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

Đó là tất cả những gì bạn cần làm để di chuyển DB từ máy chủ này sang máy chủ khác. Hãy cẩn thận là tôi chỉ từng làm điều này trên Ubuntu chuyên dụng của riêng tôi (với LAMP tiêu chuẩn) và các máy chủ VPS của Dreamhost (mà tôi tin là chạy CentOS nhưng tôi có thể sai).


3

Bạn có thể:

  • tăng memory_limit
  • tăng post_max_size
  • tăng max_execution_time
  • phải khởi động lại Apache sau khi làm tất cả điều này.
  • hoặc sử dụng bãi rác lớn

1

Tệp SQL của bạn có được nén không? Tôi gặp vấn đề này với tệp sql nén 6 MB. Tôi đã giải nén nó thành một tệp sql không nén 53 MB và nó đã hoạt động. Việc giải nén tệp kết xuất trong quá trình phải ăn hết bộ nhớ.


0

nếu bạn có quyền truy cập ssh vào máy chủ với mysql, hơn là bạn có thể đặt tệp có kết xuất mysql ở một nơi nào đó, hãy nhập bảng điều khiển mysql:

mysql -u myUser myDatabase

Hoặc nếu máy chủ mysql ở nơi khác ngoài localhost và cho phép kết nối không chỉ từ localhost hơn:

mysql -u myUser -h mysql.example.com myDatabase

Hơn bạn sẽ được yêu cầu nhập mật khẩu cho người dùng mysql của bạn. Bây giờ bạn trong giao diện điều khiển mysql. Ở đây bạn có thể gõ

source ~/mydump.sql;

Bạn sẽ thấy các lệnh từ kết xuất của bạn sẽ được thực thi như thế nào.

Trong phương pháp này, bạn không quan tâm đến bất kỳ giới hạn bộ nhớ php nào.


0

nếu kích thước cơ sở dữ liệu của bạn lớn hơn 128 MB thì hãy chia cơ sở dữ liệu của bạn thành nhiều phần.

Sử dụng phần mềm SQL Dump Splitter

SQL Dump Splitter là một ứng dụng 430 KB cho phép kiểm soát hoàn toàn việc phân tách cơ sở dữ liệu lớn thành các tệp SQL nhỏ hơn một cách dễ dàng. Với SQL Dump Splitter, bạn có thể:

  • Chọn kích thước của mỗi khối
  • Chọn bỏ qua nhận xét (để thậm chí giảm kích thước của DB)
  • Tự động hóa hoạt động.

Làm thế nào để bạn tự động hóa các hoạt động? Tôi sử dụng bộ chia và tôi không biết nó hoạt động như thế nào ... nó đã hoàn thành việc phân tách mà không cho tôi biết phần nào nó chia tệp và bây giờ không có trợ giúp hoặc Câu hỏi thường gặp để giúp sử dụng nó.
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.