Mysql thả cơ sở dữ liệu rất chậm

Ứng dụng khách

--fields-enclosed-by='"'
5 là một chương trình sao lưu được viết bởi Igor Romanenko. Nó có thể được sử dụng để kết xuất cơ sở dữ liệu hoặc tập hợp cơ sở dữ liệu để sao lưu hoặc chuyển sang máy chủ cơ sở dữ liệu khác (không nhất thiết phải là MariaDB hoặc MySQL). Kết xuất thường chứa các câu lệnh SQL để tạo bảng, điền vào bảng hoặc cả hai. Tuy nhiên,
--fields-enclosed-by='"'
5 cũng có thể được sử dụng để tạo tệp ở định dạng CSV, văn bản được phân tách khác hoặc định dạng XML

Nếu bạn đang thực hiện sao lưu trên máy chủ và tất cả các bảng của bạn đều là bảng MyISAM, hãy cân nhắc sử dụng mysqlhotcopy thay vì nó có thể thực hiện sao lưu nhanh hơn và khôi phục nhanh hơn

mysqldump kết xuất các trình kích hoạt cùng với các bảng, vì đây là một phần của định nghĩa bảng. Tuy nhiên, các thủ tục, dạng xem và sự kiện được lưu trữ thì không và cần tạo lại các tham số bổ sung một cách rõ ràng (ví dụ:

--fields-enclosed-by='"'
8 và
--fields-enclosed-by='"'
9). Tuy nhiên, các thủ tục và chức năng cũng là một phần của bảng hệ thống (ví dụ mysql. thủ tục)

--fields-enclosed-by='"'
5 ủng hộ

Hiệu suất

mysqldump thường không tiêu tốn nhiều tài nguyên CPU trên phần cứng hiện đại vì theo mặc định, nó sử dụng một luồng đơn. Phương pháp này tốt cho một máy chủ được tải nặng

Tuy nhiên, đầu vào/đầu ra của đĩa mỗi giây (IOPS) có thể tăng lên vì nhiều lý do. Khi bạn sao lưu trên cùng một thiết bị với cơ sở dữ liệu, điều này sẽ tạo ra IOPS ngẫu nhiên không cần thiết. Quá trình kết xuất được thực hiện tuần tự, trên cơ sở từng bảng, gây ra quá trình quét toàn bộ bảng và bỏ sót nhiều trang bộ đệm trên các bảng không được lưu hoàn toàn vào bộ nhớ đệm

Bạn nên sao lưu từ một vị trí mạng để xóa đĩa IOPS trên máy chủ cơ sở dữ liệu, nhưng điều quan trọng là sử dụng một cạc mạng riêng để giữ băng thông mạng khả dụng cho lưu lượng truy cập thường xuyên

Mặc dù mysqldump theo mặc định sẽ bảo toàn tài nguyên của bạn cho các đĩa trục chính thông thường và phần cứng lõi thấp, nhưng điều này không có nghĩa là các kết xuất đồng thời không thể hưởng lợi từ kiến ​​trúc phần cứng như SAN, bộ lưu trữ flash, khối lượng công việc ghi thấp. Thời gian sao lưu sẽ được hưởng lợi từ một công cụ như MyDumper

Cách sử dụng

Có bốn cách chung để gọi

--fields-enclosed-by='"'
5

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
shell> mysqldump [options] --system=[option_list]

Nếu bạn không đặt tên cho bất kỳ bảng nào sau db_name hoặc nếu bạn sử dụng tùy chọn

--fields-enclosed-by=0x22
2 hoặc
--fields-enclosed-by=0x22
3, thì toàn bộ cơ sở dữ liệu sẽ bị hủy

--fields-enclosed-by='"'
5 không kết xuất cơ sở dữ liệu INFORMATION_SCHEMA (hoặc PERFORMANCE_SCHEMA, nếu được bật) theo mặc định. MariaDB kết xuất
--fields-enclosed-by=0x22
5 nếu bạn đặt tên rõ ràng cho nó trên dòng lệnh, mặc dù hiện tại bạn cũng phải sử dụng tùy chọn
--fields-enclosed-by=0x22
6

Để xem danh sách các tùy chọn mà phiên bản

--fields-enclosed-by='"'
5 của bạn hỗ trợ, hãy thực hiện
--fields-enclosed-by=0x22
8

Hàng theo hàng so với. đệm

--fields-enclosed-by='"'
5 có thể truy xuất và kết xuất nội dung bảng theo từng hàng hoặc nó có thể truy xuất toàn bộ nội dung từ một bảng và lưu vào bộ nhớ đệm trước khi kết xuất. Bộ đệm trong bộ nhớ có thể là một vấn đề nếu bạn kết xuất các bảng lớn. Để kết xuất bảng theo từng hàng, hãy sử dụng tùy chọn
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




0 (hoặc
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




1, cho phép
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




0). Tùy chọn
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




1 (và do đó là
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




0) được bật theo mặc định, vì vậy để bật bộ nhớ đệm, hãy sử dụng
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




5

