Sao chép chéo giữa PostgreSQL và MySQL

Sao chép chéo giữa PostgreSQL và MySQL

Tôi sẽ phác thảo về sao chép chéo giữa PostgreSQL và MySQL, cũng như các phương pháp thiết lập sao chép chéo giữa hai máy chủ cơ sở dữ liệu. Thông thường, cơ sở dữ liệu được sao chép chéo được gọi là đồng nhất và đây là một phương pháp thuận tiện để di chuyển từ máy chủ RDBMS này sang máy chủ RDBMS khác.

Cơ sở dữ liệu PostgreSQL và MySQL thường được coi là cơ sở dữ liệu quan hệ, nhưng với các phần mở rộng bổ sung, chúng cung cấp khả năng NoSQL. Ở đây chúng ta sẽ thảo luận về việc sao chép giữa PostgreSQL và MySQL từ góc độ DBMS quan hệ.

Chúng tôi sẽ không mô tả toàn bộ hoạt động bên trong mà chỉ mô tả các nguyên tắc cơ bản để bạn có ý tưởng về cách định cấu hình sao chép giữa các máy chủ cơ sở dữ liệu, các ưu điểm, hạn chế và trường hợp sử dụng.

Thông thường, việc sao chép giữa hai máy chủ cơ sở dữ liệu giống hệt nhau được thực hiện ở chế độ nhị phân hoặc sử dụng truy vấn giữa máy chủ (còn gọi là nhà xuất bản, máy chủ chính hoặc hoạt động) và máy chủ phụ (người đăng ký, chế độ chờ hoặc thụ động). Mục đích của việc sao chép là cung cấp một bản sao thời gian thực của cơ sở dữ liệu chủ ở phía nô lệ. Trong trường hợp này, dữ liệu được truyền từ chủ sang nô lệ, nghĩa là từ chủ động sang thụ động, vì việc sao chép chỉ được thực hiện theo một hướng. Tuy nhiên, bạn có thể thiết lập sao chép giữa hai cơ sở dữ liệu theo cả hai hướng để dữ liệu được truyền từ cơ sở dữ liệu phụ sang cơ sở dữ liệu chính trong cấu hình hoạt động tích cực. Tất cả những điều này, bao gồm cả việc sao chép theo tầng, đều có thể thực hiện được giữa hai hoặc nhiều máy chủ cơ sở dữ liệu giống hệt nhau.

Cấu hình được mô tả có thể thực hiện được giữa các máy chủ cơ sở dữ liệu khác nhau. Máy chủ có thể được cấu hình để chấp nhận dữ liệu được sao chép từ một máy chủ cơ sở dữ liệu khác và vẫn duy trì ảnh chụp nhanh theo thời gian thực của dữ liệu được sao chép. MySQL và PostgreSQL cung cấp hầu hết các cấu hình này nội bộ hoặc thông qua các tiện ích mở rộng của bên thứ ba, bao gồm các phương thức nhật ký nhị phân, khóa ổ đĩa và các phương thức dựa trên câu lệnh và hàng.

Cần có bản sao chéo giữa MySQL và PostgreSQL để di chuyển một lần từ máy chủ cơ sở dữ liệu này sang máy chủ cơ sở dữ liệu khác. Các cơ sở dữ liệu này sử dụng các giao thức khác nhau nên không thể liên kết chúng trực tiếp. Để thiết lập trao đổi dữ liệu, bạn có thể sử dụng công cụ nguồn mở bên ngoài, ví dụ pg_chameleon.

pg_tắc kè hoa là gì

pg_chameleon là một hệ thống sao chép từ MySQL sang PostgreSQL bằng Python 3. Nó sử dụng thư viện sao chép mysql mã nguồn mở, cũng bằng Python. Hình ảnh hàng được trích xuất từ ​​các bảng MySQL và được lưu trữ dưới dạng đối tượng JSONB trong cơ sở dữ liệu PostgreSQL, sau đó được giải mã bằng hàm pl/pssql và được sao chép trong cơ sở dữ liệu PostgreSQL.

Đặc điểm của pg_chameleon

