Truy cập Mysql bị từ chối - Làm cách nào để khôi phục tệp kết xuất từ ​​​​mysqldump? Sao lưu và khôi phục cơ sở dữ liệu MySQL (MariaDB) bằng mysqldump.

Việc tạo kết xuất cơ sở dữ liệu (sao lưu) là rất quan trọng. Đó là lý do tại sao tôi đưa ra một số nhận xét kèm theo ví dụ về một tiện ích tuyệt vời như mysqldump.

mysqldump - một tiện ích cho phép bạn kết xuất nội dung của cơ sở dữ liệu hoặc một bộ cơ sở dữ liệu để tạo bản sao lưu hoặc gửi dữ liệu đến một máy chủ cơ sở dữ liệu SQL khác (không nhất thiết phải là máy chủ MySQL). Kết xuất sẽ chứa một tập hợp các lệnh SQL để tạo và/hoặc điền vào bảng.

mysqldump-u root -p -f name_database >

Với lệnh này chúng ta tạo bản sao lưu cơ sở dữ liệu với tên name_database vào ổ C trong file mydb_backup_name_database.txt

Bạn không cần phải tạo tệp; MySQL sẽ tự tạo tệp đó.

mysql-u root -p -f name_database< C:\mydb_backup_name_database.txt

Với lệnh này, chúng tôi nhập dữ liệu sao lưu từ tệp C:\mydb_backup_name_database.txt

Lưu ý: -f, --force là một tùy chọn chỉ định tiếp tục ngay cả khi nhận được lỗi SQL, tức là. bỏ qua lỗi. Ví dụ: nếu một hàng giống hệt đã tồn tại trong bảng.

Để tránh bị nhắc nhập mật khẩu, bạn cần viết mật khẩu ngay sau -p, nghĩa là không có dấu cách. Nếu mật khẩu pwd, thì ví dụ sẽ như thế này:

mysqldump-u gốc -p pwd-f name_database > C:\mydb_backup_name_database.txt

Nếu bạn thường xuyên sử dụng lệnh này, tốt hơn hết bạn nên tạo một người dùng riêng với các quyền cần thiết để giảm khả năng hiển thị của mật khẩu root

Hãy xem xét các cài đặt mysqldump tinh tế hơn:

--cơ sở dữ liệu cho phép mysqldump bao gồm các lệnh CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME và USE DBNAME trong tập lệnh khôi phục. Điều này sẽ cho phép bạn tạo cơ sở dữ liệu hoạt động từ đầu. Tức là, không sử dụng --databases, giả định rằng người dùng đang khôi phục một cơ sở dữ liệu duy nhất và chỉ định rõ ràng vị trí đặt dữ liệu được khôi phục. Nếu bản sao lưu được tạo với mục đích tạo một bản sao dữ liệu hoạt động đầy đủ, chẳng hạn như trên một máy chủ MySQL khác, thì bạn cần sử dụng khóa này;

--tất cả cơ sở dữ liệu cho phép bạn tạo bản sao của tất cả cơ sở dữ liệu tồn tại trên một máy chủ MySQL nhất định. Nếu bạn chỉ cần tạo bản sao của một số cơ sở dữ liệu, bạn chỉ cần chỉ định chúng cách nhau bằng dấu cách khi gọi mysqldump từ dòng lệnh (xem ở trên);

Chìa khóa --giúp đỡ. Chương trình mysqldump có nhiều phiên bản. Bạn có thể xem phiên bản của mình hỗ trợ những tính năng cụ thể nào bằng phím này;

--add-thả-bảng- một công tắc sẽ buộc mysqldump thêm lệnh thả bảng vào tập lệnh kết quả trước khi tạo bảng. Điều này sẽ cho phép bạn tránh một số lỗi khi khôi phục cơ sở dữ liệu từ bản sao lưu. Tất nhiên, bạn cần tính đến việc các bảng nằm trong bản sao làm việc (nếu các bảng có cùng tên tồn tại trong bản sao lưu) sẽ bị xóa khỏi cơ sở dữ liệu chính và được tạo lại từ bản sao lưu trước khi khôi phục từ bản sao lưu;

