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

Tổng quan về PostgreSQL &MySQL Cross Replication

Blog này nhằm giải thích tổng quan về sao chép chéo giữa PostgreSQL và MySQL, đồng thời thảo luận thêm về các phương pháp định cấu hình sao chép chéo giữa hai máy chủ cơ sở dữ liệu. Theo truyền thống, các cơ sở dữ liệu liên quan đến thiết lập sao chép chéo được gọi là cơ sở dữ liệu không đồng nhất, đây là một cách tiếp cận tốt để chuyển từ máy chủ RDBMS này sang máy chủ RDBMS khác.

Cả hai cơ sở dữ liệu PostgreSQL và MySQL đều là cơ sở dữ liệu RDBMS thông thường nhưng chúng cũng cung cấp khả năng NoSQL với các phần mở rộng được bổ sung để có được những gì tốt nhất của cả hai thế giới. Bài viết này tập trung vào cuộc thảo luận về nhân rộng giữa PostgreSQL và MySQL từ góc độ RDBMS.

Một lời giải thích đầy đủ về nội bộ của quá trình sao chép không nằm trong mục đích của blog này, tuy nhiên, một số yếu tố cơ bản sẽ được thảo luận để cung cấp cho khán giả hiểu về cách sao chép được định cấu hình giữa các máy chủ cơ sở dữ liệu, ưu điểm, hạn chế và có lẽ một số trường hợp sử dụng đã biết.

