检查部分和上一篇mysql同步到mysql的步骤和内容是一样的,这边就不过多做阐述,我们直接来看配置步骤。
准备数据库用户
创建一个专用于OGG 的数据库用户( 用于提取、复制、DEFGEN) 。
要使用DDL 的话,MySQL 用户必须具有安装数据库插件的权限。
OGG 用户需要对INFORMATION_SCHEMA 数据库进行读访问。
|
权限 |
Extract |
Replicat |
|
INSERT,UPDATE,DELETE on target tables |
√ |
√ |
|
CREATE TABLE |
√ |
使用检查点表 |
|
EXECUTE |
√ |
执行存储过程 |
|
SELECT ANY TABLE or SELECT ON database.table |
√ |
√ |
创建用户以及赋权语句
CREATE DATABASE ogg;
CREATE USER 'odc'@'%' IDENTIFIED BY 'odc';
GRANT INSERT,UPDATE,DELETE ON testdb.* TO 'odc'@'%';
GRANT CREATE ON testdb.* TO 'odc'@'%';
GRANT EXECUTE ON testdb.* TO 'odc'@'%';
GRANT SELECT ON testdb.* TO 'odc'@'%';
GRANT ALL PRIVILEGES ON ogg.* to 'odc'@'%';
flush privileges;
准备系统用户
想要捕获二进制日志,OGG 软件安装用户必须具有以下权限:
l MySQL 配置文件(my.cnf) 所在目录的读取和执行权限。
l MySQL 配置文件(my.cnf) 的读取权限。
l 二进制日志所在目录的读取和执行权限。
l tmp 目录的读取和执行权限。
系统用户使用root 即可。
设置二进制日志参数
MySQL 的binlog_row_image 参数必须设置为full ,才能使所有表的列都在二进制日志中。其他所有值都是不支持的。
注意 :binlog_row_image 的值默认是 full ,只需要检查用户是否有设置为其他值。未设置即是 full 。
参数
Extract 使用TRANLOGOPTIONS 参数获取日志索引文件路径。如果MySQL 配置文件(my.cnf) 没有指定完整的日志索引文件路径名、指定一个不正确的位置、或者在同一台服务器上安装了多个MySQL ,则应该使用ALTLOGDEST 选项指定日志索引文件位置。使用ALTLOGDEST 选项时,二进制日志索引文件必须存放在指定路径中。
Windows 下:
TRANLOGOPTIONS ALTLOGDEST "C:\MySQL\logs\binlog.index"
Linux 下:
TRANLOGOPTIONS ALTLOGDEST "/mysql/product/data/logs/binlog.index"
远程捕获时:
TRANLOGOPTIONS ALTLOGDEST REMOTE
使用以下命令查看二进制日志和二进制日志索引文件路径:
show variables like '%log_bin%';
参数
MySQL 配置文件: 配置文件储存MySQL 服务器和客户端的默认选项。在Windows 中,配置文件的名称是my.ini 。在其他平台上是my.cnf 。在缺少TRANLOGOPTIONS ALTLOGDEST 参数时,Extract 从MySQL 配置文件中获取日志文件位置的信息。此外,以下参数必须正确设置:
l binlog_ignore_db=oggddl: 这防止binlog 中记录历史表条目。
l log-bin: 此参数用于启动二进制日志记录。此参数还指定二进制日志索引文件的位置。如果未指定log-bin 参数,二进制日志记录将被禁用,并且Extract 返回错误。
l log_bin_index: 此参数指定二进制日志索引的位置。如果不使用,Extract 将会假定二进制索引文件与日志文件处于同一位置。
l binlog_format: 此参数设置日志的格式。它必须被设置为ROW ,用于指定数据库以二进制格式记录DML 语句。从OGG 19C 开始,Extract 会静默忽略非ROW 格式的binlog 事件,而不是在检测到非ROW 格式的binlog 格式时退出。
l mysql.rds_set_configuration: 当从MySQL Amazon RDS 实例中捕获时,需要在MySQL 命令行中调用mysql.rds_set_configuration 存储过程,以保留一段时间的二进制日志。MySQL Amazon RDS 的binlog_retention_hours 默认值是NULL ,即不保留二进制日志。
mysql > call mysql.rds_set_configuration('binlog retention hours', 24);
my.cnf 参数检查:
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
binlog_ignore_db=oggddl 设置参数需要重启数据库 ,需要忽略多个数据库就设置多个该参数。
log-bin=mysql-bin --- 设置参数需要重启数据库
binlog_format=ROW --- 设置参数需要重启数据库
binlog_row_image=full --- 或者未设置
环境变量
环境变量中MYSQL_HOME:Extract 进程会检查MYSQL_HOME 参数来找到MySQL 配置文件,如果MYSQL_HOME 未设置。会查询information_schema.global_variables 表来确定MySQL 的安装目录。
注意事项
对于MariaDB 10.2 及更高版本,OGG 的大体设置于MySQL 相同,但是需要在my.cnf 或my.ini 中设置额外的变量"binlog_annotate_row_events=OFF" ,之后重启MariaDB 。
添加主机名
/etc/hosts 中的localhost 需正确配置,如果配置不当,会导致Extract 无法正常连接数据库。或者可以使用以下格式避免:
SOURCEDB dbname@hostname:port, USERID mysqluser, PASSWORD mysqlpassword
三、 源端安装软件
上传软件并解压
将软件上传至/tmp/mysql_ogg_medias ,并解压
# unzip Oracle_GoldenGate_19.1.0.0.3_for_MySQL_on_Linux\ x86-64.zip
解压得到以下三个文件:
ggs_Linux_x64_MySQL_64bit.tar
OGG-19.1.0.0-README.txt
OGG_WinUnix_Rel_Notes_19.1.0.0.3.pdf
解压其中的ggs_Linux_x64_MySQL_64bit.tar 文件到指定目录
# tar -xvf ggs_Linux_x64_MySQL_64bit.tar -C /mysql/ogg/
创建默认目录
使用以下命令创建默认目录 :
# ./ggsci
GGSCI > create subdirs
创建并启动MGR 进程
# ./ggsci
GGSCI > edit param mgr
port 7809
dynamicportlist 7810-7820
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 1
AUTORESTART ER *, RETRIES 6,WAITMINUTES 20
创建checkpoint_table 以及./GLOBALS
创建检查点表,用于存放检查点信息
# mysql -uodc -podc
use ogg;
source /mysql/ogg/chkpt_mysql_create.sql
# ./ggsci
GGSCI > edit param ./GLOBALS
CHECKPOINTTABLE ogg.ggs_checkpoint
GGSCI > start mgr
配置挖掘进程
# ./ggsci
dblogin sourcedb testdb@192.168.238.51:3306,userid odc,password odc
add extract ext_or,tranlog,begin now
add exttrail ./dirdat/or,extract ext_or
edit param ext_or
extract ext_or
setenv (MYSQL_HOME="/mysql/app/")
tranlogoptions altlogdest "/mysql/product/data/mysql-bin.index"
sourcedb testdb@192.168.238.51:3306,userid odc,password odc
exttrail ./dirdat/or
gettruncates
table testdb.*;
配置传输进程
# ./ggsci
dblogin sourcedb testdb@localhost:3306,userid odc,password odc
add extract dmp_or,exttrailsource ./dirdat/or
add rmttrail ./dirdat/or,extract dmp_or
edit param dmp_or
extract dmp_or
rmthost 192.168.238.31,mgrport 7809
rmttrail ./dirdat/or
passthru
gettruncates
table testdb.*;
我们稍后目标端安装完软件再启动。
生成定义文件
# ./ggsci
edit param defgen.prm
DEFSFILE ./dirdef/or.def
sourcedb testdb@192.168.238.51:3306,userid odc,password odc
table testdb.*;
# ./defgen paramfile defgen.prm
将生成的or.def 传输到目标端/ogg/dirdef/ 目录中,并且修改权限。
上传软件并解压
将软件上传至/tmp/oracle_ogg_medias ,并解压
$ unzip Oracle_GoldenGate_19.1.0.0.4_for_Oracle_on_Linux_x86-64.zip
解压得到以下三个文件:
fbo_ggs_Linux_x64_shiphome
OGG-19.1.0.0-README.txt
OGG_WinUnix_Rel_Notes_19.1.0.0.4.pdf
设置环境变量
$ vi ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
$ source ~/.bash_profile
配置响应文件
$ cd fbo_ggs_Linux_x64_shiphome/Disk1
$ vi response/oggcore.rsp
INSTALL_OPTION=ORA19c
SOFTWARE_LOCATION=/ogg
静默安装OGG
$ ./runInstaller -silent -responseFile /tmp/oracle_ogg_medias/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
创建默认目录
使用以下命令创建默认目录 :
$ ./ggsci
GGSCI > create subdirs
创建并启动MGR 进程
$ ./ggsci
GGSCI > edit param mgr
port 7809
dynamicportlist 7810-7820
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 1
AUTORESTART ER *, RETRIES 6,WAITMINUTES 20
ACCESSRULE, PROG *, IPADDR *, ALLOW
创建数据库用户
-- 创建管理用户表空间
SQL> create tablespace odc_tps datafile '/oracle/app/oradata/DXY/odctps01.dbf' size 100M autoextend on;
-- 创建管理用户并赋权
SQL> create user odc identified by odc default tablespace odc_tps;
SQL> grant create session,connect,resource,alter any table,alter system,dba,select any dictionary,select any transaction,flashback any table,select any table,unlimited tablespace to odc;
SQL> exec dbms_goldengate_auth.grant_admin_privilege('odc')
-- 安装成功后可以收回dba 权限,但是要授予UNLIMITED TABLESPACE 权限。
grant unlimited tablespace to odc;
-- 在ddl_setup 时报错,通过授予以下权限解决。
grant create any table to odc;
grant create any view to odc;
grant create any procedure to odc;
grant create any sequence to odc;
grant create any index to odc;
grant create any trigger to odc;
grant create any view to odc;
创建checkpoint_table 以及./GLOBALS
创建检查点表,用于存放检查点信息
$ sqlplus / as sysdba
SQL> @chkpt_ora_create.sql
# ./ggsci
GGSCI > edit param ./GLOBALS
GGSCHEMA odc
CHECKPOINTTABLE odc.ggs_checkpoint
GGSCI > start mgr
设置enable_goldengate_replication 参数
$ sqlplus / as sysdba
alter system set enable_goldengate_replication=TRUE;
配置应用进程
dblogin userid odc,password odc
add replicat rep_or exttrail ./dirdat/or
edit param rep_or
replicat rep_or
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (ORACLE_SID="dxy")
userid odc,password odc
SOURCEDEFS ./dirdef/or.def
DISCARDFILE ./dirrpt/or.dsc,append,megabytes 50
map testdb.*, target testdb.*;
源端添加init 进程
# ./ggsci
add extract init_eor,sourceistable
extract init_eor
sourcedb testdb@192.168.238.51:3306,userid odc,password odc
reportcount every 30 minutes,rate
discardfile ./dirrpt/init_or.dsc,append,megabytes 1024
tranlogoptions altlogdest "/mysql/product/data/mysql-bin.index"
rmthost 192.168.238.31,mgrport 7809
rmttask replicat,group init_ror
table testdb.*;
目标端添加init 进程
$ ./ggsci
add replicat init_ror,specialrun
replicat init_ror
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
SOURCEDEFS ./dirdef/or.def
userid odc,password odc
map testdb.*, target testdb.*;
开始初始化
目标端表与用户需要自己创建,且用户需要赋权USERS 配额( 或拥有自己的表空间)
# ./ggsci
start init_eor
启动挖掘、传输、应用进程
更改二进制日志位置
修改MySQL 配置文件中的log-bin 变量来修改二进制日志位置可能会导致二进制日志索引文件中有两个不同的路径,这将会导致OGG 异常。
1. 所以更改二进制日志位置需要以下步骤:
2. 停止任何新的DML 操作。
3. 让Extract 完成所有现有二进制日志的处理。
4. 停止Extract 组。
5. 停止MySQL 数据库。
6. 修改log-bin 参数。
7. 启动MySQL 数据库。
8. 使用flush master 或者reset master 从二进制日志索引文件中清除旧的日志条目。
9. 启动Extract 。
配置双向复制
在双向复制中,源系统和目标系统上都有Extract 和Replicat 进程,为了支持这种配置,每个Extract 必须能够过滤本地Replicat 应用的事务,以便它们不会被重新捕获。此外,必须设置AUTO_INCREMENT 列( 主键自增长) ,以便每个系统上的值之前没有冲突。
1. 要在双向复制中过滤掉Replicat 操作,请在每个MySQL 数据库上执行以下步骤:
l 为每个Replicat 配置使用检查点表。Replicat 在每个事务结束时会对该表进行检查点。
l 在Extract 参数文件中使用TRANLOGOPTIONS 的FLITERTABLE 选项指定检查点表的名称。Extract 进程将忽略以对指定检查点表的操作结束的事务。
2. 编辑MySQL 配置文件设置auto_increment_increment 和auto_increment_offset 参数以避免双向操作引起的差异,假设有两个服务器ServerA 和ServerB:
l ServerA:
auto_increment_increment = 2
auto_increment_offset = 1
自增长值为:1,3,5,7,9
l ServerB:
auto_increment_increment = 2
auto_increment_offset = 2
自增长值为:2,4,6,8,10
参数解释:
auto_increment_offset: 自增长字段起始值
auto_increment_increment: 每次自增长值
远程捕获
1. 向OGG 远程捕获用户授予访问权限
mysql > CREATE USER 'username'@'host' IDENTIFIED BY 'Password';
mysql > GRANT ALL PRIVILEGES ON *.* TO 'username'@'host’ WITH GRANT OPTION;
mysql > FLUSH PRIVILEGES;
2. 远程MySQL 服务器的server_id 值应该大于0
mysql > show variables like 'server_id';
如果server_id 的值为0 ,修改my.cnf 以设置server_id 的值大于0.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-2932730/ ,如需转载,请注明出处,否则将追究法律责任。