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檔案,
然後啟動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.