Nhiều lược đồ MySQL từ cùng một cụm có thể được sao chép sang một cơ sở dữ liệu PostgreSQL đích duy nhất trong cấu hình một-nhiều
Tên lược đồ nguồn và đích không thể giống nhau.
Dữ liệu sao chép có thể được lấy từ bản sao MySQL xếp tầng.
Các bảng không thể sao chép hoặc tạo ra lỗi sẽ bị loại trừ.
Mỗi chức năng sao chép được điều khiển bởi daemon.
Kiểm soát thông qua các tham số và tệp cấu hình dựa trên YAML.

Ví dụ

Tổ chức
vm1
vm2

phiên bản của hệ điều hành
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Phiên bản máy chủ DB
MySQL 5.7.26
PostgreSQL 10.5

cổng cơ sở dữ liệu
3306
5433

Địa chỉ IP
192.168.56.102
192.168.56.106

Để bắt đầu, hãy chuẩn bị tất cả các thành phần cần thiết để cài đặt pg_chameleon. Ví dụ này cài đặt Python 3.6.8, tạo và kích hoạt môi trường ảo.

$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstall

Sau khi cài đặt thành công Python3.6, bạn cần hoàn thành các yêu cầu còn lại, chẳng hạn như tạo và kích hoạt môi trường ảo. Ngoài ra, mô-đun pip được cập nhật lên phiên bản mới nhất và được sử dụng để cài đặt pg_chameleon. Các lệnh bên dưới cố ý cài đặt pg_chameleon 2.0.9, mặc dù phiên bản mới nhất là 2.0.10. Điều này là cần thiết để tránh những lỗi mới trong phiên bản cập nhật.

$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9

Sau đó, chúng tôi gọi pg_chameleon (tắc kè hoa là một lệnh) với đối số set_configuration_files để bật pg_chameleon và tạo các thư mục và tệp cấu hình mặc định.

(venv) $> chameleon set_configuration_files
creating directory /root/.pg_chameleon
creating directory /root/.pg_chameleon/configuration/
creating directory /root/.pg_chameleon/logs/
creating directory /root/.pg_chameleon/pid/
copying configuration  example in /root/.pg_chameleon/configuration//config-example.yml

Bây giờ chúng ta tạo một bản sao của config-example.yml dưới dạng default.yml để nó trở thành tệp cấu hình mặc định. Một tệp cấu hình mẫu cho ví dụ này được cung cấp dưới đây.

$> cat default.yml
---
#global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''

# type_override allows the user to override the default type conversion into a different one.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgres  destination connection
pg_conn:
  host: "192.168.56.106"
  port: "5433"
  user: "usr_replica"
  password: "pass123"
  database: "db_replica"
  charset: "utf8"

sources:
  mysql:
    db_conn:
      host: "192.168.56.102"
      port: "3306"
      user: "usr_replica"
      password: "pass123"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      world_x: pgworld_x
    limit_tables:
#      - delphis_mediterranea.foo
    skip_tables:
#      - delphis_mediterranea.bar
    grant_select_to:
      - usr_readonly
    lock_timeout: "120s"
    my_server_id: 100
    replica_batch_size: 10000
    replay_max_rows: 10000
    batch_retention: '1 day'
    copy_max_memory: "300M"
    copy_mode: 'file'
    out_dir: /tmp
    sleep_loop: 1
    on_error_replay: continue
    on_error_read: continue
    auto_maintenance: "disabled"
    gtid_enable: No
    type: mysql
    skip_events:
      insert:
        - delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #skips deletes on schema delphis_mediterranea
      update:

Tệp cấu hình trong ví dụ này là tệp pg_chameleon mẫu với các sửa đổi nhỏ để phù hợp với môi trường nguồn và đích và bên dưới là tổng quan về các phần khác nhau của tệp cấu hình.

