一、开启mysql的binlog日志,并配置binlog相关参数
binlog_format = ROW
binlog_row_image = FULL
二、将源数据和目标数据对齐(字段名不能用大写)
1.执行 ./mysql2pgsql -l loader_table_list.txt -d -n 生成创建PG格式数据表的SQL
2.Navicat Premium,创建一个查询,粘贴SQL,ctrl+a,ctrl+u转小写,修改<distribution key>为主键,执行,完成创建动作。
3../mysql2pgsql -l loader_table_list.txt 完成全量数据初始化
注:loader_table_list.txt文件是配置同步哪些表
三、数据对齐后,查看mysql的binlog日志的文件和偏移量
SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 571203 | | | +------------------+----------+--------------+------------------+
四、配置文件(binlogfile和binlogfile_offset按上面的查出来的配置)
[src.mysql] host = "10.10.x.x" port = "3306" user = "root" password = "xxxxxx" db = "dsideal_db" encodingdir = "share" encoding = "utf8" binlogfile = "mysql-bin.000001" binlogfile_offset = "571203" [binlogloader] loader_table_list = "loader_table_list.txt" [local.pgsql] connect_string = "host=10.10.x.x dbname=huanghai_temp port=5432 user=root password=xxxxxx" [desc.pgsql] connect_string = "host=10.10.x.x dbname=huanghai_db port=5432 user=root password=xxxxxx" target_schema = "public" ignore_copy_error_count_each_table = "0"
五、启动
#启动 binlog 拉取进程 nohup ./binlog_miner 1>minner.log 2>&1 & #启动 binlog 写入进程 nohup ./binlog_loader 1>loader.log 2>&1 &
注:
如果发生无法同步情况执行如下步骤:
1、停止 binlog_miner 和 binlog_loader 两个进程。
2、确认要同步的源表和目标表中没有大写的字段名,如有大写的字段名改为小写。
3、将源数据和目标数据对齐。
4、查看源库的binlog偏移量,并对my.cfg配置文件进行修改。
5、将PG临时库中的所有表删除。
6、将PG目标库中的_tmp_dbsync下的所有表删除。
7、启动 binlog_miner 和 binlog_loader 两个进程