Nói chung, việc nhân bản giữa hai máy chủ cơ sở dữ liệu giống hệt nhau đạt được ở chế độ nhị phân hoặc chế độ truy vấn giữa nút chính (hay còn gọi là nhà xuất bản, chính hoặc đang hoạt động) và nút phụ (thuê bao, dự phòng 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ính ở phía máy chủ, nơi dữ liệu được chuyển từ máy chủ sang máy chủ, do đó hình thành một thiết lập chủ động-thụ động vì việc sao chép chỉ được cấu hình để xảy ra một chiều. Mặt khác, việc nhân bản giữa hai cơ sở dữ liệu có thể được định cấu hình theo cả hai cách để dữ liệu cũng có thể được chuyển từ phụ trở lại chủ, thiết lập một cấu hình hoạt động tích cực. Tất cả điều này có thể được cấu hình giữa hai hoặc nhiều máy chủ cơ sở dữ liệu giống hệt nhau, cũng có thể bao gồm một bản sao phân tầng. Cấu hình chủ động-tích cực hoặc chủ động-thụ động thực sự phụ thuộc vào nhu cầu kinh doanh, tính khả dụng của các tính năng đó trong cấu hình gốc hoặc sử dụng các giải pháp bên ngoài để định cấu hình và sự cân bằng áp dụng.

Cấu hình được đề cập ở trên có thể được thực hiện với các máy chủ cơ sở dữ liệu đa dạng, trong đó một máy chủ cơ sở dữ liệu 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 hoàn toàn khác và vẫn duy trì ảnh chụp nhanh theo thời gian thực của dữ liệu đang được sao chép. Cả hai máy chủ cơ sở dữ liệu MySQL và PostgreSQL đều cung cấp hầu hết các cấu hình được thảo luận ở trên hoặc trong nguyên tắc riêng của chúng hoặc với sự trợ giúp của các tiện ích mở rộng của bên thứ ba bao gồm phương pháp nhật ký nhị phân, phương pháp khối đĩa, phương pháp dựa trên câu lệnh và dựa trên hàng.

Yêu cầu cấu hình sao chép chéo giữa MySQL và PostgreSQL thực sự xuất hiện do nỗ lực di chuyển một lần để chuyển từ máy chủ cơ sở dữ liệu này sang máy chủ cơ sở dữ liệu khác. Vì cả hai cơ sở dữ liệu sử dụng các giao thức khác nhau nên chúng không thể trực tiếp nói chuyện với nhau. Để đạt được luồng giao tiếp đó, cần có một công cụ nguồn mở bên ngoài như pg_chameleon.

Bối cảnh của pg_chameleon

pg_chameleon là một hệ thống sao chép từ MySQL sang PostgreSQL được phát triển bằng Python 3. Nó sử dụng một thư viện mã nguồn mở được gọi là mysql-replication cũng được phát triển bằng Python. Chức năng này liên quan đến việc kéo hình ảnh hàng của bảng MySQL và lưu trữ chúng dưới dạng đối tượng JSONB vào cơ sở dữ liệu PostgreSQL, được giải mã thêm bằng hàm pl / pgsql và phát lại những thay đổi đó trên cơ sở dữ liệu PostgreSQL.

Các tính năng 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, tạo thành thiết lập sao chép nhiều đối một
  • Tên giản đồ nguồn và tên lược đồ đích có thể không giống nhau
  • Dữ liệu sao chép có thể được lấy từ bản sao xếp tầng MySQL
  • 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 quản lý với sự trợ giúp của daemon
  • Được kiểm soát với sự trợ giúp của các thông số và tệp cấu hình dựa trên cấu trúc YAML

Bản trình diễn

Host vm1 vm2
Phiên bản hệ điều hành Bản phát hành CentOS Linux 7.6 x86_64 Bản phát hành CentOS Linux 7.5 x86_64
Máy chủ cơ sở dữ liệu có phiên bản 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ị thiết lập với tất cả các điều kiện tiên quyết cần thiết để cài đặt pg_chameleon. Trong bản demo này, Python 3.6.8 được cài đặt, tạo một môi trường ảo và kích hoạt nó để sử dụng.

$> 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, các yêu cầu bổ sung khác được đáp ứng như tạo và kích hoạt môi trường ảo. Ngoài mô-đun pip đó được nâng cấp lên phiên bản mới nhất và nó được sử dụng để cài đặt pg_chameleon. Trong các lệnh bên dưới, pg_chameleon 2.0.9 đã được cố tình cài đặt trong khi phiên bản mới nhất là 2.0.10. Điều này được thực hiện để tránh bất kỳ lỗi nào mới xuất hiện 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

Bước tiếp theo là gọi pg_chameleon (chameleon là lệnh) với đối số set_configuration_files để cho phép pg_chameleon 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ờ, hãy tạo một bản sao của config-example.yml dưới dạng default.yml để biến nó thành tệp cấu hình mặc định. Tệp cấu hình mẫu được sử dụng cho bản trình diễn này được cung cấp bên dưới.

$> 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 được sử dụng trong bản trình diễn này là tệp mẫu đi kèm với pg_chameleon với các chỉnh sửa nhỏ để phù hợp với môi trường nguồn và đích, và sau đây là tóm tắt các phần khác nhau của tệp cấu hình.

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

Cơ sở dữ liệu “world_x” được sử dụng trong bản trình diễn này là cơ sở dữ liệu mẫu có 4 bảng chứa các hàng mẫu mà cộng đồng MySQL cung cấp cho mục đích demo và có thể tải xuống từ đây. Cơ sở dữ liệu mẫu có dạng tar và nén cùng với các hướng dẫn để tạo và nhập các hàng trong đó.

Một người dùng chuyên dụng được tạo trong cả cơ sở dữ liệu MySQL và PostgreSQL có cùng tên với usr_replica được cấp thêm các đặc quyền trên MySQL để có quyền truy cập đọc vào tất cả các bảng đang đượ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;

Cơ sở dữ liệu được tạo trên phía PostgreSQL sẽ chấp nhận các thay đổi từ cơ sở dữ liệu MySQL, được đặt tên là “db_replica”. Người dùng “usr_replica” trong PostgreSQL được tự động định cấu hình làm chủ sở hữu của hai lược đồ như “pgworld_x” và “sch_chameleon” chứa các bảng sao chép thực tế và bảng danh mục sao chép tương ứng. Cấu hình tự động này được thực hiện bởi đối số create_replica_schema, được chỉ ra thêm 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 định cấu hình với một số thay đổi tham số để chuẩn bị cho việc nhân bản, như được hiển thị bên dưới và nó yêu cầu khởi động lại máy chủ cơ sở dữ liệu để các 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

Tại thời điểm này, điều quan trọng là phải kiểm tra khả năng kết nối với cả hai máy chủ cơ sở dữ liệu để đảm bảo không có vấn đề gì khi các lệnh pg_chameleon được thực thi.

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 tiếp theo của pg_chameleon (tắc kè hoa) là nơi nó thiết lập môi trường, thêm nguồn và khởi tạo một bản sao. Đối số “create_replica_schema” của pg_chameleon tạo lược đồ mặc định (sch_chameleon) và lược đồ sao chép (pgworld_x) trong cơ sở dữ liệu PostgreSQL như đã được 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), trong trường hợp này là “mysql”, trong khi “init_replica” khởi tạo cấu hình dựa trên cài đặt của 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 trên là tự giải thích cho biết mức độ thành công của mỗi lệnh với một thông báo đầu ra hiển nhiên. Mọi lỗi hoặc lỗi cú pháp đều được đề cập rõ ràng trong các thông báo đơn giản và thuần túy, từ đó đề xuất và nhắc nhở các hành động sửa chữa.