Trong tệp cấu hình default.yml có một phần cài đặt chung, nơi bạn có thể quản lý các cài đặt như vị trí của tệp khóa, vị trí của nhật ký, thời gian lưu trữ nhật ký, v.v. Tiếp theo là phần ghi đè loại, trong đó một bộ quy tắc để ghi đè các loại trong quá trình sao chép. Ví dụ này mặc định có quy tắc ghi đè kiểu chuyển đổi tinyint(1) thành giá trị boolean. Trong phần tiếp theo, chúng tôi chỉ định chi tiết kết nối đến cơ sở dữ liệu đích. Trong trường hợp của chúng tôi, đây là cơ sở dữ liệu PostgreSQL, được chỉ định là pg_conn. Trong phần cuối cùng, chúng tôi chỉ ra dữ liệu nguồn, tức là các tham số kết nối của cơ sở dữ liệu nguồn, sơ đồ ánh xạ giữa cơ sở dữ liệu nguồn và đích, các bảng cần bỏ qua, thời gian chờ, bộ nhớ, kích thước gói. Lưu ý rằng "nguồn" là số nhiều, nghĩa là chúng ta có thể thêm nhiều cơ sở dữ liệu nguồn vào một cơ sở dữ liệu đích duy nhất để thiết lập cấu hình nhiều-một.

Cơ sở dữ liệu mẫu world_x chứa 4 bảng với các hàng mà cộng đồng MySQL đưa ra làm ví dụ. Nó có thể được tải xuống đây. Cơ sở dữ liệu mẫu có dạng kho lưu trữ tar và nén với hướng dẫn tạo và nhập hàng.

Trong cơ sở dữ liệu MySQL và PostgreSQL, một người dùng đặc biệt được tạo có cùng tên usr_replica. Trong MySQL, nó được cấp thêm quyền đọc cho tất cả các bảng được sao chép.

mysql> CREATE USER usr_replica ;
mysql> SET PASSWORD FOR usr_replica='pass123';
mysql> GRANT ALL ON world_x.* TO 'usr_replica';
mysql> GRANT RELOAD ON *.* to 'usr_replica';
mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica';
mysql> FLUSH PRIVILEGES;

Về phía PostgreSQL, cơ sở dữ liệu db_replica được tạo sẽ chấp nhận các thay đổi từ cơ sở dữ liệu MySQL. Người dùng usr_replica trong PostgreSQL được cấu hình tự động với tư cách là chủ sở hữu của hai lược đồ, pgworld_x và sch_chameleon, tương ứng chứa các bảng được sao chép thực tế và các bảng thư mục sao chép. Đối số create_replica_schema chịu trách nhiệm cấu hình tự động, như bạn sẽ thấy bên dưới.

postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASE

Cơ sở dữ liệu MySQL được cấu hình với một số thay đổi tham số để chuẩn bị cho việc sao chép như dưới đây. Bạn sẽ cần phải khởi động lại máy chủ cơ sở dữ liệu để những thay đổi có hiệu lực.

$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1

Bây giờ điều quan trọng là phải kiểm tra kết nối đến cả hai máy chủ cơ sở dữ liệu để không gặp vấn đề gì khi chạy lệnh pg_chameleon.

Trên nút PostgreSQL:

$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x

Trên nút MySQL:

$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

Ba lệnh pg_chameleon (tắc kè hoa) tiếp theo chuẩn bị môi trường, thêm nguồn và khởi tạo bản sao. Đối số create_replica_schema của pg_chameleon tạo ra một lược đồ mặc định (sch_chameleon) và một lược đồ sao chép (pgworld_x) trong cơ sở dữ liệu PostgreSQL, như chúng ta đã thảo luận. Đối số add_source thêm cơ sở dữ liệu nguồn vào cấu hình bằng cách đọc tệp cấu hình (default.yml) và trong trường hợp của chúng tôi, đó là mysql và init_replica khởi tạo cấu hình dựa trên các tham số trong tệp cấu hình.

$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debug

Đầu ra của ba lệnh này chỉ rõ rằng chúng đã được thực thi thành công. Mọi sự cố hoặc lỗi cú pháp đều được báo cáo bằng các thông báo đơn giản, rõ ràng kèm theo gợi ý về cách khắc phục sự cố.

Cuối cùng, chúng tôi bắt đầu sao chép bằng start_replica và nhận được thông báo thành công.

$> chameleon start_replica --config default --source mysql 
output: Starting the replica process for source mysql

Trạng thái sao chép có thể được truy vấn bằng đối số show_status và có thể xem lỗi bằng đối số show_errors.

Kết quả.

Như chúng tôi đã nói, mỗi chức năng sao chép đều được điều khiển bởi daemon. Để xem chúng, chúng ta truy vấn bảng quy trình bằng lệnh Linux ps, như hiển thị bên dưới.

Kết quả.

