(1).需要复制的表必须具有主键
(2).适用于postgreSQL版本>9.5和MySQL版本>5.5
(3).binlog_format必须 为ROW才能设置此复制
(4)Python版本必须>3.3,需要Python环境.
安装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
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
注意:如果已经拥有所需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.
友情链接:pg_chameleon详细使用文档 http://www.pgchameleon.org/documents/