91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL和PostgreSQL之間如何跨數據庫進行復制

發布時間:2021-11-09 10:51:01 來源:億速云 閱讀:230 作者:iii 欄目:關系型數據庫

這篇文章主要介紹“MySQL和PostgreSQL之間如何跨數據庫進行復制”,在日常操作中,相信很多人在MySQL和PostgreSQL之間如何跨數據庫進行復制問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL和PostgreSQL之間如何跨數據庫進行復制”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

涉及跨數據庫復制的databases一般被稱作異構databases。這是將數據從一種RDBMS server復制到另一種server的一種很好的方法。

PostgreSQL和MySQL都是傳統的RDBMS數據庫,但是他們也提供了NoSQL的能力。本文主要從RDBMS的角度討論PostgreSQL和MySQL之間的復制問題。不對復制內部機制做詳細介紹,只對一些基本元素、如何配置、有點、限制以及一些使用案例進行闡述。

通常情況下,兩個種類相同的主備之間使用binary模式或者query模式進行復制。復制的目的在于,在備上能夠得到主的實時備份數據,從而形成一個active-passive模式(因為復制只配置單向復制)。當然,也可以配置成向同步,構建active-active模式。

可以在兩個不同數據庫server之間配置上面的兩種模式,其中一個數據庫server可以配置從另外一個完全不同的數據庫server上接收副本數據并維護副本數據的實時快照。MySQL和PostgreSQL通過原生機制或者第三方插件(包括binlog方法、磁盤塊方法、基于語句和行的方法)完成上面提到的模式。

由于MySQL和PostgreSQL使用不同的復制協議,所以他們之間不能互相交互。為了達到通信流的目的,可以使用一個開源軟件pg_chameleon。

pg_chameleon背景

pg_chameleon是由python3開發的MySQL to PG的復制工具。該插件也會使用一個mysql-replication的開源庫,該庫也是由Python3開發。從MySQL表中拉取行鏡像并存儲成JSONB形式,然后同步到PG數據庫。PG數據庫通過pl/pgsql進行解析并回放。

pg_chameleon特性

1、同一個集群中多個MySQL schema可以復制到一個PG database,形成many-to-one復制模式。

2、源和目的schema名可以不一樣

3、復制數據可以從mysql級聯副本中拉取。

4、會排除復制失敗的表及復制過程中產生錯誤的表。

5、每個復制功能通過守護進程進行管理

6、配置參數和配置文件以yaml結構進行控制。

Demo

Host

Vm1

Vm2

操作系統

Centos linux release 7.6 x86_64

Centos linux release 7.5 x86_64

數據庫版本

MySQL5.7.26

PostgreSQL10.5

數據庫端口號

3306

5433

IP地址

192.168.56.102

192.168.56.106

首先需要安裝Python,他在創建虛擬環境以及激活的時候會用到。

$> wget  
$> tar -xJf Python-3.6.8.tar.xz$> cd Python-3.6.8$> ./configure --enable-optimizations$> make altinstall

安裝成功后需要創建并激活虛擬環境。另外需要將pip模塊升級到最新版本。pg_chameleon最新版本是2.0.10,為了不引入新的bug,建議先使用2.0.9版本。

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

下一步需要通過set_configuration_files配置啟用pg_chameleon,并創建默認路徑以及配置文件:

(venv) $> chameleon set_configuration_filescreating directory /root/.pg_chameleoncreating 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

此時,創建一個config-example.yml文件作為默認的配置文件。一個簡單的配置例子如下所示:

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

本文使用的配置文件是pg_chameleon提供的樣例文件改造過的,以適應源和目標環境。下面是配置文件改造的摘要。

默認情況下.yml文件有“global settings”段,用以控制詳細信息比如鎖文件位置、日志位置、日志保留期等。接著是“type override”段,這部分是在復制期間重寫類型的集合。默認情況下使用樣本類型重寫規則,即將tinyint(1)轉換成布爾值。然后是“pg_conn”,是目標數據庫連接的詳細信息。最后一部分是源數據庫信息,控制源數據庫的連接、源和目標直接的schema映射、需要跳過不復制的表、時間超時、內存等配置。注意,“sources”表示可以有多個源。

本文使用的demo中有一個“world_x”database,包括4個表,MySQL社區提供了下載位置:https://dev.mysql.com/doc/index-other.html。

在MySQL和PostgreSQL中都需要創建一個專用用戶“usr_replica”,用以復制。在MySQL中該用戶需要賦予額外的權限用以訪問需要復制表:

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;

PostgreSQL段創建一個“db_replica”database用以接收MySQL數據。PG中的“usr_replica”用戶自動配置成兩個schemas(pgworld_x和sch_chameleon)的擁有者。這兩個schema包含實際復制表和catalog表。通過create_replica_schema參數自動配置:

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

MySQL配置如下,需重啟服務才能生效:

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

此時需要測試下連接是否正常,保證執行pg_chameleon命令時不出問題:

PostgreSQL端:

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

MySQL端:

psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

下面pg_chameleon的3個命令時搭建環境時執行,添加源并初始化一個備。“create_replica_schema”創建默認的schema(sch_chameleon)以及復制的schema(pgworld_x)。“add_source”通過讀取配置文件信息添加source database,本文中是“mysql”。“init_replica”基于配置文件進行初始化。

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

上面的三個命令執行成功后,會分別輸出明顯的執行成功信息。任何錯誤和語法錯誤都會清晰的輸出。

最后一步是通過“start_replica”啟動復制:

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

通過show_status顯示復制狀態:

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

通過ps命令查看守護進程:

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

直到“real-time 回放”搭建復制才能完成。涉及創建表、向MySQL數據庫中插入數據;PG的sync_tables命令更新守護進程并將表記錄復制到PG:

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.

測試確認復制正常:

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

如果是一個遷移需求,執行下面命令標記遷移結束。在所有需要復制的表復制完成后執行這些命令:

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

下面的命令可選:

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

Pros of Using pg_chameleon

安裝并配置比較簡單

錯誤日志易看懂

無需更改任何配置,初始化完成后可以添加額外的復制表

可配置成多源復制

可以指定不復制哪些表

Cons of Using pg_chameleon

僅支持MySQL5.5及其以上的版本到Pg9.5及其以上之間進行復制

每個復制表需要有主鍵或唯一鍵

只能MySQL到PG

到此,關于“MySQL和PostgreSQL之間如何跨數據庫進行復制”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪江市| 云和县| 贵港市| 河北区| 内乡县| 西乌珠穆沁旗| 濮阳市| 商城县| 阳原县| 会宁县| 陇南市| 县级市| 靖宇县| 云龙县| 和龙市| 柯坪县| 临海市| 皋兰县| 吴堡县| 玉田县| 永康市| 通山县| 饶平县| 德昌县| 县级市| 宜川县| 洛南县| 奉节县| 吉隆县| 铅山县| 绥中县| 石林| 水城县| 池州市| 利辛县| 论坛| 石渠县| 阳新县| 虹口区| 汉源县| 富阳市|