Bản sao không được coi là đã định cấu hình cho đến khi chúng tôi kiểm tra nó trong thời gian thực, như hiển thị bên dưới. Chúng tôi tạo một bảng, chèn một vài bản ghi vào cơ sở dữ liệu MySQL và gọi đối số sync_tables trong pg_chameleon để cập nhật các daemon và sao chép bảng có các bản ghi vào cơ sở dữ liệu PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables process for source mysql started.

Để xác nhận kết quả kiểm tra, chúng tôi truy vấn bảng từ cơ sở dữ liệu PostgreSQL và xuất ra các hàng.

$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
 n1 |  n2
----+-------
  1 | one
  2 | two

Nếu chúng ta đang thực hiện di chuyển, các lệnh pg_chameleon sau đây sẽ kết thúc quá trình di chuyển. Các lệnh cần được thực thi sau khi chúng tôi chắc chắn rằng các hàng của tất cả các bảng mục tiêu đã được sao chép và kết quả sẽ là cơ sở dữ liệu PostgreSQL được di chuyển gọn gàng mà không cần tham chiếu đến cơ sở dữ liệu nguồn hoặc sơ đồ sao chép (sch_chameleon).

$> chameleon stop_replica --config default --source mysql 
$> chameleon detach_replica --config default --source mysql --debug

Nếu muốn, bạn có thể sử dụng các lệnh sau để xóa sơ đồ sao chép và cấu hình ban đầu.

$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debug

Ưu điểm của pg_chameleon

Dễ dàng thiết lập và cấu hình.
Dễ dàng khắc phục sự cố và xác định các điểm bất thường bằng thông báo lỗi rõ ràng.
Các bảng đặc biệt bổ sung có thể được thêm vào để sao chép sau khi khởi tạo mà không thay đổi phần còn lại của cấu hình.
Có thể định cấu hình nhiều cơ sở dữ liệu nguồn cho một cơ sở dữ liệu đích duy nhất và điều này rất hữu ích nếu bạn đang kết hợp dữ liệu từ một hoặc nhiều cơ sở dữ liệu MySQL vào một cơ sở dữ liệu PostgreSQL duy nhất.
Bạn không cần phải sao chép các bảng đã chọn.

Nhược điểm của pg_chameleon

Chỉ được hỗ trợ với MySQL 5.5 trở lên làm cơ sở dữ liệu nguồn và PostgreSQL 9.5 trở lên làm cơ sở dữ liệu đích.
Mỗi bảng phải có một khóa chính hoặc khóa duy nhất, nếu không các bảng sẽ được khởi tạo trong quá trình init_replica nhưng không được sao chép.
Sao chép một chiều - chỉ từ MySQL sang PostgreSQL. Vì vậy, nó chỉ phù hợp với mạch “chủ động-thụ động”.
Nguồn chỉ có thể là cơ sở dữ liệu MySQL và việc hỗ trợ cơ sở dữ liệu PostgreSQL làm nguồn chỉ mang tính thử nghiệm và có giới hạn (tìm hiểu thêm đây)

Kết quả cho pg_chameleon

Phương pháp sao chép trong pg_chameleon rất tốt cho việc di chuyển cơ sở dữ liệu từ MySQL sang PostgreSQL. Nhược điểm đáng kể là việc sao chép chỉ diễn ra một chiều, vì vậy các chuyên gia cơ sở dữ liệu khó có thể muốn sử dụng nó cho bất kỳ mục đích nào khác ngoài việc di chuyển. Nhưng vấn đề sao chép một chiều có thể được giải quyết bằng một công cụ nguồn mở khác - SymmetricDS.

Đọc thêm trong tài liệu chính thức đây. Có thể tìm thấy trợ giúp dòng lệnh đây.

Tổng quan về SymmetricDS

SymmetricDS là một công cụ nguồn mở sao chép bất kỳ cơ sở dữ liệu nào sang bất kỳ cơ sở dữ liệu phổ biến nào khác: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird và các phiên bản cơ sở dữ liệu đám mây khác, ví dụ: Redshift và Azure, v.v. Các tính năng có sẵn: đồng bộ hóa cơ sở dữ liệu và tệp, sao chép cơ sở dữ liệu đa chủ, đồng bộ hóa được lọc, chuyển đổi và các tính năng khác. Đây là một công cụ Java và yêu cầu bản phát hành tiêu chuẩn của JRE hoặc JDK (phiên bản 8.0 trở lên). Tại đây, các thay đổi dữ liệu đối với trình kích hoạt trong cơ sở dữ liệu nguồn có thể được ghi lại và gửi đến cơ sở dữ liệu đích thích hợp dưới dạng lô.

