Cái nào sau đây là một tính năng của mysql?

PostgreSQL phiên bản 10 đã giới thiệu một số tính năng và cải tiến thú vị cho bối cảnh hiện có của PostgreSQL. Một tính năng như vậy là sao chép logic bằng cách sử dụng khung xuất bản và đăng ký. AWS cung cấp hai tùy chọn PostgreSQL được quản lý. Amazon RDS cho PostgreSQL và Amazon Aurora PostgreSQL. Bài đăng này thảo luận về cách sử dụng khung hiện có để tạo bản sao chỉ có quyền đọc tự quản lý từ Amazon RDS cho PostgreSQL hoặc Aurora. Bạn có thể áp dụng quy trình tương tự để tạo bản sao chỉ có quyền đọc trên PostgreSQL dựa trên Amazon Elastic Compute Cloud (Amazon EC2), Amazon RDS for PostgreSQL và Aurora PostgreSQL

Amazon RDS cho PostgreSQL hỗ trợ khung đăng ký và xuất bản từ phiên bản công cụ 10. 4 trở lên. Aurora PostgreSQL hỗ trợ khung đăng ký và xuất bản từ phiên bản công cụ 2. 2 (tương thích với 10. 6) trở lên

Tổng quan về giải pháp

Một triển khai điển hình của Amazon RDS cho cơ sở dữ liệu PostgreSQL và Aurora PostgreSQL liên quan đến việc ghi ứng dụng được cung cấp bởi một phiên bản chính và các lần đọc được giảm tải cho các bản sao được quản lý của AWS. Tuy nhiên, một số trường hợp sử dụng kinh doanh nhất định cũng yêu cầu bạn thiết lập một phiên bản bản sao tự quản lý bổ sung để phục vụ các ứng dụng xuôi dòng độc lập khác chỉ cần hoạt động trên một tập hợp con dữ liệu (chỉ một số cơ sở dữ liệu hoặc một số bảng). Việc sao chép một phần như vậy cho phép các bản sao riêng lẻ xử lý song song các phần độc lập của khối lượng công việc, do đó làm tăng khả năng mở rộng tổng thể của hệ thống

Với việc giới thiệu bản sao logic bằng cách sử dụng khung đăng ký và xuất bản, vai trò

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
9 hiện có thể thiết lập bản sao tự quản lý tùy chỉnh cho PostgreSQL phiên bản 10 trở lên. Vì sao chép logic là một giải pháp cấp cơ sở dữ liệu và có khả năng sao chép một số hoặc tất cả các bảng của cơ sở dữ liệu, bạn vẫn nên xem xét các bản sao chỉ có quyền đọc do AWS tạo cho Amazon RDS for PostgreSQL và Aurora PostgreSQL để phục vụ lưu lượng đọc của ứng dụng sản xuất chính . Để biết thêm thông tin, hãy xem Làm việc với Bản sao chỉ có quyền đọc của PostgreSQL trong Amazon RDS và Sao chép với Amazon Aurora PostgreSQL. Chúng tôi đề cập đến những cân nhắc thêm xung quanh các tính năng của sao chép logic sau trong bài đăng này

Sao chép logic sử dụng mô hình xuất bản và đăng ký trong đó người đăng ký lấy dữ liệu từ các ấn phẩm mà họ đăng ký. Sao chép logic bắt đầu bằng cách sao chép ảnh chụp nhanh dữ liệu hiện có ban đầu trên cơ sở dữ liệu của nhà xuất bản. Khi hoàn tất, các thay đổi trên nhà xuất bản (CHÈN, CẬP NHẬT và XÓA) sẽ được chuyển tiếp tới người đăng ký trong thời gian gần như thực. Người đăng ký áp dụng dữ liệu theo cùng thứ tự mà các cam kết đã được thực hiện đối với nhà xuất bản để đảm bảo tính nhất quán của giao dịch