--fields-enclosed-by='"'
5 trong MariaDB 10. 3 bao gồm logic để phục vụ cho mysql. bảng giao dịch_đăng ký. Không thể sử dụng
--fields-enclosed-by='"'
5 từ bản phát hành MariaDB trước đó trên MariaDB 10. 3 và hơn thế nữa

mysqldump và các phiên bản cũ của MySQL

Nếu bạn đang sử dụng phiên bản gần đây của

--fields-enclosed-by='"'
5 để tạo một kết xuất được tải lại vào máy chủ MySQL rất cũ, bạn không nên sử dụng tùy chọn
shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




1 hoặc
mysql db_name < backup-file.sql
0. Sử dụng
mysql db_name < backup-file.sql
1 để thay thế

Tùy chọn

--fields-enclosed-by='"'
5 hỗ trợ các tùy chọn sau

Tùy chọn nhóm

Một số tùy chọn

--fields-enclosed-by='"'
5 là cách viết tắt của các nhóm tùy chọn khác

  • Việc sử dụng
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1 cũng giống như chỉ định
    mysql db_name < backup-file.sql
    
    5,
    mysql db_name < backup-file.sql
    
    6,
    mysql db_name < backup-file.sql
    
    7,
    mysql db_name < backup-file.sql
    
    8,
    mysql db_name < backup-file.sql
    
    0,
    shell> mysqldump db_name > backup-file.sql
    
    0,
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    0 và
    shell> mysqldump db_name > backup-file.sql
    
    2. Tất cả các tùy chọn mà
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1 đại diện cũng được bật theo mặc định vì
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1 được bật theo mặc định
  • Việc sử dụng
    shell> mysqldump db_name > backup-file.sql
    
    5 giống như chỉ định các tùy chọn
    shell> mysqldump db_name > backup-file.sql
    
    6,
    shell> mysqldump db_name > backup-file.sql
    
    7,
    shell> mysqldump db_name > backup-file.sql
    
    8,
    shell> mysqldump db_name > backup-file.sql
    
    9 và
    shell> mysql db_name < backup-file.sql
    
    0

Để đảo ngược tác dụng của một tùy chọn nhóm, hãy sử dụng biểu mẫu

shell> mysql db_name < backup-file.sql
1 (
mysql db_name < backup-file.sql
1 hoặc
shell> mysql db_name < backup-file.sql
3). Cũng có thể chỉ chọn một phần tác dụng của tùy chọn nhóm bằng cách theo dõi nó với các tùy chọn bật hoặc tắt các tính năng cụ thể. Dưới đây là một số ví dụ

  • Để chọn hiệu ứng của
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1 ngoại trừ một số tính năng, hãy sử dụng tùy chọn
    shell> mysql db_name < backup-file.sql
    
    5 cho từng tính năng. Để vô hiệu hóa phần chèn mở rộng và bộ nhớ đệm, hãy sử dụng
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1
    shell> mysql db_name < backup-file.sql
    
    7
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    5. (Trên thực tế,
    shell> mysql db_name < backup-file.sql
    
    7
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    5 là đủ vì
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1 được bật theo mặc định. )
  • Để đảo ngược
    shell> mysqldump --xml -u root world City
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    1
    Kabul
    AFG
    Kabol
    1780000
    
    ...
    
    4079
    Rafah
    PSE
    Rafah
    92020
    
    
    
    
    
    1 cho tất cả các tính năng ngoại trừ vô hiệu hóa chỉ mục và khóa bảng, hãy sử dụng
    mysql db_name < backup-file.sql
    
    1
    mysql db_name < backup-file.sql
    
    8
    shell> mysqldump db_name > backup-file.sql
    
    0

Khi bạn bật hoặc tắt có chọn lọc hiệu ứng của một tùy chọn nhóm, thứ tự rất quan trọng vì các tùy chọn được xử lý trước đến cuối. Ví dụ:

mysql db_name < backup-file.sql
8
shell> mysqldump db_name > backup-file.sql
0
mysql db_name < backup-file.sql
1 sẽ không có tác dụng như mong muốn;

Các ký tự đặc biệt trong các giá trị tùy chọn

Một số tùy chọn, như

shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
0, chấp nhận một chuỗi. Chuỗi có thể được trích dẫn, nếu cần thiết. Ví dụ: trên các hệ thống Unix, đây là tùy chọn để đặt các trường trong dấu ngoặc kép

--fields-enclosed-by='"'

Một cách khác để chỉ định giá trị thập lục phân của một ký tự. Ví dụ: cú pháp sau hoạt động trên mọi nền tảng

--fields-enclosed-by=0x22

Tệp tùy chọn

Ngoài việc đọc các tùy chọn từ dòng lệnh,

--fields-enclosed-by='"'
5 cũng có thể đọc các tùy chọn từ tệp tùy chọn. Nếu một tùy chọn không xác định được cung cấp cho
--fields-enclosed-by='"'
5 trong tệp tùy chọn, thì tùy chọn đó sẽ bị bỏ qua

Các tùy chọn sau đây liên quan đến cách các công cụ dòng lệnh của MariaDB xử lý các tệp tùy chọn. Chúng phải được đưa ra làm đối số đầu tiên trên dòng lệnh