Tính năng đối xứngDS

Công cụ này độc lập với nền tảng, nghĩa là hai hoặc nhiều cơ sở dữ liệu khác nhau có thể trao đổi dữ liệu.
Cơ sở dữ liệu quan hệ được đồng bộ hóa bằng cách sử dụng các bản ghi thay đổi dữ liệu, trong khi cơ sở dữ liệu dựa trên hệ thống tệp sử dụng đồng bộ hóa tệp.
Sao chép hai chiều bằng phương pháp Đẩy và Kéo dựa trên một bộ quy tắc.
Có thể truyền dữ liệu qua các mạng băng thông thấp và an toàn.
Tự động phục hồi khi các nút tiếp tục hoạt động sau khi xảy ra lỗi và tự động giải quyết xung đột.
API mở rộng mạnh mẽ và tương thích với đám mây.

Ví dụ

SymmetricDS có thể được cấu hình theo một trong hai cách:
Nút chính (mẹ) điều phối tập trung việc sao chép dữ liệu giữa hai nút phụ (con) và giao tiếp giữa các nút con chỉ xảy ra thông qua nút mẹ.
Một nút hoạt động (Nút 1) có thể giao tiếp để sao chép với một nút hoạt động khác (Nút 2) mà không cần qua trung gian.

Trong cả hai tùy chọn, việc trao đổi dữ liệu diễn ra bằng cách sử dụng Đẩy và Kéo. Trong ví dụ này chúng ta sẽ xem xét cấu hình tích cực-hoạt động. Sẽ mất quá nhiều thời gian để mô tả toàn bộ kiến ​​trúc, nghiên cứu của bạn cũng vậy. khả năng lãnh đạođể tìm hiểu thêm về thiết bị SymmetricDS.

Việc cài đặt SymmetricDS rất đơn giản: tải phiên bản mã nguồn mở của file zip do đó và mang nó ra bất cứ nơi nào bạn muốn. Bảng bên dưới cung cấp thông tin về vị trí cài đặt và phiên bản SymmetricDS trong ví dụ này, cũng như các phiên bản cơ sở dữ liệu, phiên bản Linux, địa chỉ IP và cổng cho cả hai nút.

Tổ chức
vm1
vm2

phiên bản của hệ điều hành
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Phiên bản máy chủ DB
MySQL 5.7.26
PostgreSQL 10.5

cổng cơ sở dữ liệu
3306
5832

Địa chỉ IP
192.168.1.107
192.168.1.112

Phiên bản đối xứngDS
Đối xứngDS 3.9
Đối xứngDS 3.9

Đường dẫn cài đặt SymmetricDS
/usr/local/đối xứng-server-3.9.20
/usr/local/đối xứng-server-3.9.20

Tên nút SymmetricDS
tập đoàn-000
cửa hàng-001

Ở đây, chúng tôi cài đặt SymmetricDS trong /usr/local/symmetric-server-3.9.20 và nhiều thư mục con cũng như tệp khác nhau sẽ được lưu trữ ở đó. Chúng tôi quan tâm đến các thư mục con mẫu và động cơ. Thư mục mẫu chứa các tệp cấu hình mẫu với các thuộc tính nút, cũng như các tập lệnh SQL mẫu để giúp bạn bắt đầu nhanh chóng.

Trong thư mục mẫu, chúng ta thấy ba tệp cấu hình có thuộc tính nút - tên hiển thị bản chất của nút trong một sơ đồ nhất định.

corp-000.properties
store-001.properties
store-002.properties

SymmetricDS có tất cả các tệp cấu hình cần thiết cho thiết kế 3 nút cơ bản (tùy chọn 1) và các tệp tương tự có thể được sử dụng cho thiết kế 2 nút (tùy chọn 2). Sao chép tệp cấu hình được yêu cầu từ thư mục mẫu vào các công cụ trên máy chủ vm1. Hóa ra như thế này:

$> cat engines/corp-000.properties
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false
db.user=root
db.password=admin123
registration.url=
sync.url=http://192.168.1.107:31415/sync/corp-000
group.id=corp
external.id=000

Nút này trong cấu hình SymmetricDS được gọi là corp-000 và kết nối cơ sở dữ liệu được xử lý bởi trình điều khiển jdbc mysql, trình điều khiển này sử dụng chuỗi kết nối ở trên và thông tin đăng nhập. Chúng tôi kết nối với cơ sở dữ liệu replica_db và các bảng sẽ được tạo trong quá trình tạo lược đồ. sync.url hiển thị nơi liên hệ với nút để đồng bộ hóa.

Nút 2 trên máy chủ vm2 được định cấu hình là store-001 và phần còn lại được chỉ định trong tệp node.properties bên dưới. Nút store-001 chạy cơ sở dữ liệu PostgreSQL và pgdb_replica là cơ sở dữ liệu sao chép. register.url cho phép máy chủ vm2 liên hệ với máy chủ vm1 và nhận chi tiết cấu hình từ nó.

$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001

Ví dụ SymmetricDS đã hoàn thành chứa các tham số để thiết lập sao chép hai chiều giữa hai máy chủ cơ sở dữ liệu (hai nút). Các bước bên dưới được thực hiện trên máy chủ vm1 (corp-000), thao tác này sẽ tạo một lược đồ mẫu có 4 bảng. Sau đó, chạy create-sym-tables bằng lệnh symadmin sẽ tạo các bảng thư mục nơi lưu trữ các quy tắc và hướng sao chép giữa các nút. Cuối cùng, dữ liệu mẫu được tải vào các bảng.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml
vm1$> ./symadmin --engine corp-000 create-sym-tables
vm1$> ./dbimport --engine corp-000 insert_sample.sql

Trong ví dụ này, các bảng mặt hàng và giá_bán_hàng được tự động định cấu hình để sao chép từ corp-000 đến cửa hàng-001 và các bảng bán hàng (sale_transaction và sale_return_line_item) được tự động định cấu hình để sao chép từ cửa hàng-001 sang corp-000. Bây giờ chúng ta tạo một lược đồ trong cơ sở dữ liệu PostgreSQL trên máy chủ vm2 (store-001) để chuẩn bị nhận dữ liệu từ corp-000.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xml

Hãy chắc chắn kiểm tra xem cơ sở dữ liệu MySQL trên vm1 có các bảng ví dụ và bảng danh mục SymmetricDS hay không. Lưu ý rằng các bảng hệ thống SymmetricDS (có tiền tố là sym_) hiện chỉ khả dụng trên nút corp-000 vì đó là nơi chúng tôi đã chạy lệnh create-sym-tables và sẽ quản lý việc sao chép. Và trong cơ sở dữ liệu trên nút store-001 sẽ chỉ có 4 bảng mẫu không có dữ liệu.

Tất cả. Môi trường đã sẵn sàng để chạy các quy trình máy chủ sym trên cả hai nút như hiển thị bên dưới.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &

Các mục nhật ký được gửi đến tệp nhật ký nền (symmetric.log) trong thư mục nhật ký trong thư mục cài đặt SymmetricDS, cũng như tới đầu ra tiêu chuẩn. Máy chủ sym hiện có thể được khởi tạo trên nút store-001.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &

Nếu bạn chạy quy trình máy chủ sym trên máy chủ vm2, nó cũng sẽ tạo các bảng danh mục SymmetricDS trong cơ sở dữ liệu PostgreSQL. Nếu bạn chạy quy trình máy chủ sym trên cả hai nút, chúng sẽ phối hợp với nhau để sao chép dữ liệu từ corp-000 sang store-001. Nếu sau vài giây chúng ta truy vấn cả 4 bảng ở cả hai bên thì chúng ta sẽ thấy việc sao chép đó đã thành công. Hoặc bạn có thể gửi bootstrap đến nút store-001 từ corp-000 bằng lệnh sau.

vm1$> ./symadmin --engine corp-000 reload-node 001

Tại thời điểm này, một bản ghi mới được chèn vào bảng mục trong cơ sở dữ liệu MySQL trên nút corp-000 (máy chủ: vm1) và bạn có thể kiểm tra bản sao của nó sang cơ sở dữ liệu PostgreSQL trên nút store-001 (máy chủ: vm2). Chúng tôi thấy thao tác Kéo để di chuyển dữ liệu từ corp-000 sang store-001.

mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
 item_id  |   name
----------+-----------
 11000001 | Yummy Gum
 22000002 | Jelly Bean
(2 rows)

Để thực hiện thao tác Đẩy nhằm di chuyển dữ liệu từ store-001 sang corp-000, chúng tôi chèn một bản ghi vào bảng sale_transaction và xác minh rằng việc sao chép thành công.

Kết quả.

Chúng tôi thấy việc thiết lập thành công bản sao hai chiều của các bảng mẫu giữa cơ sở dữ liệu MySQL và PostgreSQL. Để thiết lập sao chép cho bảng người dùng mới, hãy làm theo các bước sau: Ví dụ: chúng tôi tạo bảng t1 và định cấu hình các quy tắc sao chép của nó như sau. Bằng cách này, chúng tôi chỉ định cấu hình sao chép từ corp-000 sang store-001.

mysql> create table  t1 (no integer);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into sym_channel (channel_id,create_time,last_update_time) 
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

Sau đó, cấu hình sẽ được thông báo về sự thay đổi lược đồ, tức là việc bổ sung một bảng mới, sử dụng lệnh symadmin với đối số sync-triggers, lệnh này sẽ tạo lại các trình kích hoạt để ánh xạ các định nghĩa bảng. lược đồ gửi được thực thi để gửi các thay đổi lược đồ tới nút store-001 và bản sao của bảng t1 được định cấu hình.

vm1$> ./symadmin -e corp-000 --node=001 sync-triggers    
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1

Lợi ích của SymmetricDS

Dễ dàng cài đặt và cấu hình, bao gồm một bộ tệp được tạo sẵn với các tham số để tạo mạch ba nút hoặc hai nút.
Cơ sở dữ liệu đa nền tảng và nền tảng độc lập, bao gồm máy chủ, máy tính xách tay và thiết bị di động.
Sao chép bất kỳ cơ sở dữ liệu nào sang bất kỳ cơ sở dữ liệu nào khác cục bộ, trên mạng WAN hoặc trên đám mây.
Khả năng làm việc tối ưu với một vài cơ sở dữ liệu hoặc vài nghìn cơ sở dữ liệu để sao chép thuận tiện.
Phiên bản trả phí có GUI và hỗ trợ tuyệt vời.

Nhược điểm của SymmetricDS

Bạn cần xác định thủ công các quy tắc và hướng sao chép trên dòng lệnh thông qua các câu lệnh SQL để tải các bảng danh mục, điều này có thể gây bất tiện.
Việc thiết lập nhiều bảng để sao chép có thể tẻ nhạt trừ khi bạn sử dụng các tập lệnh để tạo các câu lệnh SQL xác định quy tắc và hướng sao chép.
Có quá nhiều thông tin được ghi lại trong nhật ký, đôi khi bạn cần phải dọn dẹp file nhật ký để không chiếm quá nhiều dung lượng.

Kết quả cho SymmetricDS

SymmetricDS cho phép bạn thiết lập sao chép hai chiều giữa hai, ba hoặc thậm chí vài nghìn nút để sao chép và đồng bộ hóa tệp. Đây là một công cụ độc đáo có thể thực hiện độc lập nhiều tác vụ, chẳng hạn như tự động khôi phục dữ liệu sau một thời gian dài ngừng hoạt động trên một nút, trao đổi dữ liệu an toàn và hiệu quả giữa các nút thông qua HTTPS, quản lý xung đột tự động dựa trên một bộ quy tắc, v.v. SymmetricDS thực hiện do đó, sao chép giữa bất kỳ cơ sở dữ liệu nào, nó có thể được sử dụng cho nhiều tình huống khác nhau, bao gồm di chuyển, di chuyển, phân phối, lọc và chuyển đổi dữ liệu trên các nền tảng.

Ví dụ được dựa trên chính thức hướng dẫn nhanh bởi SymmetricDS. TRONG hướng dẫn sử dụng Mô tả chi tiết các khái niệm khác nhau liên quan đến việc thiết lập sao chép với SymmetricDS.

Nguồn: www.habr.com

Thêm một lời nhận xét