Bước cuối cùng là bắt đầu sao chép với “start_replica”, sự thành công của nó được chỉ ra bởi một gợi ý đầu ra như được hiển thị bên dưới.

$> 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” trong khi có thể xem lỗi bằng đối số “show_errors”.

$> chameleon show_status --source mysql  
OUTPUT: 
  Source id  Source name    Type    Status    Consistent    Read lag    Last read    Replay lag    Last replay
-----------  -------------  ------  --------  ------------  ----------  -----------  ------------  -------------
          1  mysql          mysql   running   No            N/A                      N/A

== Schema mappings ==
Origin schema    Destination schema
---------------  --------------------
world_x          pgworld_x

== Replica status ==
---------------------  ---
Tables not replicated  0
Tables replicated      4
All tables             4
Last maintenance       N/A
Next maintenance       N/A
Replayed rows
Replayed DDL
Skipped rows
---------------------  ---
$> chameleon show_errors --config default 
output: There are no errors in the log

Như đã thảo luận trước đó rằng mỗi chức năng sao chép được quản lý với sự trợ giúp của daemon, có thể được xem bằng cách truy vấn bảng quy trình bằng lệnh Linux “ps”, được trình bày bên dưới.

$>  ps -ef|grep chameleon
root       763     1  0 19:20 ?        00:00:00 /u01/media/mysql_samp_dbs/world_x-db/venv/bin/python3.6 /u01/media/mysq l_samp_dbs/world_x-db/venv/bin/chameleon start_replica --config default --source mysql
root       764   763  0 19:20 ?        00:00:01 /u01/media/mysql_samp_dbs/world_x-db/venv/bin/python3.6 /u01/media/mysq l_samp_dbs/world_x-db/venv/bin/chameleon start_replica --config default --source mysql
root       765   763  0 19:20 ?        00:00:00 /u01/media/mysql_samp_dbs/world_x-db/venv/bin/python3.6 /u01/media/mysq l_samp_dbs/world_x-db/venv/bin/chameleon start_replica --config default --source mysql

Không có thiết lập sao chép nào hoàn tất cho đến khi nó được đưa vào thử nghiệm “áp dụng thời gian thực”, được mô phỏng như bên dưới. Nó liên quan đến việc tạo một bảng và chèn một vài bản ghi trong cơ sở dữ liệu MySQL, sau đó, đối số “sync_tables” của pg_chameleon được gọi để cập nhật các daemon để sao chép bảng cùng với các bản ghi của nó 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.

Kiểm tra được xác nhận bằng cách truy vấn bảng từ cơ sở dữ liệu PostgreSQL để phản ánh 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 đó là một dự án di chuyển thì các lệnh pg_chameleon sau đây sẽ đánh dấu sự kết thúc của nỗ lực di chuyển. Các lệnh sẽ được thực thi sau khi xác nhận rằng các hàng của tất cả các bảng đích đã được sao chép trên toàn bộ và kết quả sẽ là một cơ sở dữ liệu PostgreSQL được di chuyển rõ ràng mà không có bất kỳ tham chiếu nào đến cơ sở dữ liệu nguồn hoặc lược đồ sao chép (sch_chameleon).

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

