Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysqldump Các phương pháp hay nhất:Phần 2 - Hướng dẫn di chuyển

Trong phần thứ hai và phần cuối cùng của các phương pháp hay nhất mysqldump, chúng tôi sẽ nói về cách xử lý việc di chuyển và nhập cho các đối tượng và chế độ xem chương trình được lưu trữ từ cơ sở dữ liệu MySQL của bạn. Để đọc thêm về các điều kiện tiên quyết cho hoạt động kết xuất và khôi phục thành công cho cơ sở dữ liệu MySQL lớn, hãy xem phần đầu tiên của loạt bài blog gồm 2 phần này.

Nhập các thủ tục, hàm và trình kích hoạt đã lưu trữ của bạn

Theo mặc định, mysqldump nhập các lượt xem và trình kích hoạt. Tuy nhiên nó không nhập các thủ tục, chức năng và sự kiện. Để nhập các thủ tục và chức năng, --routines nên chỉ định tùy chọn và để nhập sự kiện, --events tùy chọn nên được chỉ định.

1. Nhập trình kích hoạt

Mysqldump sẽ cố gắng loại bỏ tất cả các trình kích hoạt trong cơ sở dữ liệu của bạn theo mặc định. Để có thể kết xuất triggers của bảng , bạn phải có TRIGGER đặc quyền cho bảng. Nếu người dùng kết xuất không có đặc quyền này, các trình kích hoạt sẽ bị bỏ qua và mysqldump sẽ không gây ra bất kỳ lỗi nào. Vì vậy, đừng ngạc nhiên nếu bạn không thấy bất kỳ trình kích hoạt nào được nhập vào cơ sở dữ liệu đích của bạn.

2. Nhập sự kiện

Để nhập sự kiện, bạn cần chỉ định --events trong khi gọi tiện ích mysqldump. Tùy chọn này yêu cầu EVENT đặc quyền cho các cơ sở dữ liệu đó. Một lần nữa, mysqldump sẽ âm thầm bỏ qua các sự kiện nếu người dùng kết xuất không có các đặc quyền này, ngay cả khi bạn đã chỉ định tùy chọn –event khi gọi mysqldump.

3. Nhập các hàm và thủ tục được lưu trữ

Để nhập quy trình, bạn cần chỉ định --routines trong khi gọi tiện ích mysqldump. Tùy chọn này yêu cầu global select đặc quyền. Ngay cả trong trường hợp này, mysqldump sẽ âm thầm bỏ qua các chức năng và thủ tục nếu người dùng kết xuất không có các đặc quyền này, ngay cả khi bạn đã chỉ định --routines tùy chọn khi gọi mysqldump.

3.1 Nhập các hàm không xác định

Một chương trình được lưu trữ để sửa đổi dữ liệu được gọi là không xác định nếu nó không tạo ra kết quả có thể lặp lại. Ví dụ hàm rand (). Đặc biệt khó khăn khi sử dụng các chức năng như vậy trong các thiết lập sao chép, vì chúng có thể dẫn đến dữ liệu khác nhau trên nguồn và bản sao. Để kiểm soát những khả năng đó, MySQL áp đặt một số hạn chế nhất định đối với việc tạo hàm nếu nhật ký nhị phân được bật.

Theo mặc định, cho CREATE FUNCTION tuyên bố được chấp nhận, ít nhất một trong số DETERMINISTIC , NO SQL hoặc READS SQL DATA phải được chỉ định rõ ràng. Nếu không sẽ xảy ra lỗi:

 ERROR 1418 (HY000) tại dòng 181:Hàm này không có DỮ LIỆU SQL DETERMINISTIC, KHÔNG SQL hoặc READS trong khai báo và ghi nhật ký nhị phân được bật (bạn * có thể * muốn sử dụng log_bin_trust_funable kém an toàn hơn) 

Vì vậy, nếu hàm của bạn không được khai báo là xác định trên nguồn và ghi nhật ký nhị phân được bật trên đích của bạn, bạn sẽ thấy lỗi trên trong quá trình khôi phục kết xuất. Do đó, điều quan trọng là phải hiểu trước bản chất xác định của các chức năng của bạn. Nếu bạn chắc chắn rằng các chức năng của mình là xác định, bạn cần bật log_bin_trust_function_creators cấu hình tại điểm đến của bạn trước khi khôi phục hoạt động. Khi được bật, MySQL cho phép tạo các hàm như vậy ngay cả khi bật ghi nhật ký nhị phân.