Trong MariaDB 10. 2 trở lên,

--fields-enclosed-by='"'
5 được liên kết với Trình kết nối MariaDB/C. Tuy nhiên, Trình kết nối MariaDB/C chưa xử lý việc phân tích cú pháp các tệp tùy chọn cho máy khách này. Điều đó vẫn được thực hiện bởi mã phân tích tệp tùy chọn máy chủ. Xem MDEV-19035 để biết thêm thông tin

Nhóm tùy chọn

--fields-enclosed-by='"'
5 đọc các tùy chọn sau đây từ các tệp tùy chọn

Các giá trị NULL, ´NULL´ và rỗng trong XML

Đối với một cột có tên là

shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
5, giá trị
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
6, một chuỗi rỗng và giá trị chuỗi
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
7 được phân biệt với nhau trong đầu ra do tùy chọn này tạo ra như sau

Đầu ra từ máy khách mysql khi chạy bằng tùy chọn

shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
8 cũng tuân theo các quy tắc trước đó

Đầu ra XML từ mysqldump bao gồm không gian tên XML, như được hiển thị ở đây

shell> mysqldump --xml -u root world City














1
Kabul
AFG
Kabol
1780000

...

4079
Rafah
PSE
Rafah
92020




phục hồi

Để khôi phục bản sao lưu được tạo bằng mysqldump, hãy sử dụng ứng dụng khách mysql để nhập kết xuất chẳng hạn

mysql db_name < backup-file.sql

Biến

Bạn cũng có thể đặt các biến sau (_______65_______9) và các tùy chọn boolean

shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
0 bằng cách sử dụng

ví dụ

Việc sử dụng phổ biến của

--fields-enclosed-by='"'
5 là để tạo bản sao lưu toàn bộ cơ sở dữ liệu

shell> mysqldump db_name > backup-file.sql

Bạn có thể tải lại tệp kết xuất vào máy chủ như thế này

shell> mysql db_name < backup-file.sql

Hoặc như thế này

shell> mysql -e "source /path-to-backup/backup-file.sql" db_name

--fields-enclosed-by='"'
5 cũng rất hữu ích để tạo cơ sở dữ liệu bằng cách sao chép dữ liệu từ máy chủ MariaDB này sang máy chủ MariaDB khác

shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name

Có thể kết xuất một số cơ sở dữ liệu bằng một lệnh

shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

Để kết xuất tất cả cơ sở dữ liệu, hãy sử dụng tùy chọn

--fields-enclosed-by=0x22
3

--fields-enclosed-by='"'
0

Đối với các bảng InnoDB,

--fields-enclosed-by='"'
5 cung cấp cách tạo bản sao lưu trực tuyến

--fields-enclosed-by='"'
1

Bản sao lưu này có được khóa đọc toàn cầu trên tất cả các bảng (sử dụng

shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
5) khi bắt đầu kết xuất. Ngay sau khi có được khóa này, tọa độ nhật ký nhị phân được đọc và khóa được giải phóng. Nếu các câu lệnh cập nhật dài đang chạy khi câu lệnh FLUSH được đưa ra, máy chủ MariaDB có thể bị đình trệ cho đến khi các câu lệnh đó kết thúc. Sau đó, kết xuất sẽ không bị khóa và không làm phiền việc đọc và ghi trên bảng. Nếu các báo cáo cập nhật mà máy chủ MariaDB nhận được ngắn (về thời gian thực hiện), thời gian khóa ban đầu sẽ không đáng chú ý, ngay cả với nhiều bản cập nhật

Để khôi phục tại thời điểm (còn được gọi là "cuộn về phía trước", khi bạn cần khôi phục bản sao lưu cũ và phát lại các thay đổi đã xảy ra kể từ bản sao lưu đó), thường rất hữu ích khi xoay nhật ký nhị phân hoặc ít nhất là biết

--fields-enclosed-by='"'
2

Hoặc là

--fields-enclosed-by='"'
3

Các tùy chọn

shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
6 và
shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
7 có thể được sử dụng đồng thời, cung cấp một cách thuận tiện để tạo bản sao lưu trực tuyến phù hợp để sử dụng trước khi khôi phục tại thời điểm nếu các bảng được lưu trữ bằng công cụ lưu trữ InnoDB

DROP TABLE có chậm không?

Thông thường, nó khá nhanh (0. 1 giây), nhưng cũng có những khoảng thời gian vài phút, khi mỗi DROP TABLE mất 1 - 2 phút để thực thi (có và không thanh lọc, mã SQL xem bên dưới).

Tại sao cơ sở dữ liệu MySQL quá chậm?

Tranh chấp bộ nhớ . Chúng tôi có thể kiểm tra kích thước của vùng đệm bằng cách xem bộ đếm Giám sát hiệu suất (perfmon) và các số liệu SQL Server khác. Vùng đệm lớn hơn sẽ giúp tăng tốc các ứng dụng SQL của bạn.

Chúng ta có thể bỏ cơ sở dữ liệu trong MySQL không?

Câu lệnh DROP DATABASE của MySQL . The DROP DATABASE statement is used to drop an existing SQL database.