--không có dữ liệu. Sử dụng khóa này, bạn có thể nhanh chóng tạo một bản sao của cấu trúc bảng/cơ sở dữ liệu mà không cần đến dữ liệu. Ví dụ: bạn đã tạo một bảng phức tạp và muốn lưu cấu trúc của nó cho tương lai, nhưng bạn không cần chính dữ liệu có trong bảng này trong một bản sao lưu;

--result-file=...- công tắc này có thể được sử dụng để chuyển hướng đầu ra sang một tệp. Bạn có thể sử dụng chuyển hướng Unix thông thường bằng lệnh ">" hoặc bạn có thể sử dụng phím này. Ai thích cái gì;

Một mẹo rất hữu ích khác để sử dụng mysqldump trong môi trường lưu trữ. Theo quy định, khi sử dụng dịch vụ lưu trữ, một số hạn chế sẽ được áp dụng cho người dùng. Ví dụ: bạn không thể chiếm nhiều hơn một lượng bộ nhớ vật lý nhất định (RAM, RAM). mysqldump theo mặc định sẽ đặt tất cả dữ liệu nhận được từ máy chủ MySQL vào bộ nhớ và sau đó ghi tất cả vào đĩa. Theo đó, nếu nhà cung cấp cho phép bạn mượn, chẳng hạn như 30 MB bộ nhớ và cơ sở dữ liệu mà bạn đang sao chép bằng mysqldump, chiếm 50 MB, tất nhiên sẽ phát sinh lỗi ở đây - mysqldump sẽ không thể hoạt động chính xác và sẽ gặp sự cố, nó sẽ thông báo cho bạn về điều này. Để "buộc" mysqldump ghi dữ liệu trực tiếp vào đĩa, thay vì lưu trữ dữ liệu đó, dù chỉ là tạm thời, trong bộ nhớ, hãy sử dụng phím --nhanh. Điều này sẽ giải quyết vấn đề.

Dưới đây là một vài ví dụ hữu ích hơn:

mysqldump -u gốc -p pwd-f --default-character-set=cp1251 TÊN cơ sở dữ liệu| gzip -c > tên tệp.txt .gz

Bạn có thể giải nén một kho lưu trữ như vậy bằng lệnh:

tên tệp gunzip.txt.gz

Để biết ngày sao lưu được thực hiện, bạn có thể viết lệnh sau:

mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `ngày "+%Y-%m-%d"`.gz

và nếu bạn phải tạo các kết xuất với các bảng mã khác nhau, thì việc sử dụng các biến sẽ rất thuận tiện:

bộ nhân vật DB= utf8

bộ TÊN cơ sở dữ liệu= vi phạm

mysqldump -u gốc -p pwd-f --default-character-set=$ nhân vật DB $TÊN cơ sở dữ liệu| bzip2 -c > sql. $DBNAME.`date "+%Y-%m-%d"`.bz2

Nếu bạn muốn tự động loại bỏ các kho lưu trữ cũ, hãy thử sử dụng cron và lệnh find, thường có trong unix. Chạy định kỳ

tìm thấy~/directory-with-archives -name "*.gz" -mtime +7 -exec rm -f () \;

Do đó, bạn sẽ xóa các kho lưu trữ “cũ hơn” bảy ngày.

Trong hầu hết mọi trường hợp, bạn có thể dễ dàng quản lý cơ sở dữ liệu của mình từ các công cụ web như PHPMyAdmin. Thật không may, đôi khi cần phải khôi phục một lượng lớn dữ liệu. Điều này không thể đạt được thông qua PHPMyAdmin do bên ngoài PHP (thời gian chạy tập lệnh tối đa không cho phép hoặc không thể tải một kho lưu trữ lớn từ cơ sở dữ liệu).

Sử dụng MySQL từ dòng lệnh

Nếu bạn sử dụng MySQL trên Linux hoặc MS Windows, bạn có thể sử dụng dòng lệnh để thực hiện hầu hết các tác vụ. Nếu bạn đang sử dụng MS Windows, hãy đảm bảo rằng đường dẫn đến tệp thực thi dòng lệnh được bao gồm trong đường dẫn hệ thống. Nếu không, bạn sẽ phải nhập đường dẫn đầy đủ đến từng lệnh.

Cách sao lưu cơ sở dữ liệu MySQL