Phương pháp hay nhất cho mysqldump:Phần 2 - Hướng dẫn Di chuyển Nhấp để Tweet

4. Đặc tính BẢO MẬT của SQL của các quy trình và chế độ xem được lưu trữ.

MySQL cho phép SQL SECURITY ngữ cảnh được chỉ định trong khi tạo các chương trình hoặc chế độ xem cửa hàng. SQL SECURITY đặc tính có thể được chỉ định là DEFINER hoặc INVOKER . Nếu SQL_SECURITY ngữ cảnh là DEFINER , quy trình thực thi bằng cách sử dụng các đặc quyền của tài khoản có tên trong quy trình DEFINER mệnh đề. Nếu ngữ cảnh là INVOKER , quy trình thực thi bằng cách sử dụng các đặc quyền của người dùng gọi nó. Giá trị mặc định là DEFINER .

Nếu bạn đang khôi phục các quy trình hoặc chế độ xem đã lưu trữ, bạn cần đảm bảo tài khoản người dùng xác định tồn tại trên cơ sở dữ liệu đích của bạn với các khoản trợ cấp thích hợp. Nếu không, bạn sẽ gặp lỗi trong quá trình khôi phục.

Hãy chứng minh điều này bằng một ví dụ liên quan đến chế độ xem.

Giả sử bạn có Chế độ xem V1 và V2 được định nghĩa như sau:

 CREATE definer =admin @ '%' XEM mydb.V1 AS SELECT * FROM solution_table; CREATE definer =admin @ '%' XEM mydb.V2 AS SELECT * FROM V1 trong đó num1 =10; 

Lưu ý rằng các chế độ xem được kết xuất theo mặc định bởi mysqldump và nếu bạn không có 'quản trị viên' của người dùng trên đích của mình, bạn sẽ gặp phải lỗi dưới đây trong quá trình khôi phục:

 Lệnh không thành công với lỗi - ERROR 1449 (HY000) tại dòng 206 trong tệp:'/mysql_data/mysqldump/sqldump_1582457155758.sql':Người dùng được chỉ định làm trình xác định ('admin' @ '%') không tồn tại. 

Lưu ý rằng không chỉ đủ để đảm bảo người dùng tồn tại mà người dùng cần có các đặc quyền thích hợp để thực thi các chế độ xem. Ví dụ:nếu người dùng admin@'%' tồn tại trên đích, nhưng không có SELECT trên cơ sở dữ liệu mydb, bạn sẽ thấy thông báo lỗi:

 '/mysql_data/mysqldump/sqldump_1582456858033.sql':View' mydb.V2 'tham chiếu đến (các) bảng hoặc (các) cột hoặc (các) hàm không hợp lệ hoặc bộ định nghĩa / người gọi của chế độ xem thiếu quyền sử dụng chúng.  

Bạn quan tâm đến giải pháp MySQL được quản lý đầy đủ?

Để tìm hiểu thêm về cách một nhà cung cấp DBaaS như ScaleGrid có thể giúp bạn quản lý cơ sở dữ liệu MySQL của mình, hãy xem trang MySQL của chúng tôi. Xem cách ScaleGrid có thể cho phép bạn tập trung nhiều hơn vào việc phát triển sản phẩm của mình và ít hơn vào việc quản lý cơ sở dữ liệu.

Tóm tắt

Trong loạt bài blog gồm 2 phần này, chúng tôi đã đề cập đến các điều kiện tiên quyết quan trọng mà bạn cần xử lý để đảm bảo di chuyển thành công dữ liệu và các chương trình được lưu trữ của bạn. Lưu trữ MySQL ScaleGrid xử lý các nguyên tắc này để cung cấp trải nghiệm mượt mà trong khi nhập dữ liệu của bạn vào nền tảng ScaleGrid. Vui lòng chia sẻ với chúng tôi kinh nghiệm của bạn và các phương pháp hay nhất mà bạn áp dụng để di chuyển dữ liệu MySQL!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi phân tách có điều kiện:Xuất dữ liệu từ SQL Server sang Cơ sở dữ liệu Oracle và MySQL

  2. Cách chèn các cột đã chọn từ tệp CSV vào cơ sở dữ liệu MySQL bằng TẢI THÔNG TIN DỮ LIỆU

  3. Định dạng ngày MySQL

  4. Tái tạo một máy chủ MySQL Master bị sự cố trong thiết lập sao chép bán đồng bộ

  5. MySQL INT nghĩa