1. 程式人生 > >Pg_chameleon:一個將Mysql的物件複製到PostgreSQL中的專案--基本使用

Pg_chameleon:一個將Mysql的物件複製到PostgreSQL中的專案--基本使用

說明:本人所使用的系統是CentOS7

pg_chameleon的使用

1.使用前提

(1).需要複製的表必須具有主鍵

(2).適用於postgreSQL版本>9.5和MySQL版本>5.5

(3).binlog_format必須 為ROW才能設定此複製

(4)Python版本必須>3.3,需要Python環境.

2.準備環境

設定MySQL

    安裝mysql  InstallMySQL5.7並新增適當的複製引數

Pg_chameleon需要在my.cnf檔案(MySql伺服器的引數)中設定以下引數,將以下引數新增到/etc/my.cnf,

如果找不到/etc/my.cnf檔案,

 只需要複製一個/usr/share/mysql目錄下的.cnf檔案到/etc目錄,並改名為my.cnf即可。

然後啟動MySQL伺服器.

Service mysql start.

從mysqld.log中獲取臨時root密碼,並使用mysql admin重置root密碼

使用pg_chameleon建立用於配置複製的使用者,並使用以下步驟為使用者提供適當的許可權.

在mysql伺服器(‘usr_replica’@’%’)中建立使用者時.可將%替換為執行pg_chameleon的伺服器的相應IP或主機名

設定PostgreSQL

安裝PostgreSQL並啟動資料庫例項

   使用以下步驟來安裝PostgreSQL

yum install https://yum.postgresql.org/10/redhat/rhel-7.4-x86_64/pgdg-centos10-10-2.noarch.rpm
yum install postgresql10*
su - postgres
$/usr/pgsql-10/bin/initdb
$ /usr/pgsql-10/bin/pg_ctl -D /var/lib/pgsql/10/data start

 在PostgreSQL中建立一個使用者,pg_chameleon可以使用該使用者將更改的資料寫入PostgreSQL.還要建立目標資料庫.

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

3.使用pg_chameleon安裝和設定複製的步驟

第一步:安裝Python3.6和pg_chameleon2.0.8

   注意:如果已經擁有所需python版本,則可以跳過python安裝步驟.如果作業系統預設不包含Python3.X,我們可以建立一個虛擬環境.

yum install gcc openssl-devel bzip2-devel wget
cd /usr/src
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
tar xzf Python-3.6.6.tgz
cd Python-3.6.6
./configure --enable-optimizations
make altinstall
python3.6 -m venv venv
source venv/bin/activate
pip install pip --upgrade
pip install pg_chameleon

第二步:配置檔案

此工具需要配置檔案來儲存源/目標伺服器詳細資訊,以及用於儲存日誌的目錄.

使用以下命令讓pg_chameleon來建立配置檔案模板和相應的目錄.

     chameleon set_configuration_files

輸出如下:

將示例配置檔案複製到另一個檔案,例如default.yml

$ cd .pg_chameleon/configuration/
$ cp config-example.yml default.yml

在default.yml中新增必須的引數,內容如下.在此檔案中,我們可以選擇指定資料型別轉換,要從複製中逃過的表及需要為選定的表和列跳過的DML事件.

---
#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: "localhost"
  port: "5432"
  user: "usr_replica"
  password: "secret"
  database: "db_replica"
  charset: "utf8"
sources:
  mysql:
    db_conn:
      host: "localhost"
      port: "3306"
      user: "usr_replica"
      password: "Secret123!"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      sakila: sch_sakila
    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:

注意:配置檔案中host: 最好使用詳細ip,使用localhost可能在初始化從站時失敗(第五步),源配置使用了mysql就把postgreSQL源配置註釋掉或者刪掉,否則報錯: Mapping 處的語法錯誤

第三步:初始化副本

  命令: chameleon create_relica_schema –debug

上面的命令在.pg_chameleon/configuration/default.yml檔案中指定的PostgreSQL資料庫中建立一個模式和九個表.需要這些表來管理從源到目標的複製.在以下日誌中可以觀察到相同的情況.

   

第四步:指定源詳細資訊

使用以下命令將源詳細資訊新增到pg_chameleon.提供配置檔案中指定的源名稱.在此示例中,源名稱為mysql,目標是在pg_conn下定義的postgreSQL資料庫.

   命令:   chameleon add_source  --config default –source mysql  --debug

 執行完上述命令後,查看錶t_sources即可看到源詳細資訊已新增到表t_sources中.

第五步:初始化從站

命令: chameleon init_replica  --config default –source mysql --debug

注意: 如果default.yml配置檔案中配置host值為localhost,可能報錯:

  初始化涉及MySQL伺服器(源)上的一下任務

    (1).使用那個讀鎖定重新整理表格

    (2).獲取主控座標

    (3).複製資料

    (4).釋放鎖定

  上面的命令會自動在postgres資料庫中建立目標模式

  在default.yml檔案中,我們提到了以下schema_mappings

因此,現在它在目標資料庫db_replica中建立了新的模式sch_sakila

第六步:啟動複製

   命令: chameleon start_replica –config default –source mysql

第七步:檢查複製狀態和任何錯誤

 命令: chameleon  show_status  --config default     檢視狀態

      chameleon  show_errors                     檢視錯誤

   狀態的樣子:

   

第八步:驗證

   為了驗證,我們可以記錄插入我們為驗證目的而建立的MySQL表中,並檢查它是否已經複製到postgres.