MySQL cung cấp một tiện ích gọi là "mysqldump." Về cơ bản, công cụ này tạo một tệp phẳng chứa các hướng dẫn MySQL để sửa chữa cơ sở dữ liệu. Dưới đây là một số ví dụ về việc sử dụng mysqldump:

Tạo bản sao lưu cơ sở dữ liệu đơn giản

# mysqldump -u tên người dùng -p DB_name > your_file.sql

Điều này tạo ra một tệp chứa tất cả các câu lệnh MySQL để tạo bảng và khôi phục dữ liệu vào cơ sở dữ liệu hiện có. Nếu cơ sở dữ liệu đích chứa các bảng có cùng tên, chúng sẽ bị ghi đè. Nếu bạn muốn loại bỏ và sử dụng lại các bảng hiện có, hãy sử dụng tùy chọn "add-drop-table":

# mysqldump --add-drop-table -u tên người dùng -p DB_name > your_file.sql

Ngoài ra, bạn có thể chọn điều này thay thế:

# mysqldump --add-drop-database -u tên người dùng -p DB_name > your_file.sql

Sao lưu nhiều cơ sở dữ liệu

Bạn có thể tạo bản sao của nhiều cơ sở dữ liệu vào một tệp bằng tùy chọn cơ sở dữ liệu:

# mysqldump -u tên người dùng -p --databases your_database1 your_database2 your_database3 > your_file.sql

Có thể tạo bản sao lưu của tất cả các cơ sở dữ liệu bằng cách sử dụng tùy chọn tất cả cơ sở dữ liệu:

# mysqldump -u tên người dùng -p --all-database > your_file.sql

Sao lưu bảng InnoDB

Nếu cơ sở dữ liệu có các cột InnoDB, bạn sẽ cần tắt tính toàn vẹn tham chiếu khi khôi phục dữ liệu. Thật không may, điều này không thể thực hiện được bằng tiện ích mysqldump. Để thực hiện việc này, bạn cần mở tệp đó và thêm:

ĐẶT FOREIGN_KEY_CHECKS = 0;
... Và thêm phần sau vào cuối tệp:
ĐẶT FOREIGN_KEY_CHECKS = 1;

Nén tập tin kết xuất MySQL

Nếu bạn đang sử dụng mysqldump trên shell Linux, bạn có thể nén qua Gzip để nén tệp kết xuất (giả sử bạn đã cài đặt gzip):

# mysqldump -u tên người dùng -p your_database_name | gzip -c your_file.sql.gz

Khôi phục từ bản sao lưu MySQL

Để khôi phục bản sao lưu được tạo bằng mysqldump, bạn sẽ cần sử dụng lệnh MySQL. Nếu tệp kết xuất MySQL của bạn không chứa "Tạo cơ sở dữ liệu" o, bạn có thể sử dụng lệnh sau:

# mysql -u tên người dùng -p your_database_name< your_file.sql

Tuy nhiên, nếu điều này thành công, hãy sử dụng lệnh tương tự mà không chỉ định tên cơ sở dữ liệu:

# mysql -u tên người dùng -p< your_file.sql

Thông tin thêm về mysqldump có thể được tìm thấy trên trang web chính thức của MySQL.

./mysql -u -P H < db_dump-file

2018-12-04T00:00Z

2018-12-11T00:00Z

Khi chúng tôi tạo một tệp kết xuất bằng mysqldump, nó chứa một tập lệnh SQL lớn để tạo lại nội dung của cơ sở dữ liệu. Vì vậy, chúng tôi khôi phục nó bằng cách chạy dòng lệnh máy khách MySQL:

Mysql -uroot -p

(trong đó root là tên người dùng quản trị viên của chúng tôi cho MySQL) và sau khi kết nối với cơ sở dữ liệu, chúng tôi cần các lệnh để tạo cơ sở dữ liệu và đọc tệp:

Tạo cơ sở dữ liệu new_db; sử dụng new_db; \. dumpfile.sql

Các chi tiết sẽ thay đổi tùy thuộc vào tùy chọn nào đã được sử dụng khi tạo tệp kết xuất.

2018-12-18T00:00Z

Bạn chỉ cần chạy cái này:

mysql -p -u< db_backup.dump

