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,

Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用_第1张图片如果找不到/etc/my.cnf文件, 只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。

 

然后启动MySQL服务器.

Service mysql start.

从mysqld.log中获取临时root密码,并使用mysql admin重置root密码

使用pg_chameleon创建用于配置复制的用户,并使用以下步骤为用户提供适当的权限.

Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用_第2张图片

在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的对象复制到PostgreSQL中的项目--基本使用_第3张图片

 

第四步:指定源详细信息

使用以下命令将源详细信息添加到pg_chameleon.提供配置文件中指定的源名称.在此示例中,源名称为mysql,目标是在pg_conn下定义的postgreSQL数据库.

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

 运行完上述命令后,查看表t_sources即可看到源详细信息已添加到表t_sources中.

Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用_第4张图片

 

第五步:初始化从站

命令: 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

Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用_第5张图片

第六步:启动复制

   命令: chameleon start_replica –config default –source mysql

 

第七步:检查复制状态和任何错误

 命令: chameleon  show_status  --config default     查看状态

      chameleon  show_errors                     查看错误

 

   状态的样子:

   Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用_第6张图片

      

第八步: 验证

   为了验证,我们可以记录插入我们为验证目的而创建的MySQL表中,并检查它是否已经复制到postgres.

  Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用_第7张图片

 

友情链接:pg_chameleon详细使用文档 http://www.pgchameleon.org/documents/

 

 

 

你可能感兴趣的:(Pg_chameleon:一个将Mysql的对象复制到PostgreSQL中的项目--基本使用)