Theo tùy chọn, các lệnh sau sẽ loại bỏ cấu hình nguồn và lược đồ sao chép.

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

Ưu điểm của việc sử dụng pg_chameleon

  • Thiết lập đơn giản và cấu hình ít phức tạp hơn
  • Khắc phục sự cố không đau đớn và phát hiện sự bất thường với đầu ra lỗi dễ hiểu
  • Các bảng adhoc bổ sung có thể được thêm vào bản sao sau khi khởi chạy mà không làm thay đổi bất kỳ cấu hình nào khác
  • Nhiều nguồn có thể được định cấu hình cho một cơ sở dữ liệu đích duy nhất, điều này rất hữu ích trong các dự án hợp nhất để hợp nhất dữ liệu từ một hoặc nhiều cơ sở dữ liệu MySQL thành một cơ sở dữ liệu PostgreSQL duy nhất
  • Có thể bỏ qua các bảng đã chọn để sao chép

Nhược điểm của việc sử dụng pg_chameleon

  • Chỉ được hỗ trợ từ MySQL 5.5 trở đi dưới dạng cơ sở dữ liệu gốc và PostgreSQL 9.5 trở đi cho cơ sở dữ liệu đích
  • Yêu cầu mọi bảng phải có khóa chính hoặc khóa duy nhất, nếu không, các bảng được khởi tạo trong quá trình init_replica nhưng chúng sẽ không sao chép được
  • Sao chép một cách, tức là MySQL sang PostgreSQL. Do đó, giới hạn việc sử dụng nó chỉ ở một thiết lập chủ động-thụ động
  • Cơ sở dữ liệu nguồn chỉ có thể là cơ sở dữ liệu MySQL trong khi hỗ trợ cho cơ sở dữ liệu PostgreSQL dưới dạng nguồn đang thử nghiệm với những hạn chế hơn nữa (nhấp vào đây để tìm hiểu thêm)

pg_chameleon Tóm tắt

Phương pháp nhân rộng do pg_chameleon cung cấp rất thuận lợi cho việc di chuyển cơ sở dữ liệu MySQL sang PostgreSQL. Tuy nhiên, một trong những hạn chế đáng kể của việc sao chép một chiều có thể không khuyến khích các chuyên gia cơ sở dữ liệu chấp nhận nó cho bất kỳ điều gì khác ngoài việc di chuyển. Hạn chế này của sao chép một chiều có thể được giải quyết bằng cách sử dụng một công cụ mã nguồn mở khác có tên là SymmetricDS.

Để nghiên cứu chi tiết hơn về tiện ích, vui lòng tham khảo tài liệu chính thức tại đây. Tham chiếu dòng lệnh có thể được lấy từ đây.

Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

Tổng quan về SymmetricDS

SymmetricDS là một công cụ mã nguồn mở có khả nă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, từ danh sách các máy chủ cơ sở dữ liệu phổ biến như 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 dựa trên đám mây khác như Redshift và Azure, v.v. Một số dịch vụ bao gồm đồng bộ hóa cơ sở dữ liệu và tệp, sao chép đa tổng thể, đồng bộ hóa được lọc và chuyển đổi. Công cụ được phát triển bằng Java, yêu cầu phiên bản tiêu chuẩn (phiên bản 8.0 trở lên) của JRE hoặc JDK. Chức năng liên quan đến các thay đổi dữ liệu được trình kích hoạt nắm bắt tại cơ sở dữ liệu nguồn và định tuyến nó đến cơ sở dữ liệu đích tham gia dưới dạng các lô gửi đi