Nếu kết xuất chứa nhiều cơ sở dữ liệu, bạn nên bỏ qua tên cơ sở dữ liệu:

mysql -p -u< db_backup.dump

Để chạy các lệnh này, hãy mở dấu nhắc lệnh (trên Windows) và cd vào thư mục nơi mysql.exe chứa tệp thực thi mysql.exe (bạn có thể phải suy nghĩ về nó một chút, điều này sẽ phụ thuộc vào cách bạn cài đặt mysql, tức là độc lập hoặc là một phần của gói như WAMP). Khi ở trong thư mục này, bạn chỉ cần nhập lệnh.

2018-12-25T00:00Z

Nó sẽ đơn giản như việc chạy cái này:

Mysql -u -P< db_backup.dump

Nếu kết xuất có một cơ sở dữ liệu duy nhất, bạn có thể cần thêm một dòng ở đầu tệp:

SỬ DỤNG ;

Nếu đó là một tập hợp nhiều cơ sở dữ liệu thì các câu lệnh sử dụng đã có sẵn ở đó.

Để chạy các lệnh này, hãy mở dấu nhắc lệnh (trên Windows) và cd vào thư mục nơi mysql.exe chứa tệp thực thi mysql.exe (bạn có thể phải suy nghĩ về nó một chút, điều này sẽ phụ thuộc vào cách bạn cài đặt mysql, tức là độc lập hoặc là một phần của gói như WAMP). Khi đã ở trong thư mục đó, bạn chỉ cần gõ lệnh như tôi đã làm ở trên.

2019-01-01T00:00Z

Lệnh một lớp để khôi phục SQL được tạo từ mysqldump

Mysql -u -P nguồn E"

2019-01-08T00:00Z

Sử dụng tệp kết xuất 200 MB được tạo trên Linux để khôi phục trên Windows bằng mysql 5.5, tôi đã thành công hơn với

Tệp nguồn.sql

Cách tiếp cận dòng lệnh mysql hơn là sử dụng

mysql< file.sql

Cách tiếp cận dòng lệnh gây ra một số lỗi "máy chủ đã rời khỏi" năm 2006 (trên windows)

Thật kỳ lạ, dịch vụ được tạo trong quá trình cài đặt (mysql) lại đề cập đến tệp my.ini không có ở đó. Tôi đã sao chép tệp ví dụ "lớn" vào my.ini mà tôi đã sửa đổi với mức tăng được đề xuất.

Những giá trị của tôi

Max_allowed_packet = 64M tương tác_timeout = 250 wait_timeout = 250

2019-01-15T00:00Z

Như một ví dụ cụ thể của câu trả lời trước:

Tôi cần khôi phục bản sao lưu để có thể nhập/di chuyển nó vào SQL Server. Tôi chỉ cài đặt MySql nhưng không đăng ký nó làm dịch vụ hoặc thêm nó vào đường dẫn của mình vì tôi không cần chạy nó.

Tôi đã sử dụng Windows Explorer để đặt tệp kết xuất của mình vào C:\code\dump.sql. Sau đó mở MySql từ mục menu Bắt đầu. Tạo DB, sau đó chạy lệnh nguồn với đường dẫn đầy đủ như thế này:

Mysql> tạo cơ sở dữ liệu tạm thời mysql> sử dụng tạm thời mysql> nguồn c:\code\dump.sql

Việc kết xuất và khôi phục cơ sở dữ liệu MySQL khá đơn giản và thuận tiện để thực hiện từ xa thông qua SSH hoặc trực tiếp qua bảng điều khiển máy chủ. Từ xa, việc này có thể được thực hiện bằng chương trình PuTTY/Kitty. Bạn cũng có thể thực hiện các ví dụ bên dưới trên Windows bằng cách chạy dòng lệnh ‘ cmd‘. Dưới đây là các ví dụ về cách tạo kết xuất cơ sở dữ liệu MySQL và sau đó khôi phục chúng nếu cần, ví dụ như cho trang web, cửa hàng trực tuyến hoặc một số dự án khác của bạn.

Tạo kết xuất cơ sở dữ liệu MySQL

Để thực thi các lệnh này, hãy kết nối từ xa với máy chủ của bạn thông qua SSH bằng một trong các chương trình được liệt kê ở trên. Sau khi kết nối và ủy quyền cho máy chủ/hosting, bạn có thể nhập các lệnh bên dưới.

