“Dữ liệu là dầu mới. ”. Vì vậy, khi nói đến kinh doanh trực tuyến, mất dữ liệu có nghĩa là mất vốn. Dữ liệu quan trọng và nhạy cảm nên được sao lưu định kỳ. Nhờ các chương trình miễn phí như MySQLDumper, bạn có thể tạo bản sao lưu cơ sở dữ liệu MySQL trong vài phút. Sau khi cài đặt, bạn có thể sử dụng phần mềm để tự động hóa và quản lý các bản sao lưu
Nhập hoặc xuất cơ sở dữ liệu từ cơ sở dữ liệu MySQL hoặc MariaDB từ vỏ MySQL hoặc dòng lệnh. Đây là phương pháp dễ nhất để xuất cơ sở dữ liệu hoặc bảng cụ thể từ cơ sở dữ liệu
Nếu bạn có một cơ sở dữ liệu lớn hơn 500Mb, sẽ rất khó xuất, điều này sẽ mất nhiều thời gian hơn để nhập hoặc xuất toàn bộ cơ sở dữ liệu, điều này có thể dẫn đến lỗi hết thời gian chờ
Trong hướng dẫn này, bạn sẽ học cách nhập hoặc xuất cơ sở dữ liệu bằng dòng lệnh từ MySQL shell. Bạn cũng sẽ tìm hiểu một số cách khắc phục sự cố không thể xuất cơ sở dữ liệu của mình
BẮT ĐẦU
điều kiện tiên quyết
- Truy cập SSH máy chủ
- Tên người dùng MySQL, tên cơ sở dữ liệu, mật khẩu để xuất cơ sở dữ liệu
- Người dùng và mật khẩu MySQL có quyền tạo cơ sở dữ liệu để nhập
Xuất cơ sở dữ liệu MySQL từ dòng lệnh
Đăng nhập vào SSH máy chủ của bạn và lưu ý tên cơ sở dữ liệu, tên người dùng và mật khẩu của bạn. Đảm bảo người dùng của bạn có toàn quyền truy cập vào cơ sở dữ liệu mà bạn muốn xuất
Bạn có thể sử dụng lệnh sau để xuất toàn bộ cơ sở dữ liệu
mysqldump -u username -p database_name > filename.sql
Bạn sẽ được nhắc nhập mật khẩu cho tên người dùng
Khi bạn đã nhập mật khẩu, cơ sở dữ liệu của bạn sẽ được xuất sang tệp định dạng .sql
và được lưu trữ trong thư mục hiện tại của bạn
Các vấn đề mà bạn không thể xuất cơ sở dữ liệu
Lỗi truy cập bị từ chối
- Bạn có thể thử đăng nhập với tư cách người dùng root
sudo su
và xuất cơ sở dữ liệu - Có thể là mật khẩu không khớp
- Có thể người dùng không có đủ đặc quyền đối với cơ sở dữ liệu
Lỗi [các] đặc quyền QUY TRÌNH truy cập bị từ chối
Bạn cần sử dụng tùy chọn --no-tablespaces
với lệnh mysqldump
. Vì vậy, lệnh sẽ giống như bên dưới
mysqldump --no-tablespaces -u username -p database_name > filename.sql
Chỉ xuất một số bảng nhất định
Để xuất các bảng cụ thể của cơ sở dữ liệu từ dòng lệnh, bạn cần chuyển tên bảng như hình bên dưới
mysqldump -u username -p database_name table1 table2 > filename.sql
Lệnh trên sẽ chỉ xuất các tên bảng được chỉ định
Nhập dữ liệu MySQL từ dòng lệnh
Đây là phương pháp tốt nhất để nhập một tệp cơ sở dữ liệu khổng lồ mà không có bất kỳ lỗi nào
Tải tệp .sql
lên máy chủ của bạn. Đăng nhập vào SSH và điều hướng đến thư mục mà bạn đã tải tệp cơ sở dữ liệu lên
Nếu bạn không có cơ sở dữ liệu, bạn cần đăng nhập với tư cách người dùng như root để tạo cơ sở dữ liệu
CREATE DATABASE database_name /*\!40100 DEFAULT CHARACTER SET utf8mb4 */;
Để nhập cơ sở dữ liệu, bạn có thể sử dụng lệnh sau
mysql -u username -p database_name < backup.sql
Đảm bảo rằng bạn có đủ đặc quyền trên cơ sở dữ liệu của mình
thận trọng. Nếu bạn sử dụng
mysqldump --no-tablespaces -u username -p database_name > filename.sql0 thay vì
mysqldump --no-tablespaces -u username -p database_name > filename.sql1. Tất cả dữ liệu trong bản sao lưu. sql sẽ bị xóa hoặc bị hỏng
Nếu bạn có nhiều hơn 1 GiB dữ liệu để tải hoặc nếu dữ liệu của bạn đến từ một nơi nào đó không phải là cơ sở dữ liệu MariaDB hoặc MySQL, chúng tôi khuyên bạn nên tạo các tệp phẳng và tải chúng bằng mysqlimport. Tiện ích mysqlimport là một tiện ích dòng lệnh khác đi kèm với phần mềm máy khách MySQL và MariaDB. Mục đích của nó là tải các tệp phẳng vào MySQL hoặc MariaDB. Để biết thông tin về mysqlimport, hãy xem mysqlimport - một chương trình nhập dữ liệu trong tài liệu MySQL
Chúng tôi cũng khuyên bạn nên tạo các bản kết xuất nhanh cơ sở dữ liệu của phiên bản CSDL Amazon RDS mục tiêu trước và sau khi tải dữ liệu. Kết xuất nhanh cơ sở dữ liệu Amazon RDS là bản sao lưu hoàn chỉnh của phiên bản CSDL của bạn. Bản sao này có thể được sử dụng để khôi phục phiên bản CSDL của bạn về trạng thái đã biết. Khi bạn bắt đầu một bản kết xuất nhanh cơ sở dữ liệu, các thao tác I/O đối với phiên bản CSDL của bạn tạm thời bị tạm dừng trong khi cơ sở dữ liệu của bạn được sao lưu
Tạo ảnh chụp nhanh cơ sở dữ liệu ngay trước khi tải giúp bạn có thể khôi phục cơ sở dữ liệu về trạng thái của nó trước khi tải, nếu bạn cần. Ảnh chụp nhanh cơ sở dữ liệu được chụp ngay sau khi tải giúp bạn không phải tải lại dữ liệu trong trường hợp xảy ra sự cố và cũng có thể được sử dụng để khởi tạo các phiên bản cơ sở dữ liệu mới
Danh sách sau đây cho thấy các bước cần thực hiện. Mỗi bước được thảo luận chi tiết hơn sau đây
Tạo các tệp phẳng chứa dữ liệu sẽ được tải
Dừng mọi ứng dụng đang truy cập phiên bản CSDL đích
Tạo ảnh chụp nhanh cơ sở dữ liệu
Cân nhắc tắt sao lưu tự động Amazon RDS
Tải dữ liệu bằng mysqlimport
Bật lại sao lưu tự động
Bước 1. Tạo các tệp phẳng chứa dữ liệu sẽ được tải
Sử dụng một định dạng phổ biến, chẳng hạn như các giá trị được phân tách bằng dấu phẩy [CSV], để lưu trữ dữ liệu sẽ được tải. Mỗi bảng phải có tệp riêng; . Đặt cho mỗi tệp cùng tên với bảng mà nó tương ứng. Phần mở rộng tệp có thể là bất cứ thứ gì bạn thích. Ví dụ: nếu tên bảng là
aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
5, tên tệp có thể là aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
6 hoặc aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
7, nhưng không phải là aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
8Bất cứ khi nào có thể, hãy sắp xếp dữ liệu theo khóa chính của bảng đang được tải. Làm điều này cải thiện đáng kể thời gian tải và giảm thiểu yêu cầu lưu trữ đĩa
Tốc độ và hiệu quả của quy trình này phụ thuộc vào việc giữ cho kích thước tệp nhỏ. Nếu kích thước không nén của bất kỳ tệp riêng lẻ nào lớn hơn 1 GiB, hãy chia tệp đó thành nhiều tệp và tải riêng từng tệp
Trên các hệ thống giống Unix [bao gồm cả Linux], hãy sử dụng lệnh
aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
9. Ví dụ: lệnh sau chia tệp aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
6 thành nhiều tệp nhỏ hơn 1 GiB, chỉ chia khi ngắt dòng [-C 1024m]. Các tệp mới được đặt tên là aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
1, aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
2, v.v.split -C 1024m -d sales.csv sales.part_
Các tiện ích tương tự có sẵn cho các hệ điều hành khác
Bước 2. Dừng mọi ứng dụng đang truy cập phiên bản CSDL đích
Trước khi bắt đầu tải lớn, hãy dừng mọi hoạt động của ứng dụng đang truy cập phiên bản CSDL đích mà bạn định tải lên. Chúng tôi đặc biệt khuyến nghị điều này nếu các phiên khác sẽ sửa đổi các bảng đang được tải hoặc các bảng mà chúng tham chiếu. Làm điều này làm giảm nguy cơ vi phạm ràng buộc xảy ra trong quá trình tải và cải thiện hiệu suất tải. Nó cũng cho phép khôi phục phiên bản CSDL về điểm ngay trước khi tải mà không làm mất các thay đổi được thực hiện bởi các quy trình không liên quan đến tải
Tất nhiên, điều này có thể không khả thi hoặc thực tế. Nếu bạn không thể ngăn các ứng dụng truy cập phiên bản CSDL trước khi tải, hãy thực hiện các bước để đảm bảo tính khả dụng và tính toàn vẹn của dữ liệu của bạn. Các bước cụ thể được yêu cầu rất khác nhau tùy thuộc vào các trường hợp sử dụng cụ thể và yêu cầu của trang web
Bước 3. Tạo ảnh chụp nhanh cơ sở dữ liệu
Nếu định tải dữ liệu vào một phiên bản CSDL mới không chứa dữ liệu, thì bạn có thể bỏ qua bước này. Mặt khác, việc tạo ảnh chụp nhanh cơ sở dữ liệu cho phiên bản CSDL của bạn giúp bạn có thể khôi phục phiên bản CSDL về điểm ngay trước khi tải, nếu cần thiết. Như đã đề cập trước đây, khi bạn bắt đầu một bản kết xuất nhanh cơ sở dữ liệu, các thao tác I/O đối với phiên bản CSDL của bạn sẽ bị tạm dừng trong vài phút trong khi cơ sở dữ liệu được sao lưu
Ví dụ sau đây sử dụng lệnh AWS CLI
aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
3 để tạo ảnh chụp nhanh cơ sở dữ liệu của phiên bản aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
4 và cung cấp cho ảnh chụp nhanh cơ sở dữ liệu mã định danh aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
5Đối với Linux, macOS hoặc Unix
aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
Cho cửa sổ
aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
Bạn cũng có thể sử dụng chức năng khôi phục từ kết xuất nhanh cơ sở dữ liệu để tạo các phiên bản CSDL thử nghiệm cho các lần chạy khô hoặc hoàn tác các thay đổi đã thực hiện trong quá trình tải
Lưu ý rằng việc khôi phục cơ sở dữ liệu từ kết xuất nhanh cơ sở dữ liệu sẽ tạo ra một phiên bản CSDL mới, giống như tất cả các phiên bản CSDL, có một mã định danh và điểm cuối duy nhất. Để khôi phục phiên bản CSDL mà không thay đổi điểm cuối, trước tiên hãy xóa phiên bản CSDL để bạn có thể sử dụng lại điểm cuối
Ví dụ: để tạo một phiên bản CSDL cho các lần chạy khô hoặc thử nghiệm khác, bạn cung cấp cho phiên bản CSDL mã định danh riêng của nó. Trong ví dụ,
aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
6" là định danh. Ví dụ này kết nối với phiên bản DB bằng cách sử dụng điểm cuối được liên kết với aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
6Đối với Linux, macOS hoặc Unix
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier AcmeRDS-2
\
--db-snapshot-identifier preload
Cho cửa sổ
aws rds restore-db-instance-from-db-snapshot ^
--db-instance-identifier AcmeRDS-2
^
--db-snapshot-identifier preload
Để sử dụng lại điểm cuối hiện có, trước tiên hãy xóa phiên bản CSDL, sau đó cung cấp cho cơ sở dữ liệu đã khôi phục cùng một mã định danh
Đối với Linux, macOS hoặc Unix
aws rds delete-db-instance \
--db-instance-identifier AcmeRDS
\
--final-db-snapshot-identifier AcmeRDS-Final
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
Cho cửa sổ
aws rds delete-db-instance ^
--db-instance-identifier AcmeRDS
^
--final-db-snapshot-identifier AcmeRDS-Final
aws rds restore-db-instance-from-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
Ví dụ trước chụp nhanh cơ sở dữ liệu cuối cùng của phiên bản CSDL trước khi xóa nó. Đây là tùy chọn nhưng được khuyến nghị
Bước 4. Cân nhắc tắt sao lưu tự động Amazon RDS
Không tắt sao lưu tự động nếu bạn cần thực hiện khôi phục tại thời điểm
Tắt sao lưu tự động sẽ xóa tất cả các bản sao lưu hiện có, vì vậy không thể khôi phục tại thời điểm sau khi tắt sao lưu tự động. Tắt sao lưu tự động là cách tối ưu hóa hiệu suất và không bắt buộc đối với tải dữ liệu. Kết xuất nhanh cơ sở dữ liệu thủ công không bị ảnh hưởng khi tắt sao lưu tự động. Tất cả kết xuất nhanh cơ sở dữ liệu thủ công hiện có vẫn có sẵn để khôi phục
Tắt sao lưu tự động giúp giảm thời gian tải khoảng 25 phần trăm và giảm dung lượng lưu trữ cần thiết trong khi tải. Nếu bạn định tải dữ liệu vào một phiên bản CSDL mới không chứa dữ liệu, thì việc tắt các bản sao lưu là một cách dễ dàng để tăng tốc độ tải và tránh sử dụng bộ nhớ bổ sung cần thiết cho các bản sao lưu. Tuy nhiên, trong một số trường hợp, bạn có thể định tải vào một phiên bản CSDL đã chứa dữ liệu. Nếu vậy, hãy cân nhắc lợi ích của việc tắt sao lưu so với tác động của việc mất khả năng thực hiện khôi phục tại thời điểm
Các phiên bản CSDL được bật sao lưu tự động theo mặc định [với thời gian lưu giữ một ngày]. Để tắt sao lưu tự động, hãy đặt khoảng thời gian lưu giữ sao lưu thành 0. Sau khi tải, bạn có thể bật lại sao lưu bằng cách đặt khoảng thời gian lưu giữ sao lưu thành giá trị khác không. Để bật hoặc tắt sao lưu, Amazon RDS sẽ tắt phiên bản CSDL và khởi động lại để bật hoặc tắt tính năng đăng nhập MariaDB hoặc MySQL
Sử dụng lệnh AWS CLI
aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
8 để đặt lưu giữ dự phòng về 0 và áp dụng thay đổi ngay lập tức. Việc đặt khoảng thời gian lưu giữ thành 0 yêu cầu khởi động lại phiên bản CSDL, vì vậy hãy đợi cho đến khi quá trình khởi động lại hoàn tất trước khi tiếp tụcĐối với Linux, macOS hoặc Unix
aws rds modify-db-instance \
--db-instance-identifier AcmeRDS
\
--apply-immediately \
--backup-retention-period 0
Cho cửa sổ
aws rds modify-db-instance ^
--db-instance-identifier AcmeRDS
^
--apply-immediately ^
--backup-retention-period 0
Bạn có thể kiểm tra trạng thái phiên bản CSDL của mình bằng lệnh AWS CLI
aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
9. Ví dụ sau đây hiển thị trạng thái phiên bản DB của phiên bản DB aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
4aws rds describe-db-instances --db-instance-identifier AcmeRDS
--query "*[].{DBInstanceStatus:DBInstanceStatus}"
Khi trạng thái phiên bản CSDL là
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier AcmeRDS-2
\
--db-snapshot-identifier preload
1, bạn đã sẵn sàng để tiếp tụcBước 5. Tải dữ liệu
Sử dụng tiện ích mysqlimport để tải các tệp phẳng vào Amazon RDS. Ví dụ sau yêu cầu mysqlimport tải tất cả các tệp có tên "sales" với phần mở rộng bắt đầu bằng "part_". Đây là một cách thuận tiện để tải tất cả các tệp được tạo trong ví dụ "tách"
Sử dụng tùy chọn --compress để giảm thiểu lưu lượng mạng. Tùy chọn --fields-terminated-by=',' được sử dụng cho các tệp CSV và tùy chọn --local chỉ định rằng dữ liệu đến được đặt trên máy khách. Nếu không có tùy chọn --local, phiên bản CSDL Amazon RDS sẽ tìm kiếm dữ liệu trên máy chủ cơ sở dữ liệu, vì vậy, hãy luôn chỉ định tùy chọn --local. Đối với tùy chọn --host, hãy chỉ định điểm cuối phiên bản CSDL của phiên bản RDS cho phiên bản CSDL MySQL
Trong các ví dụ sau, hãy thay thế
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier AcmeRDS-2
\
--db-snapshot-identifier preload
2 bằng tên người dùng chính cho phiên bản CSDL của bạnThay thế
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier AcmeRDS-2
\
--db-snapshot-identifier preload
3 bằng điểm cuối cho phiên bản CSDL của bạn. Một ví dụ về điểm cuối phiên bản DB là aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier AcmeRDS-2
\
--db-snapshot-identifier preload
4Đối với RDS cho MySQL phiên bản 8. 0. 15 trở lên, hãy chạy câu lệnh sau trước khi sử dụng tiện ích mysqlimport
aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
0Đối với Linux, macOS hoặc Unix
aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
1Cho cửa sổ
aws rds create-db-snapshot \
--db-instance-identifier AcmeRDS
\
--db-snapshot-identifier preload
2Đối với các lần tải dữ liệu rất lớn, hãy định kỳ thực hiện các ảnh chụp nhanh cơ sở dữ liệu bổ sung giữa các lần tải tệp và lưu ý những tệp nào đã được tải. Nếu xảy ra sự cố, bạn có thể dễ dàng tiếp tục từ điểm của ảnh chụp nhanh cơ sở dữ liệu cuối cùng, tránh tải lại lâu
Bước 6. Bật lại sao lưu tự động Amazon RDS
Sau khi tải xong, hãy bật sao lưu tự động Amazon RDS bằng cách đặt khoảng thời gian lưu giữ sao lưu về giá trị tải trước. Như đã lưu ý trước đó, Amazon RDS khởi động lại phiên bản CSDL, vì vậy hãy chuẩn bị sẵn sàng cho trường hợp ngừng hoạt động trong thời gian ngắn
Ví dụ sau sử dụng lệnh AWS CLI
aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
8 để bật sao lưu tự động cho phiên bản CSDL aws rds create-db-snapshot ^
--db-instance-identifier AcmeRDS
^
--db-snapshot-identifier preload
4 và đặt khoảng thời gian lưu giữ thành một ngày