Tính năng của SymmetricDS

  • Nền tảng độc lập, có nghĩa là hai hoặc nhiều cơ sở dữ liệu khác nhau có thể giao tiếp với nhau, bất kỳ cơ sở dữ liệu nào với bất kỳ cơ sở dữ liệu nào khác
  • Cơ sở dữ liệu quan hệ đạt được đồng bộ hóa bằng cách sử dụng thu thập dữ liệu thay đổi trong khi các hệ thống dựa trên hệ thống tệp sử dụng đồng bộ hóa tệp
  • Sao chép hai hướng bằng cách sử dụng phương pháp Đẩy và Kéo, được thực hiện dựa trên các quy tắc đã đặt
  • Truyền dữ liệu cũng có thể diễn ra qua các mạng băng thông thấp và an toàn
  • Tự động khôi phục trong khi tiếp tục lại một nút bị sự cố và giải quyết xung đột tự động
  • Đã sẵn sàng cho đám mây và chứa các API tiện ích mở rộng mạnh mẽ

Bản trình diễn

SymmetricDS có thể được định cấu hình theo một trong hai tùy chọn:

  • Một nút chính (cha) hoạt động như một trung gian tập trung điều phối việc sao chép dữ liệu giữa hai nút phụ (con), trong đó giao tiếp giữa hai nút con chỉ có thể xảy ra thông qua nút cha.
  • Một nút đang hoạt động (node1) có thể sao chép đến và từ một nút đang hoạt động khác (node2) mà không cần bất kỳ trung gian nào.

Trong cả hai tùy chọn, giao tiếp giữa các nút xảy ra thông qua các sự kiện “Đẩy” và “Kéo”. Trong bản trình diễn này, một cấu hình hoạt động tích cực giữa hai nút sẽ được giải thích. Kiến trúc đầy đủ có thể đầy đủ, do đó, độc giả được khuyến khích xem hướng dẫn sử dụng có sẵn tại đây để tìm hiểu thêm về nội dung bên trong của SymmetricDS.

Cài đặt SymmetricDS đơn giản bằng cách tải xuống phiên bản mã nguồn mở của tệp zip từ đây và giải nén nó ở một vị trí thuận tiện. Chi tiết về vị trí cài đặt và phiên bản của SymmetricDS trong bản trình diễn này như trong bảng bên dưới, cùng với các chi tiết khác liên quan đến các phiên bản cơ sở dữ liệu, phiên bản Linux, địa chỉ ip và cổng giao tiếp cho cả các nút tham gia.

Host vm1 vm2
Phiên bản hệ điều hành Bản phát hành CentOS Linux 7.6 x86_64 Bản phát hành CentOS Linux 7.6 x86_64
Phiên bản máy chủ cơ sở dữ liệu 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 SymmetricDS SymmetricDS 3.9 SymmetricDS 3.9
Vị trí cài đặt SymmetricDS /usr/local/symmetric-server-3.9.20 /usr/local/symmetric-server-3.9.20
Tên nút SymmetricDS corp-000 store-001

Trang chủ cài đặt trong trường hợp này là “/usr/local/symmetric-server-3.9.20” sẽ là thư mục chính của SymmetricDS, chứa nhiều thư mục con và tệp tin khác. Hai trong số các thư mục con có tầm quan trọng hiện nay là “mẫu” và “động cơ”. Thư mục mẫu chứa các mẫu tệp cấu hình thuộc tính nút ngoài các tập lệnh SQL mẫu để bắt đầu bản trình diễn nhanh.

Có thể thấy ba tệp cấu hình thuộc tính nút sau đây trong thư mục “mẫu” với các tên cho biết bản chất của nút trong một thiết lập nhất định.

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

Vì SymmetricDS đi kèm với tất cả các tệp cấu hình cần thiết để hỗ trợ thiết lập 3 nút cơ bản (tùy chọn 1), nên thuận tiện khi sử dụng các tệp cấu hình tương tự để thiết lập thiết lập 2 nút (tùy chọn 2). Tệp cấu hình dự định được sao chép từ thư mục “mẫu” sang “công cụ” trên máy chủ vm1 và có dạng như bên dưới.

$> 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