# Sao lưu một cơ sở dữ liệu vào tệp dump_file.sql mysqldump -uroot -p your_base > dump_file.sql # Trên Windows, tốt nhất là tạo một kết xuất bằng một lệnh hơi khác để ngăn chặn # vô tình ghi đè các dòng kết xuất do chuyển đổi dòng mới ký tự "\r\n" trong "\n" mysqldump -uroot -p your_base -r dump_file_utf8.sql # Nếu bạn chỉ cần sao lưu các bảng riêng lẻ chứ không phải toàn bộ cơ sở dữ liệu # (chỉ định các tên bảng cách nhau bằng dấu cách sau ký tự tên cơ sở dữ liệu) mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql # Nếu bạn chỉ cần sao lưu cấu trúc cơ sở dữ liệu mà không có dữ liệu đó mysqldump -uroot -p --no-data your_base > dump_file.sql # Sao lưu tất cả cơ sở dữ liệu vào tệp current_date.gz mysqldump -uroot -p --all_databases | gzip -c > "date "+%Y-%m-%d"".gz # Sao lưu, trong đó một INSERT riêng được tạo cho mỗi bản ghi # và có chỉ báo rõ ràng về mã hóa cơ sở dữ liệu UTF-8 mysqldump -uroot -p --default- character-set=utf8 your_base --extends-insert=FALSE | gzip -c > "ngày "+%Y-%m-%d"".gz

# Sao lưu một cơ sở dữ liệu vào dump_file.sql

mysqldump - uroot - p your_base > dump_file . sql

# Trên Windows, tốt nhất là tạo một kết xuất bằng lệnh hơi khác một chút để ngăn chặn

# ghi đè ngẫu nhiên các dòng kết xuất do chuyển đổi các ký tự dòng mới "\r\n" thành "\n"

mysqldump - uroot - p your_base - r dump_file_utf8 . sql

# Nếu bạn chỉ cần sao lưu các bảng riêng lẻ chứ không phải toàn bộ cơ sở dữ liệu

# (cho biết tên bảng cách nhau bằng dấu cách sau tên cơ sở dữ liệu)

mysqldump - uroot - p your_base TABLE1 TABLE2 TABLE3 > dump_file . sql

# Nếu bạn chỉ cần sao lưu cấu trúc cơ sở dữ liệu mà không có dữ liệu

mysqldump - uroot - p -- no - data your_base > dump_file . sql

# Sao lưu tất cả cơ sở dữ liệu vào tệp current_date.gz

mysqldump - uroot - p -- all_databases | gzip - c > "ngày "+%Y-%m-%d" . gz

# Sao lưu, trong đó một INSERT riêng được tạo cho mỗi mục nhập

# và chỉ định rõ ràng cơ sở dữ liệu mã hóa UTF-8

mysqldump - uroot - p -- mặc định - ký tự - set = utf8 your_base -- mở rộng - chèn = FALSE | gzip - c > "ngày "+%Y-%m-%d" . gz