Điều này trái ngược với sao chép vật lý, trong đó các địa chỉ khối chính xác được sử dụng để sao chép từng byte một

Sơ đồ sau đây biểu thị luồng dữ liệu để sao chép và đồng bộ hóa dữ liệu ban đầu

Cái nào sau đây là một tính năng của mysql?

Quy trình bao gồm các bước sau

  1. Phiên bản nhà xuất bản sử dụng lệnh CREATE PUBLICATION để chỉ định một nhóm bảng có thay đổi dữ liệu nhằm mục đích sao chép
  2. Phiên bản người đăng ký sử dụng lệnh CREATE SUBSCRIPTION để chỉ định tên và chi tiết kết nối của ấn phẩm
  3. Việc thực thi thành công CREATE SUBSCRIPTION sẽ kích hoạt kết nối TCP với phiên bản nhà xuất bản
  4. Một kết nối đến từ người đăng ký sẽ kích hoạt việc tạo một khe sao chép logic tạm thời tại nhà xuất bản (dưới plugin giải mã logic có tên là
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    0)
    • Đối với ngữ cảnh, một phiên bản PostgreSQL theo dõi các giao dịch của nó trong một loạt các tệp nhị phân 16 MB được sắp xếp có tên là nhật ký ghi trước (WAL). Bắt đầu với PostgreSQL v11, bạn có thể sửa đổi kích thước WAL trong quá trình khởi tạo phiên bản. Phiên bản Amazon RDS cho PostgreSQL v11 và công cụ Aurora phiên bản 3. 0 (tương thích với PostgreSQL 11. 4) phiên bản có kích thước WAL là 64 MB
    • Khe sao chép cho phép phiên bản chính theo dõi khoảng cách phía sau bản dự phòng và ngăn việc xóa các tệp WAL mà bản dự phòng có thể vẫn cần. Các vị trí như vậy khi được sử dụng trong bối cảnh sao chép luồng được gọi là các vị trí sao chép vật lý. Tuy nhiên, trong trường hợp sao chép logic, các vị trí này được sử dụng trong phần bổ sung giải mã (
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      0, trong trường hợp sử dụng này) chuyển đổi các thay đổi được đọc từ WAL sang giao thức sao chép logic và lọc dữ liệu như đã chỉ định (theo thông số kỹ thuật của ấn phẩm, trong phần này . Giải mã này cho phép trích xuất tất cả các thay đổi liên tục thành một định dạng mạch lạc, dễ hiểu, có thể được giải thích mà không cần biết chi tiết về trạng thái bên trong của cơ sở dữ liệu. Các vị trí như vậy, khi được sử dụng trong bối cảnh sao chép logic, được gọi là các vị trí sao chép logic
    • Theo mặc định, vị trí logic tạm thời được tạo với danh pháp
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      2, trong đó
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      3 là tên đăng ký được chỉ định với CREATE SUBSCRIPTION. Hành vi này có thể được sửa đổi bằng cách sử dụng tùy chọn
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      4 của lệnh
  5. Dữ liệu ban đầu trong các bảng đã đăng ký hiện có được sử dụng để tạo ảnh chụp nhanh và được chuyển đến người đăng ký thông qua lệnh COPY
  6. Nhân viên đồng bộ ban đầu tại thuê bao nhận ảnh chụp nhanh, ánh xạ tải trọng trong ảnh chụp nhanh tới các bảng cục bộ và áp dụng các hoạt động cần thiết

Sơ đồ sau đây minh họa luồng dữ liệu giao dịch (sau khi ảnh chụp nhanh ban đầu được sao chép)

Cái nào sau đây là một tính năng của mysql?

Quy trình bao gồm các bước sau

  1. Sau khi quá trình đồng bộ hóa ban đầu hoàn tất, một vị trí cố định được tạo (theo mặc định, có cùng tên với đăng ký) thông qua plugin giải mã logic có tên là
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    0. Vị trí này tiếp tục tồn tại cùng với tuổi thọ của đăng ký liên quan
  2. Quá trình
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    6 bắt đầu trích xuất tất cả các thay đổi liên tục từ các WAL nhận được (được gọi là giải mã logic)
  3. Plugin chuyển đổi các thay đổi được truy xuất từ ​​WAL thành giao thức sao chép logic và lọc dữ liệu theo thông số kỹ thuật xuất bản
  4. Sau đó, dữ liệu được chuyển đến
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    7, thiết bị này sẽ ánh xạ thêm tải trọng vào các bảng cục bộ và áp dụng các thay đổi riêng lẻ

điều kiện tiên quyết

Trước khi triển khai giải pháp này, bạn phải thiết lập bản sao hợp lý. Để biết hướng dẫn về Amazon RDS cho PostgreSQL, hãy xem Bản sao logic cho PostgreSQL trên Amazon RDS. Để biết hướng dẫn về Aurora PostgreSQL, hãy xem Định cấu hình sao chép logic

Cân nhắc với sao chép hợp lý

Một số cân nhắc phổ biến khi sử dụng sao chép logic bao gồm những điều sau đây

  • Mỗi ấn phẩm chỉ tồn tại trong một cơ sở dữ liệu
  • Khi viết bài này, các ấn phẩm chỉ chứa các bảng. Bạn không thể sao chép những điều sau đây
    • Chế độ xem, chế độ xem cụ thể hóa, bảng gốc phân vùng hoặc bảng nước ngoài
    • đối tượng lớn. Loại dữ liệu
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      8 được hỗ trợ và có thể được sử dụng như một giải pháp thay thế
    • trình tự. Các cột nối tiếp hoặc nhận dạng được hỗ trợ bởi các chuỗi được sao chép như một phần của bảng
  • Bạn có thể thêm bảng vào nhiều ấn phẩm, nếu cần
  • Các ấn phẩm có thể có nhiều người đăng ký
  • Mỗi đăng ký nhận các thay đổi thông qua một vị trí sao chép và các vị trí sao chép tạm thời bổ sung được tạo để đồng bộ hóa dữ liệu ban đầu của các bảng có sẵn
  • Các định nghĩa lược đồ tại nhà xuất bản không được sao chép cho người đăng ký. Bạn phải tự tạo lược đồ đối tượng tại thuê bao để bắt đầu sao chép đối tượng đó. Ví dụ: một bảng được tạo tại nhà xuất bản (sau khi bắt đầu sao chép) yêu cầu các hành động sau tại người đăng ký
    • Tạo một lược đồ tương tự
    • Sửa đổi đăng ký (sử dụng ALTER SUBSCRIPTION). Chúng tôi minh họa quá trình này sau trong bài
  • Các bảng được khớp giữa nhà xuất bản và người đăng ký thông qua tên được chỉ định của họ
    • Thứ tự các cột trong bảng người đăng ký không cần khớp với thứ tự của nhà xuất bản
    • Kiểu dữ liệu của các cột giữa đối tượng của nhà xuất bản và đối tượng của người đăng ký không cần phải khớp miễn là bạn có thể chuyển đổi biểu diễn văn bản của dữ liệu tại nhà xuất bản thành loại dữ liệu đích tại người đăng ký. Ví dụ: xuất bản cột
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      9 hoạt động với người đăng ký sử dụng cột
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      10, nhưng sẽ xảy ra lỗi nếu cố gắng xuất bản
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      9 thành cột
      rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
      CREATE PUBLICATION
       
      rds-master=> select * from pg_replication_slots;
       slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
      -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
      (0 rows)
      12. Chúng tôi minh họa hành vi này sau trong bài
    • Bảng người đăng ký cũng có thể có các cột bổ sung không được cung cấp bởi bảng đã xuất bản. Các cột như vậy được điền các giá trị mặc định như được chỉ định trong DDL của bảng người đăng ký

Đang cài đặt

Đối với bài đăng này, chúng tôi sử dụng Amazon RDS cho PostgreSQL (phiên bản 10. 4) làm phiên bản nhà xuất bản và phiên bản PostgreSQL tự quản lý (phiên bản 10. 6) với tư cách là người đăng ký. Nhà xuất bản dự định sao chép tất cả các bảng của cơ sở dữ liệu

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
13 cho người đăng ký tự quản lý

Bạn có thể sử dụng cơ sở dữ liệu người đăng ký làm nhà xuất bản cho các cơ sở dữ liệu xuôi dòng khác bằng cách xác định các ấn phẩm của chính nó (cấu hình sao chép theo tầng). Tuy nhiên, để đơn giản, bài đăng này giả định rằng ứng dụng coi người đăng ký (cơ sở dữ liệu PostgreSQL tự quản lý) là chỉ đọc

Để rõ ràng về hình ảnh, các câu lệnh SQL bao gồm các lời nhắc psql sau (được tùy chỉnh qua tệp psqlrc) cho nhà xuất bản và người đăng ký

  • rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    14 – Trỏ tới phiên bản nhà xuất bản
  • rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    15 – Trỏ tới phiên bản người đăng ký

Đoạn mã sau liệt kê siêu dữ liệu kết nối và quyền

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
7

Tạo các đối tượng tại nhà xuất bản trước khi thiết lập sao chép

Để tạo các đối tượng của bạn tại nhà xuất bản trước khi thiết lập bản sao, hãy hoàn thành các bước sau

  1. Tạo một bảng có tên là
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    16 trong phiên bản nhà xuất bản và điền một số giá trị. Xem đoạn mã sau

    rds-master=> create table table_before_publication (id1 int, id2 int);
     	CREATE TABLE
     
    rds-master=> insert into table_before_publication   values (1,2);
    INSERT 0 1
     
    rds-master=> select * from pg_replication_slots;
    slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)

    Hiện tại không có vị trí sao chép nào trong phiên bản nhà xuất bản

  2. Tạo một ấn phẩm cho tất cả các bảng trong cơ sở dữ liệu có tên là
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    13. Xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)

    Rõ ràng từ đoạn mã trước, việc tạo một phiên bản xuất bản không nhất thiết có nghĩa là tạo các vị trí sao chép

  3. Tạo một đăng ký từ tự quản lý Xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    1

    Bạn cần có một lược đồ tại người đăng ký để quá trình chụp nhanh ban đầu hoàn tất

  4. Tạo một bảng có tên bảng phù hợp và không nhất thiết phải là một lược đồ phù hợp hoàn chỉnh. Xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    3

    Tạo thành công đăng ký tại phiên bản người đăng ký tự quản lý sẽ kích hoạt tạo vị trí tại nhà xuất bản. Nếu tham số

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    18 được đặt thành 1 (bật) tại phiên bản nhà xuất bản thì bạn cần cập nhật chuỗi lệnh
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    19 của lệnh
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    30 và bao gồm các tham số SSL như
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    31,
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    32, v.v. Để biết thông tin về cách tải xuống chứng chỉ cho RDS PostgreSQL, xem Sử dụng SSL/TLS để mã hóa kết nối với phiên bản CSDL

  5. Đối với trường hợp sử dụng này, vì một bảng có sẵn đã có trong nhà xuất bản nên một vị trí tạm thời bổ sung cũng được tạo. Xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    9

  6. Xác minh tính nhất quán của dữ liệu giữa nhà xuất bản và tự quản lý Cả ảnh chụp nhanh ban đầu và các thay đổi mới đều phải được sao chép. Xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    0

    Trong mã trước,

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    33 và
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    34 được điền bằng các chuỗi trống và
    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    35 nhận một số nguyên. Để liệt kê trạng thái tại nhà xuất bản, hãy xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    4

    Để liệt kê trạng thái tại thuê bao tự quản lý, hãy xem đoạn mã sau

    rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
    CREATE PUBLICATION
     
    rds-master=> select * from pg_replication_slots;
     slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
    -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
    (0 rows)
    5

    Mã trước sử dụng các giá trị sau

    • srsubstate đại diện cho trạng thái sao chép
      • i - Khởi tạo,
      • d – Dữ liệu đang được sao chép,
      • s – Đồng bộ hóa,
      • r – Feady (sao chép bình thường)
    • srsublsn đại diện cho LSN cuối cho các trạng thái s và r