Tên của nút này trong cấu hình SymmetricDS là “corp-000” với kết nối cơ sở dữ liệu được xử lý bằng trình điều khiển mysql jdbc bằng cách sử dụng chuỗi kết nối như đã nêu ở trên cùng với thông tin đăng nhập. Cơ sở dữ liệu để kết nối là “replica_db” và các bảng sẽ được tạo trong quá trình tạo lược đồ mẫu. “Sync.url” biểu thị vị trí 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ới phần còn lại của các chi tiết như được định cấu hình trong tệp node.properties, được hiển thị bên dưới. Nút “store-001” chạy cơ sở dữ liệu PostgreSQL, với “pgdb_replica” là cơ sở dữ liệu để nhân rộng. “Register.url” cho phép máy chủ “vm2” giao tiếp với máy chủ “vm1” để lấy chi tiết cấu hình.

$> 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

Bản demo mặc định được cấu hình trước của SymmetricDS chứa các cài đặt để 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 dưới đây được thực hiện trên máy chủ vm1 (corp-000), sẽ tạo một lược đồ mẫu có 4 bảng. Hơn nữa, việc thực thi “create-sym-table” bằng lệnh “symadmin” sẽ tạo ra các bảng danh mục lưu trữ và kiểm soát các quy tắc và hướng sao chép giữa các nút. Cuối cùng, các bảng demo được tải với dữ liệu mẫu.

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

Các bảng demo “item” và “item_selling_price” được tự động định cấu hình để sao chép từ corp-000 đến store-001 trong khi các bảng giảm giá (sale_transaction và sale_return_line_item) được định cấu hình tự động sao chép từ store-001 đến corp-000. Bước tiếp theo là tạo lược đồ mẫu trong cơ sở dữ liệu PostgreSQL trên máy chủ vm2 (store-001), để chuẩn bị cho nó 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

Điều quan trọng là xác minh sự tồn tại của bảng demo và bảng danh mục SymmetricDS trong cơ sở dữ liệu MySQL trên vm1 ở giai đoạn này. Lưu ý, các bảng hệ thống SymmetricDS (bảng có tiền tố “sym_”) chỉ khả dụng trong nút corp-000 tại thời điểm này, vì đó là nơi lệnh “create-sym -boards” được thực thi, đây sẽ là nơi để kiểm soát và quản lý việc nhân rộng. Ngoài ra, cơ sở dữ liệu nút store-001 sẽ chỉ có 4 bảng demo không có dữ liệu trong đó.

Môi trường hiện đã sẵn sàng để khởi động các quy trình máy chủ “sym” trên cả hai nút, như hình dưới đây.

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

Các mục nhập nhật ký đều được gửi đến tệp nhật ký nền (đối xứng.log) trong thư mục nhật ký trong vị trí cài đặt SymmetricDS cũng như đầ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 &

Việc khởi động tiến trình máy chủ “sym” trên máy chủ vm2 cũng sẽ tạo các bảng danh mục SymmetricDS trong cơ sở dữ liệu PostgreSQL. Việc khởi động tiến trình máy chủ “sym” trên cả hai nút sẽ giúp chúng phối hợp với nhau để sao chép dữ liệu từ corp-000 sang store-001. Sau một vài giây, truy vấn tất cả bốn bảng ở hai bên sẽ hiển thị kết quả sao chép thành công. Ngoài ra, tải ban đầu cũng có thể được gửi đến nút store-001 từ corp-000 bằng lệnh dưới đây.

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 “item” trong cơ sở dữ liệu MySQL tại nút corp-000 (host:vm1) và nó có thể được xác minh là đã sao chép thành công sang cơ sở dữ liệu PostgreSQL tại nút store-001 (host:vm2 ). Điều này hiển thị sự kiện "Kéo" dữ liệu từ tập đoàn-000 đến cửa hàng-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)

Có thể đạt được sự kiện “Đẩy” dữ liệu từ store-001 đến corp-000 bằng cách chèn một bản ghi vào bảng “sale_transaction” và xác nhận nó để sao chép qua.

pgdb_replica=# insert into "sale_transaction" ("tran_id", "store_id", "workstation", "day", "seq") values (1000, '001', '3', '2007-11-01', 100);
vm1$> [[email protected] ~]#  mysql -uroot -p'admin123' -D replica_db -e "select * from sale_transaction";
+---------+----------+-------------+------------+-----+
| tran_id | store_id | workstation | day        | seq |
+---------+----------+-------------+------------+-----+
|     900 | 001      | 3           | 2012-12-01 |  90 |
|    1000 | 001      | 3           | 2007-11-01 | 100 |
|    2000 | 002      | 2           | 2007-11-01 | 200 |
+---------+----------+-------------+------------+-----+