Trong ví dụ trên, tiện ích được sử dụng để tạo bản sao lưu mysqldump, được bao gồm trong mysql. Sau đây là các tham số để tạo bản sao lưu cơ sở dữ liệu, chúng tôi sẽ xem xét chi tiết hơn:

  • -u– tham số chỉ định thông tin đăng nhập sẽ được sử dụng để kết nối với cơ sở dữ liệu. Trong ví dụ, chúng tôi sử dụng thông tin đăng nhập root, thông tin này phải được chỉ định trong tham số này và không có khoảng trắng! Kết quả là nó trông giống như -uroot
  • -P– tham số cho biết bạn cần nhập mật khẩu cho lần đăng nhập được chỉ định. Chúng tôi để trống, do đó, mật khẩu sẽ cần được nhập sau khi nhấn “Enter” khi thực hiện lệnh. Tuy nhiên, bạn có thể chỉ định mật khẩu ngay tại đây, như trong tham số đăng nhập, không có khoảng trắng sau -p, tuy nhiên, phương pháp này không an toàn, vì bảng điều khiển lưu lệnh của bạn vào tệp nhật ký và nếu bạn không xóa nó thường xuyên, kẻ tấn công có thể xem nó.
  • cơ sở của bạn– thay vì dòng này trong ví dụ, bạn cần cho biết tên thật của cơ sở dữ liệu mà bạn đang tạo bản sao lưu.
  • > – một toán tử hiển thị hướng hành động, tức là như thể nó chỉ ra rằng bạn sắp ghi từ cơ sở dữ liệu vào một tệp.
  • dump_file.sql– đây là tên tệp .slq mà bạn cần lưu cơ sở dữ liệu của mình. Nó được biểu thị bằng dấu cách sau toán tử '>'. Bạn có thể chỉ định bất kỳ tên nào khác. Ví dụ: để hệ thống tự động chèn thời gian hiện tại vào tên, chỉ cần chỉ định một dòng như:

    "ngày "+%Y-%m-%d""

    "ngày "+%Y-%m-%d""


    sau dòng này trong ví dụ, phần mở rộng của tệp được chỉ định ‘ .gz‘. Kết quả là một tập tin như ‘ 2014-11-15.gz‘.

    Chú ý! Nếu bạn chỉ chỉ định tên tệp, nó sẽ được lưu trong cùng thư mục mà bạn thực hiện lệnh này. Những thứ kia. nếu bạn thấy một cái gì đó như thế này tại dấu nhắc lệnh # , Ở đâu root@dvsđây là tên đăng nhập và tên máy chủ, file sẽ được tạo trong thư mục /trang chủ. Để thay đổi việc lưu file sang đường dẫn khác, hãy chỉ định đường dẫn đầy đủ để lưu file thay vì tên, ví dụ: /var/www/backup/dump_file.sql.

  • Trong ví dụ thứ hai, thay vì toán tử ‘ > ‘toán tử’ được sử dụng | ', cho biết cần phải chạy lệnh gzip bổ sung với tham số ' -c‘ cho phép bạn ngay lập tức đóng gói kết xuất vào một kho lưu trữ và chỉ sau đó lưu nó vào một tệp như ‘ 2014-11-15.gz‘, theo báo cáo của nhà điều hành ‘ > ‘.
  • Tham số -không có dữ liệu cho phép bạn chỉ kết xuất cấu trúc cơ sở dữ liệu mà không có dữ liệu. Khá hữu ích trong một số trường hợp khi không cần dữ liệu.
  • Tùy chọn –default-character-set=utf8–extends-insert=FALSE. Việc đầu tiên cho phép bạn chỉ định rõ ràng mã hóa được sử dụng bởi cơ sở dữ liệu này, do đó tránh lưu cơ sở dữ liệu bằng mã hóa sai. Thay vì utf8, bạn có thể chỉ định bất kỳ mã hóa nào khác, ví dụ như cp1251. Tham số thứ hai cho phép bạn chỉ định rằng lệnh INSERT riêng biệt phải được tạo cho mỗi bản ghi khi xuất. Trong một số trường hợp, điều này có thể được yêu cầu khi khôi phục một phần dữ liệu từ kết xuất.
  • Khôi phục cơ sở dữ liệu từ tệp kết xuất MySQL

    Bây giờ chúng ta hãy xem quá trình ngược lại của việc khôi phục cơ sở dữ liệu từ tệp kết xuất. Hành động này được thực hiện bằng chương trình mysql. Hãy xem ngay một ví dụ.

Có thể bạn đã phải nhập kết xuất cơ sở dữ liệu nhiều lần. Và bất chấp sự tầm thường của nhiệm vụ này, các câu hỏi và đôi khi các vấn đề liên quan đến vấn đề này vẫn thường nảy sinh. Dưới đây là tất cả mã bạn cần để nhanh chóng áp dụng kết xuất cơ sở dữ liệu từ dòng lệnh.

ĐẶT TÊN utf8; BỎ CƠ SỞ DỮ LIỆU `mydb`; TẠO CƠ SỞ DỮ LIỆU `mydb` BỘ KÝ TỰ MẶC ĐỊNH utf8; SỬ DỤNG `mydb`; THIẾT LẬP SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; THIẾT LẬP tự động = 0; SET nước ngoài_key_checks=0; THIẾT LẬP Unique_checks=0; NGUỒN /path/to/db_dump.sql; LÀM; THIẾT LẬP tự động = 1; SET nước ngoài_key_checks=1; THIẾT LẬP Unique_checks=1;