Tạo các đối tượng tại nhà xuất bản sau khi thiết lập bản sao

Để tạo các đối tượng của bạn tại nhà xuất bản sau khi thiết lập bản sao, hãy xem đoạn mã sau

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
6

Lược đồ phải tồn tại ở thuê bao tự quản lý để sao chép hoạt động. Sau khi tạo, hãy làm mới siêu dữ liệu bằng cách sử dụng

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
36. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
0

Vấn đề chuyển đổi kiểu dữ liệu giữa các lược đồ đối tượng

Chúng tôi đã sao chép thành công đối tượng của nhà xuất bản (với cột

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
9) sang đối tượng của người đăng ký (với cột
rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
10). Để minh họa thêm về hành vi với các chuyển đổi không tương thích, hãy tạo một bảng có tên
rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
39 với loại dữ liệu
rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
9 trong phiên bản nhà xuất bản. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
1

Tạo một bảng có tên là

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
39 với kiểu dữ liệu
rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
12 trong thể hiện thuê bao. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
2

Làm mới đăng ký và xác thực dữ liệu. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
3

Trong đoạn mã trước, trạng thái đăng ký (

rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
93) vẫn là
rds-master=> CREATE PUBLICATION alltables FOR ALL TABLES;
CREATE PUBLICATION
 