Điều này đánh dấu cấu hình thành công của việc sao chép hai chiều các bảng demo giữa cơ sở dữ liệu MySQL và PostgreSQL. Trong khi đó, cấu hình sao chép cho các bảng người dùng mới được tạo có thể đạt được bằng cách sử dụng các bước sau. Một bảng ví dụ “t1” được tạo cho bản demo và các quy tắc sao chép của nó được định cấu hình theo quy trình bên dưới. Các bước chỉ định cấu hình bản sao 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 được thông báo về sự thay đổi lược đồ khi thêm một bảng mới bằng cách gọi 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 để khớp với các định nghĩa bảng. Sau đó, thực thi “send-schema” để gửi các thay đổi giản đồ đến nút store-001, sau đó bản sao của bảng “t1” sẽ được định cấu hình thành công.

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

Ưu điểm của việc sử dụng SymmetricDS

  • Cài đặt và cấu hình dễ dàng bao gồm một tập hợp các tệp thông số được định cấu hình trước để tạo thiết lập 3 nút hoặc 2 nút
  • Đã bật cơ sở dữ liệu đa nền tảng và độc lập với nền tảng 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, cho dù tại chỗ, WAN hay đám mây
  • Có khả năng xử lý tối ưu một vài cơ sở dữ liệu đến vài nghìn cơ sở dữ liệu để sao chép dữ liệu một cách liền mạch
  • Phiên bản thương mại của phần mềm cung cấp bảng điều khiển quản lý theo hướng GUI với gói hỗ trợ tuyệt vời

Nhược điểm của việc sử dụng SymmetricDS

  • Cấu hình dòng lệnh thủ công có thể liên quan đến việc xác định các quy tắc và hướng sao chép 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 cho việc quản lý
  • Việc thiết lập một số lượng lớn các bảng để sao chép sẽ là một nỗ lực toàn diện, trừ khi một số hình thức tập lệnh được sử dụng để tạo các câu lệnh SQL xác định các quy tắc và hướng sao chép
  • Nhiều thông tin ghi nhật ký làm lộn xộn tệp nhật ký, do đó yêu cầu bảo trì tệp nhật ký định kỳ để không cho phép tệp nhật ký lấp đầy đĩa

Tóm tắt SymmetricDS

Các tài nguyên liên quan ClusterControl cho MySQL Replication ClusterControl cho PostgreSQL So sánh các kho dữ liệu cho PostgreSQL - MVCC so với InnoDB

SymmetricDS cung cấp khả năng thiết lập sao chép hai chiều giữa 2 nút, 3 nút, v.v. cho vài nghìn nút để sao chép dữ liệu và đạt được đồng bộ hóa tệp. Đây là một công cụ duy nhất thực hiện nhiều nhiệm vụ bảo trì tự phục hồi như tự động khôi phục dữ liệu sau thời gian ngừng hoạt động kéo dài trong một nút, giao tiếp an toàn và hiệu quả giữa các nút với sự trợ giúp của HTTPS và quản lý xung đột tự động dựa trên các quy tắc đã đặt , etc. The essential feature of replicating any database to any other database makes SymmetricDS ready to be deployed for a number of use cases including migration, version and patch upgrade, distribution, filtering and transformation of data across diverse platforms.

The demo was created by referring to the official quick-start tutorial of SymmetricDS which can be accessed from here. The user guide can be found here, which provides a detailed account of various concepts involved in a SymmetricDS replication setup.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kết nối Cơ sở dữ liệu MySQL với Trang web PHP

  2. ADDDATE () so với DATE_ADD () trong MySQL:Sự khác biệt là gì?

  3. mysql_num_rows ():đối số được cung cấp không phải là tài nguyên kết quả MySQL hợp lệ

  4. Sự khác biệt giữa MySQL và SQL là gì?

  5. MySQL Group By và Sum tổng giá trị của cột khác