Các lệnh này sẽ cho phép bạn nhanh chóng nhập kết xuất cơ sở dữ liệu và tránh các sự cố. Hơn nữa, một số vấn đề này không được giải quyết ngay cả bởi các máy khách mysql thông thường, chẳng hạn như phpMyAdmin và các vấn đề khác.

Chúng ta hãy thử xem mã này theo thứ tự.

ĐẶT TÊN utf8; nói rằng việc trao đổi dữ liệu sẽ diễn ra ở dạng mã hóa UTF-8 và đây là nơi chứa tệp kết xuất nguồn của cơ sở dữ liệu và đây là những gì cơ sở dữ liệu cuối cùng sẽ có.

BỎ CƠ SỞ DỮ LIỆU `mydb`;TẠO CƠ SỞ DỮ LIỆU `mydb` BỘ KÝ TỰ MẶC ĐỊNH utf8; trình diễn sự phá hủy cơ sở dữ liệu và quá trình tạo tiếp theo của nó với mã hóa mặc định UTF-8. Rõ ràng rằng điều này sẽ xóa tất cả các bảng và dữ liệu trong đó, nhưng điều này sẽ giúp chúng tôi tin tưởng rằng cơ sở dữ liệu kết quả sẽ hoàn toàn tương ứng với dữ liệu trong tệp kết xuất.

SỬ DỤNG `mydb`; chỉ ra rằng cơ sở dữ liệu cụ thể này nên được sử dụng cho tất cả các lệnh từ tệp kết xuất (kiểm tra tệp kết xuất để biết sự hiện diện của lệnh này cho biết cơ sở dữ liệu khác để tránh nhầm lẫn).

THIẾT LẬP SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; vô hiệu hóa việc tăng bộ đếm tăng tự động khi ghi giá trị 0 vào trường tăng tự động. Theo mặc định, khi ghi giá trị NULL hoặc 0 vào trường đó, giá trị đó sẽ tự động tăng. Và mặc dù việc có giá trị 0 trong trường tăng tự động không phải là cách thực hành tốt nhất, đôi khi vẫn xảy ra trường hợp có những dòng như vậy trong kết xuất (tôi đã gặp phải điều tương tự trong kết xuất từ ​​Magento). Cũng cần lưu ý rằng mysqldump đã đưa lệnh này theo mặc định vào các bãi chứa của nó một thời gian rồi.

THIẾT LẬP tự động = 0; trước khi tải kết xuất và LÀM; sau đó, chúng tăng tốc độ thực thi INSERT cho các bảng InnoDB, vì khi chế độ tự động xác nhận được bật, nhật ký sẽ được lưu vào đĩa với mỗi INSERT. Có thể hỗ trợ khi lăn các bãi chứa lớn.

SET nước ngoài_key_checks=0; lựa chọn rõ ràng nhất, nếu không có nó thì hầu hết các bãi chứa sẽ không thể được áp dụng. Vô hiệu hóa việc kiểm tra khóa ngoại, cho phép dữ liệu được ghi theo bất kỳ thứ tự nào, bao gồm cả tham chiếu vòng quanh các khóa ngoại. Tùy chọn này cũng tăng tốc độ nhập kết xuất.

THIẾT LẬP Unique_checks=0; vô hiệu hóa việc kiểm tra tính duy nhất cho các khóa phụ, điều này một lần nữa có thể tăng tốc quá trình nhập.

Và cuối cùng, đội chính đã lên kế hoạch cho tất cả những điều này - NGUỒN /path/to/db_dump.sql; nhập trực tiếp kết xuất cơ sở dữ liệu mysql từ tệp được chỉ định. Đường dẫn đến tệp có thể là tuyệt đối hoặc tương đối với thư mục mà bạn đã truy cập bảng điều khiển mysql.

Và sau khi quá trình nhập hoàn tất, chúng tôi khôi phục giá trị của các cờ, mặc dù điều này không cần phải thực hiện vì lệnh BỘ theo mặc định, trong mysql chỉ thay đổi giá trị của các biến trong ngữ cảnh của phiên hiện tại.