rds-master=> select * from pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
94 (dữ liệu đang được sao chép); . Đánh giá nhanh các bản ghi lỗi do người đăng ký tạo ra phác thảo trạng thái sao chép thực tế. Nhân viên sao chép hợp lý cố gắng đồng bộ hóa ban đầu qua COPY nhưng không chuyển đổi kiểu dữ liệu. Khi nhân viên tiếp tục thử lại, đoạn trích sau đây liên tục được sao chép trong nhật ký lỗi tương ứng

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
4

Cập nhật và xóa trên nhà xuất bản

Siêu dữ liệu của ấn phẩm đề xuất các hoạt động CẬP NHẬT và XÓA được sao chép. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
5

Tuy nhiên, thao tác CẬP NHẬT không thành công nếu sơ đồ bảng không liên quan đến danh tính bản sao. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
6

Một bảng đã xuất bản phải có một danh tính bản sao để sao chép các hoạt động CẬP NHẬT và XÓA. Cấu hình này sửa đổi thông tin được ghi vào nhật ký giao dịch (WAL) và giúp xác định các hàng liên quan. Các tùy chọn có thể là như sau

  • DEFAULT – Ghi lại giá trị cũ của các cột của khóa chính (nếu có)
  • SỬ DỤNG CHỈ MỤC – Ghi lại các giá trị cũ của các cột được bao phủ bởi chỉ mục được đặt tên, phải là duy nhất, không một phần, không thể trì hoãn và chỉ bao gồm các cột được đánh dấu KHÔNG NULL
  • ĐẦY ĐỦ – Ghi lại các giá trị cũ của tất cả các cột trong hàng
  • NOTHING – Không ghi thông tin gì về hàng cũ

Nếu bất kỳ tùy chọn nào khác FULL được đặt ở phía nhà xuất bản, thì danh tính bản sao bao gồm các cột giống hoặc ít hơn cũng phải được đặt ở phía người đăng ký

Để đơn giản, danh tính bản sao được đặt thành ĐẦY ĐỦ trong bài đăng này. Cấu hình ĐẦY ĐỦ ngụ ý rằng toàn bộ hàng của bảng trở thành khóa và toàn bộ hàng giá trị cũ được lưu trữ. Cách tiếp cận này có thể trở nên không hiệu quả từ quan điểm lưu trữ (so với các tùy chọn khác) và chỉ nên được sử dụng như là phương sách cuối cùng cho các đối tượng không thể có khóa chính hoặc chỉ mục. Ví dụ: bạn có thể sử dụng danh tính bản sao là ĐẦY ĐỦ với các bảng kiểm tra và lịch sử, thường không có khóa chính hoặc chỉ mục được liên kết. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
7

Dọn dẹp

Sau khi hoàn thành hướng dẫn này, bạn nên dọn sạch tài nguyên của mình. Xem đoạn mã sau

rds-master=> create table table_before_publication (id1 int, id2 int);
 	CREATE TABLE
 
rds-master=> insert into table_before_publication   values (1,2);
INSERT 0 1
 
rds-master=> select * from pg_replication_slots;
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
(0 rows)
8

Bản tóm tắt

Bài đăng này minh họa nhu cầu song song hóa các phần độc lập của khối lượng công việc và các cách để đạt được điều đó bằng cách sao chép dữ liệu một phần. Bạn có thể sử dụng phương pháp này để đạt được các bản nâng cấp có thời gian ngừng hoạt động thấp, chia cơ sở dữ liệu thành các phân đoạn, thực hiện các thay đổi lược đồ trực tuyến, v.v. Chúng tôi khuyến khích bạn sử dụng khung sao chép logic của PostgreSQL cộng đồng trong môi trường Amazon RDS for PostgreSQL và Aurora PostgreSQL của bạn để thiết lập sao chép một phần dữ liệu mà không cần quản lý tài nguyên trung gian. Như mọi khi, AWS hoan nghênh phản hồi, vì vậy vui lòng để lại suy nghĩ hoặc câu hỏi của bạn trong phần bình luận


Thông tin về các Tác giả

Cái nào sau đây là một tính năng của mysql?

Nikhil Khokhar là Kiến trúc sư giải pháp tại AWS. Anh gia nhập AWS vào năm 2016, chuyên xây dựng và hỗ trợ các giải pháp truyền dữ liệu giúp khách hàng phân tích và khai thác giá trị từ dữ liệu của họ. Khi rảnh rỗi, anh tận dụng kỹ năng in 3D của mình để giải quyết các vấn đề hàng ngày

Bản sao có phải là một tính năng của MySQL không?

Tính năng sao chép trong MySQL hỗ trợ sao chép một chiều, không đồng bộ, trong đó một máy chủ đóng vai trò là nguồn, trong khi một hoặc nhiều máy chủ khác đóng vai trò là bản sao.

Có trình kích hoạt nào trong MySQL không?

Trình kích hoạt MySQL là đối tượng cơ sở dữ liệu được liên kết với bảng . Nó sẽ được kích hoạt khi một hành động xác định được thực thi cho bảng. Trình kích hoạt có thể được thực thi khi bạn chạy một trong các câu lệnh MySQL sau trên bảng. CHÈN, CẬP NHẬT và XÓA và nó có thể được gọi trước hoặc sau sự kiện.

Trình kích hoạt MySQL là gì?

Trình kích hoạt là đối tượng cơ sở dữ liệu có tên được liên kết với bảng và kích hoạt khi một sự kiện cụ thể xảy ra đối với bảng . Một số cách sử dụng trình kích hoạt là để thực hiện kiểm tra các giá trị được chèn vào bảng hoặc để thực hiện các phép tính trên các giá trị liên quan đến một bản cập nhật.

Bản sao MySQL là gì?

Trong MySQL, sao chép liên quan đến cơ sở dữ liệu nguồn ghi lại mọi thay đổi được thực hiện đối với dữ liệu được giữ trong một hoặc nhiều cơ sở dữ liệu trong một tệp đặc biệt được gọi là nhật ký nhị phân. Once the replica instance has been initialized, it creates two threaded processes.