爆肝整理!OGG 实现 MySQL 数据库数据实时迁移超详细指南,小白也能秒懂 ...

宁睿  论坛元老 | 2025-3-29 09:14:54 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1950|帖子 1950|积分 5860

一、背景

在金融、电商等关键业务范畴,数据的正确性与实时性是保障业务稳固运行和决策精准的核心要素。哪怕是瞬间的数据延迟或错误,都可能在这些范畴引发严重的连锁反应,造成巨大的经济丧失和信誉损害。因此,确保数据库之间的高效同步成为了技术架构中的关键环节。
Oracle GoldenGate(OGG)工具,作为数据同步与集成范畴的佼佼者,能够为企业提供强大的数据容灾和迁移办理方案。借助OGG,不仅可以实现数据的实时复制,保障业务一连性,还能在体系升级、架构调解时,安稳地完成数据迁移工作,最大程度降低对业务的影响。
接下来,将为大家详细演示如何运用OGG工具实现数据库之间的同步,助力大家深入理解并掌握这一关键技术。 好多人也利用这种技术完成了数据库的容灾和迁移等工作。
二、OGG原理

它是基于日志捕获技术实现数据实时同步,属于逻辑同步。OGG同步过程大抵为源端OGG负责抽取源端数据库变革数据,并将变革数据投递至目的端OGG,目的端OGG负责解析并持久化到目的数据库,OGG历程不多,只有5个历程,影性历程一个(Collector),其他四个都是可见的历程,如下:

数据同步从宏观上分为源端和目的端,也就是source和target。

大家也可以在操作体系体系上查看这几个历程。
  1. [root@localhost ~]# ps -ef|grep ogg
复制代码


1、各历程详细阐明:
1)Manager历程
不管是源端还是目的端必须而且只能有一个Manager历程,可以启动、关闭、监控其他历程的康健状态,报告错误事件、分配数据存储空间,发布阀值报告等。
2)Extract 历程
运行在数据库源端,负责从源端数据表或日志中捕获数据,然后捕获到的将写到当地trail文件。 想要复制的对象数据发生改变时,Extract历程 就会进行捕获,当事件提交时,全部和该事件相关的日志记载被以事件为单元顺序的记载到trai文件中。Extract历程利用其内在的checkpoint机制,周期性的记载其读写的位置,实现断点同步。
3)Pump历程(可选)
运行在数据库源端 ,其作用是将源端产生的当地trail文件,把trai以数据块的情势通过TCP/IP 协议发送到目的。但是如果如果不利用trail文件,那么extract历程在抽取完数据以后,直接投递到目的端,生成远程trail文件,那么这时候,Pump历程就可以不用配置。
4)Replicat历程
运行在数据库目的端,负责读取源端传送到目的端的trail文件中的内容,并将其解析为DML或 DDL语句,然后应用到目的数据库中。
5)Server Collector历程
运行于目的端,作用就是把Extract/Pump历程投递过来的数据块重新组装成Trail文件。运行期间无需任何配置。是一个完全自动的历程。
2、详细图解

三、情况准备

(一)准备情况

节点操作体系版本数据库版本OGG版本IP地点源端centos7.9mysql 803712.2.0.2.0192.168.59.141目的端centos7.9mysql 803712.2.0.2.0192.168.59.198 这里利用一键安装脚本安装数据库。
  1. 链接:https://mp.weixin.qq.com/s/I_7lcbfyjnx6R4AnyQ76lw
复制代码
安装包链接如下:
   通过网盘分享的文件:OGG-MySQL 链接:
https://pan.baidu.com/s/12mFztIk5f7PGMEDn6bJ0wQ
提取码: fe8d
  


关闭防火墙(两台都操作)
  1. [root@localhost ~]# systemctl stop firewalld
  2. [root@localhost ~]# systemctl disable firewalld
  3. [root@localhost ~]# setenforce 0
复制代码

(二)下载ogg安装包

官网地点:https://edelivery.oracle.com/

登录后输入:goldengate for non oracle database,找到相应的版本的安装包即可。





点击zip文件下载即可。

上传安装包至服务器

(三)摆设OGG

1、源端

  1. [root@localhost ~]# mkdir -p /ogg
  2. [root@localhost ~]# cd /ogg/
  3. [root@localhost ogg]# ll
复制代码

  1. [root@localhost ogg]# tar -xvf ggs_Linux_x64_MySQL_64bit.tar
  2. [root@localhost ogg]# ./ggsci
复制代码

创建ogg管理用户
  1. GGSCI (localhost.localdomain) 19> edit params ./GLOBALS
  2. MGRSERVNAME GGMGR
复制代码
~
  1. GGSCI (localhost.localdomain) 2> create subdirs
复制代码

源端配置
创建数据库用户ogg,该用户用来同步数据:
  1. mysql> grant system_user on *.* to 'root'@'%';
  2. mysql> create user ogg@'%' identified by '123456';
  3. mysql> grant all privileges on *.* to ogg@'%';
  4. mysql> flush privileges;
  5. mysql>ALTER USER 'ogg'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  6. mysql>FLUSH PRIVILEGES;
复制代码


模拟源端的数据
  1. -- 创建 test 数据库
  2. CREATE DATABASE IF NOT EXISTS test;
  3. USE test;
  4. -- 创建表1:示例表,包含整数、字符串、日期等字段
  5. CREATE TABLE table1 (
  6.     id INT AUTO_INCREMENT PRIMARY KEY,
  7.     name VARCHAR(255),
  8.     age INT,
  9.     create_date DATE
  10. );
  11. -- 创建表2:示例表,包含浮点数、文本等字段
  12. CREATE TABLE table2 (
  13.     id INT AUTO_INCREMENT PRIMARY KEY,
  14.     value DECIMAL(10, 2),
  15.     description TEXT
  16. );
  17. -- 创建表3:示例表,包含布尔值、时间戳等字段
  18. CREATE TABLE table3 (
  19.     id INT AUTO_INCREMENT PRIMARY KEY,
  20.     is_active BOOLEAN,
  21.     update_time TIMESTAMP
  22. );
  23. -- 创建表4:示例表,包含枚举类型等字段
  24. CREATE TABLE table4 (
  25.     id INT AUTO_INCREMENT PRIMARY KEY,
  26.     gender ENUM('Male', 'Female'),
  27.     email VARCHAR(255)
  28. );
  29. -- 创建存储过程用于插入数据到表1
  30. DELIMITER //
  31. CREATE PROCEDURE insert_data_table1(IN num_records INT)
  32. BEGIN
  33.     DECLARE i INT DEFAULT 1;
  34.     WHILE i <= num_records DO
  35.         INSERT INTO table1 (name, age, create_date)
  36.         VALUES (CONCAT('Name_', i), FLOOR(RAND() * 100), CURDATE() - INTERVAL FLOOR(RAND() * 365) DAY);
  37.         SET i = i + 1;
  38.     END WHILE;
  39. END //
  40. DELIMITER ;
  41. -- 创建存储过程用于插入数据到表2
  42. DELIMITER //
  43. CREATE PROCEDURE insert_data_table2(IN num_records INT)
  44. BEGIN
  45.     DECLARE i INT DEFAULT 1;
  46.     WHILE i <= num_records DO
  47.         INSERT INTO table2 (value, description)
  48.         VALUES (RAND() * 100, CONCAT('Description_', i));
  49.         SET i = i + 1;
  50.     END WHILE;
  51. END //
  52. DELIMITER ;
  53. -- 创建存储过程用于插入数据到表3
  54. DELIMITER //
  55. CREATE PROCEDURE insert_data_table3(IN num_records INT)
  56. BEGIN
  57.     DECLARE i INT DEFAULT 1;
  58.     WHILE i <= num_records DO
  59.         INSERT INTO table3 (is_active, update_time)
  60.         VALUES (FLOOR(RAND() * 2), NOW());
  61.         SET i = i + 1;
  62.     END WHILE;
  63. END //
  64. DELIMITER ;
  65. -- 创建存储过程用于插入数据到表4
  66. DELIMITER //
  67. CREATE PROCEDURE insert_data_table4(IN num_records INT)
  68. BEGIN
  69.     DECLARE i INT DEFAULT 1;
  70.     WHILE i <= num_records DO
  71.         INSERT INTO table4 (gender, email)
  72.         VALUES (IF(FLOOR(RAND() * 2) = 0, 'Male', 'Female'), CONCAT('email_', i, '@example.com'));
  73.         SET i = i + 1;
  74.     END WHILE;
  75. END //
  76. DELIMITER ;
  77. -- 计算大约插入多少条数据能达到1GB(这只是一个估算,实际可能因数据类型和存储方式不同而有所差异)
  78. -- 假设平均每条记录大小为1KB(1024字节),1GB = 1024 * 1024 KB
  79. SET @approx_records = 1024 * 1024;
  80. -- 插入数据到4张表
  81. CALL insert_data_table1(@approx_records / 4);
  82. CALL insert_data_table2(@approx_records / 4);
  83. CALL insert_data_table3(@approx_records / 4);
  84. CALL insert_data_table4(@approx_records / 4);
复制代码


源端配置管理历程mgr
  1. GGSCI (localhost.localdomain) 4> edit param mgr
  2. 新增以下内容:
  3. #指定端口号
  4. port 7809
  5. #绑定可用端口列表
  6. dynamicportlist 7840-7939  
  7. #定时清理trail文件
  8. purgeoldextracts /ogg/dirdat/*,usecheckpoints, minkeepdays 1
复制代码

启动管理历程mgr
  1. #输入启动管理进程命令(关闭:stop mgr )
  2. GGSCI (localhost.localdomain) 5> start mgr
  3. #输入查看状态命令查看是否启动
  4. GGSCI (localhost.localdomain) 6> info all
复制代码

配置抽取历程Extract
  1. GGSCI (localhost.localdomain) 6> edit param exta
  2. #定义抽取进程名称
  3. extract exta
  4. #指定OGG连接数据库的地址、账户与密码
  5. sourcedb test@192.168.59.141:3306 userid ogg password 123456
  6. #指定写入到本地的哪个队列
  7. exttrail /ogg/dirdat/ea
  8. #定义discardfile文件位置,如果处理中有记录出错会写入到此文件中
  9. discardfile  /ogg/dirrpt/exta.dsc,append
  10. #指定在解析数据库日志时所需要的特殊参数
  11. TranLogOptions AltLogDest /data/mysql/mysql-bin.index
  12. #定义需复制的表,后面需以;结尾
  13. table test.*;
复制代码

  1. GGSCI (localhost.localdomain) 8> add extract exta,tranlog,begin now
  2. GGSCI (localhost.localdomain) 9> add exttrail /ogg/dirdat/ea,extract exta
复制代码

配置投递历程dmpa
  1. GGSCI (localhost.localdomain) 11> edit param dmpa
  2. #定义投递进程名
  3. extract dmpa
  4. passthru
  5. #源端数据库地址、用户名
  6. sourcedb test@192.168.59.141:3306 userid ogg password 123456
  7. #目标端地址
  8. rmthost  192.168.59.198,mgrport 7809,compress
  9. # 指定写入文件
  10. rmttrail  /ogg/dirdat/da
  11. dynamicresolution
  12. numfiles 3000
  13. #投递的表
  14. table test.*;
  15. ~               
  16. ~               
复制代码

  1. GGSCI (localhost.localdomain) 13> add extract dmpa,exttrailsource /ogg/dirdat/ea
复制代码

  1. GGSCI (localhost.localdomain) 15> add rmttrail /ogg/dirdat/da,extract dmpa
复制代码

创建表界说文件,传送到目的端
  1. GGSCI (localhost.localdomain) 13> edit param defgen
  2. defsfile ./dirdef/test.def
  3. sourcedb test@192.168.59.141:3306 userid ogg, password 123456
  4. table test.*;
  5. ~           
复制代码
~

配置数据结构不一致时的表界说文件
  1. [root@localhost ogg]# ./defgen paramfile ./dirprm/defgen.prm            
复制代码

生成表界说文件(生成成功后复制一份到目的端OGG的dirdef目录下)
  1. [root@localhost ogg]# scp /ogg/dirdef/test.def 192.168.59.198:/ogg/dirdef/
复制代码

2、目的端

  1. mysql> grant system_user on *.* to 'root'@'%';
  2. mysql> create user ogg@'%' identified by '123456';
  3. mysql> grant all privileges on *.* to ogg@'%';
  4. mysql> flush privileges;
  5. mysql> ALTER USER 'ogg'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  6. Query OK, 0 rows affected (0.20 sec)
  7. mysql> FLUSH PRIVILEGES;
复制代码

  1. [root@localhost ~]# mkdir -p /ogg
  2. [root@localhost ~]# cd /ogg/
  3. [root@localhost ogg]# tar -xvf ggs_Linux_x64_MySQL_64bit.tar
  4. [root@localhost ogg]# ls
复制代码
  1. GGSCI (localhost.localdomain) 2> create subdirs
  2. GGSCI (localhost.localdomain) 8> edit param mgrport 7809dynamicportlist 7840-7939port 7809dynamicportlist 7840-7939  purgeoldextracts /ogg/dirdat/*,usecheckpoints, minkeepdays 1 ~                                                              
复制代码
~

  1. GGSCI (localhost.localdomain) 5> start mgr
  2. GGSCI (localhost.localdomain) 6> info all
复制代码

配置检查表

在目的端新建库。
  1. mysql> create database test;   
  2. mysql> show databases;      
复制代码

  1. mysql> CREATE TABLE `table1` (
  2.     ->   `id` int NOT NULL AUTO_INCREMENT,
  3.     ->   `name` varchar(255) DEFAULT NULL,
  4.     ->   `age` int DEFAULT NULL,
  5.     ->   `create_date` date DEFAULT NULL,
  6.     ->   PRIMARY KEY (`id`)
  7.     -> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  8. Query OK, 0 rows affected (0.12 sec)
  9. mysql>  CREATE TABLE `table2` (
  10.     ->   `id` int NOT NULL AUTO_INCREMENT,
  11.     ->   `value` decimal(10,2) DEFAULT NULL,
  12.     ->   `description` text,
  13.     ->   PRIMARY KEY (`id`)
  14.     -> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  15. Query OK, 0 rows affected (0.01 sec)
  16. mysql> CREATE TABLE `table3` (
  17.     ->   `id` int NOT NULL AUTO_INCREMENT,
  18.     ->   `is_active` tinyint(1) DEFAULT NULL,
  19.     ->   `update_time` timestamp NULL DEFAULT NULL,
  20.     ->   PRIMARY KEY (`id`)
  21.     -> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  22. Query OK, 0 rows affected, 1 warning (0.10 sec)
  23. mysql> CREATE TABLE `table4` (
  24.     ->   `id` int NOT NULL AUTO_INCREMENT,
  25.     ->   `gender` enum('Male','Female') DEFAULT NULL,
  26.     ->   `email` varchar(255) DEFAULT NULL,
  27.     ->   PRIMARY KEY (`id`)
  28.     -> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  29. Query OK, 0 rows affected (0.06 sec)
复制代码

  1. GGSCI (localhost.localdomain) 11> dblogin sourcedb test@192.168.59.198:3306 userid ogg password 123456
  2. GGSCI (localhost.localdomain DBLOGIN as ogg) 12> add checkpointtable test.checkpoint            
复制代码

配置应用历程Replicat
  1.    GGSCI (localhost.localdomain DBLOGIN as ogg) 14> edit params repa
  2. #定义应用进程名称
  3. replicat repa
  4. #配置目标端数据库地址、用户名和密码
  5. targetdb test@192.168.59.198:3306 userid ogg password 123456     
  6. handlecollisions  
  7. #假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生
  8. sourcedefs /ogg/dirdef/test.def
  9. #定义discardfile文件位置,如果处理中有记录出错会写入到此文件中,建议参数值1024m  
  10. discardfile /ogg/dirrpt/repa.dsc,purge
  11. #用于指定源端与目标端表的映射关系
  12. map test.*, target test.*;
复制代码

  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 15> add replicat repa,exttrail /ogg/dirdat/da,checkpointtable test.checkpoint
复制代码

四、开启数据同步

(一)小数据量

在这种情况下,我们可以不用备份数据,直接在目的端新建数据库和表结构即可,就可以开启数据同步了。
1、进入ggsci启动源端抽取历程、投递历程和目的端的应用历程,随后在源端数据库手动插入数据查看目的数据库是否完成了同步
源端:
  1. GGSCI (localhost.localdomain) 22> start exta
  2. GGSCI (localhost.localdomain) 23> start dmpa
复制代码

目的端:
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 20> start repa
复制代码

  1. GGSCI (localhost.localdomain) 28> info all
复制代码

  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 38> info all
复制代码

查看日志:
  1. [root@localhost ogg]# tailf  /ogg/ggserr.log
复制代码

测试数据是否同步
  1. mysql> select count(1) from table1;
复制代码


新增数据:
在源端新增数据:
– 利用 test 数据库
  1. USE test;
  2. -- 创建存储过程用于插入数据
  3. DELIMITER //
  4. CREATE PROCEDURE insert_data_to_table1()
  5. BEGIN
  6.     DECLARE i INT DEFAULT 1;
  7.     DECLARE total_records INT DEFAULT 1024 * 1024;  -- 大约插入 1GB 数据量的记录数,假设每条记录 1KB
  8.     DECLARE start_id INT DEFAULT 262145;  -- 基于上一个 ID 262144,这里从 262145 开始
  9.     WHILE i <= total_records DO
  10.         INSERT INTO table1 (name, age, create_date)
  11.         VALUES (
  12.             CONCAT('Name_', start_id + i - 1),  -- 生成唯一的 name 值
  13.             FLOOR(RAND() * 100),  -- 生成 0 到 99 之间的随机年龄
  14.             CURDATE() - INTERVAL FLOOR(RAND() * 365) DAY  -- 生成过去一年中的随机日期
  15.         );
  16.         SET i = i + 1;
  17.     END WHILE;
  18. END //
  19. DELIMITER ;
  20. -- 调用存储过程插入数据
  21. CALL insert_data_to_table1();
复制代码


我们观察目的端的表数据是否同步,到这里基本就完成数据同步了。
(二)大数据量

如果是之前数据量和库表比较多的情况下,我们可以将源库需要同步的表导出,然后导入到目的数据库。
上面演示了单个库的配置场景,接下来再加一个库,我们来看看如何进行配置。
源端:
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 51> edit param exta2
  2. extract exta2
  3. sourcedb ceshi@192.168.59.141:3306 userid ogg password 123456
  4. exttrail /ogg/dirdat/ec
  5. discardfile  /ogg/dirrpt/exta2.dsc,append
  6. TranLogOptions AltLogDest /data/mysql/mysql-bin.index
  7. table ceshi.*;
复制代码

注意:这里需要注意的是之前已经有一个库的捕获和传输历程了。这里如果我们要再加一个库的,两个历程名和里面的文件注意肯定不要重复了。
源端新建一个库ceshi,并插入数据
  1. -- 创建名为 ceshi 的数据库
  2. mysql> CREATE DATABASE IF NOT EXISTS ceshi;
  3. -- 使用 ceshi 数据库
  4. USE ceshi;
  5. -- 创建表1:员工信息表
  6. CREATE TABLE employee (
  7.     id INT AUTO_INCREMENT PRIMARY KEY,
  8.     name VARCHAR(50) NOT NULL,
  9.     age INT,
  10.     department VARCHAR(50)
  11. );
  12. -- 创建表2:订单表
  13. CREATE TABLE orders (
  14.     order_id INT AUTO_INCREMENT PRIMARY KEY,
  15.     order_number VARCHAR(50) NOT NULL,
  16.     customer_name VARCHAR(50),
  17.     order_date DATE
  18. );
  19. -- 创建表3:产品表
  20. CREATE TABLE product (
  21.     product_id INT AUTO_INCREMENT PRIMARY KEY,
  22.     product_name VARCHAR(50) NOT NULL,
  23.     price DECIMAL(10, 2),
  24.     description TEXT
  25. );
  26. -- 创建插入数据到 employee 表的存储过程
  27. DELIMITER //
  28. CREATE PROCEDURE insert_employee_data()
  29. BEGIN
  30.     DECLARE i INT DEFAULT 1;
  31.     WHILE i <= 100 DO
  32.         INSERT INTO employee (name, age, department)
  33.         VALUES (
  34.             CONCAT('Employee_', i),
  35.             FLOOR(RAND() * 60) + 18,  -- 生成 18 到 77 岁之间的随机年龄
  36.             CASE
  37.                 WHEN FLOOR(RAND() * 3) = 0 THEN 'Sales'
  38.                 WHEN FLOOR(RAND() * 3) = 1 THEN 'Engineering'
  39.                 ELSE 'Marketing'
  40.             END
  41.         );
  42.         SET i = i + 1;
  43.     END WHILE;
  44. END //
  45. DELIMITER ;
  46. -- 创建插入数据到 orders 表的存储过程
  47. DELIMITER //
  48. CREATE PROCEDURE insert_orders_data()
  49. BEGIN
  50.     DECLARE i INT DEFAULT 1;
  51.     WHILE i <= 100 DO
  52.         INSERT INTO orders (order_number, customer_name, order_date)
  53.         VALUES (
  54.             CONCAT('ORDER_', LPAD(i, 5, '0')),
  55.             CONCAT('Customer_', FLOOR(RAND() * 50) + 1),
  56.             DATE_ADD(CURDATE(), INTERVAL - FLOOR(RAND() * 365) DAY)
  57.         );
  58.         SET i = i + 1;
  59.     END WHILE;
  60. END //
  61. DELIMITER ;
  62. -- 创建插入数据到 product 表的存储过程
  63. DELIMITER //
  64. CREATE PROCEDURE insert_product_data()
  65. BEGIN
  66.     DECLARE i INT DEFAULT 1;
  67.     WHILE i <= 100 DO
  68.         INSERT INTO product (product_name, price, description)
  69.         VALUES (
  70.             CONCAT('Product_', i),
  71.             ROUND(RAND() * 1000, 2),
  72.             CONCAT('This is product ', i, '.')
  73.         );
  74.         SET i = i + 1;
  75.     END WHILE;
  76. END //
  77. DELIMITER ;
  78. -- 调用存储过程插入数据
  79. CALL insert_employee_data();
  80. CALL insert_orders_data();
  81. CALL insert_product_data();
复制代码

将源库ceshi导出,并传到目的数据库服务器上
  1. [root@localhost ~]# mysqldump -uroot -p'6ThLZGT1mdleYEOh' -h192.168.59.141  --single-transaction --flush-logs --source-data=2 ceshi  > ceshi.sql
  2. [root@localhost ~]# scp  ceshi.sql root@192.168.59.198:/root/
复制代码

目的端数据库执行备份数据导入
  1. mysql> create database ceshi;
复制代码
  1. [root@localhost ~]# mysql -uroot -p'1fXQFNHQX/luUPSQ' ceshi < ceshi.sql
复制代码
编写dump传输历程
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 50> edit param dmpa2
  2. extract dmpa2
  3. passthru
  4. sourcedb ceshi@192.168.59.141:3306 userid ogg password 123456
  5. rmthost  192.168.59.198,mgrport 7809,compress
  6. # 指定写入文件
  7. rmttrail  /ogg/dirdat/dc
  8. dynamicresolution
  9. numfiles 3000
  10. table ceshi.*;
复制代码

在源端开启捕获历程
由于数据库数据不停在变革,所以对于导出的ceshi.sql文件,需要记载二进制日志文件的log_file和log_pos。
  1. [root@localhost ~]# cat ceshi.sql |grep "CHANGE MASTER TO MASTER_LOG_FILE"
复制代码

从导出时的binlog开始抽取
  1. GGSCI (localhost.localdomain) 36> ADD EXTRACT exta2, TRANLOG, BEGIN NOW
  2. GGSCI (masterdb) 5> alter extract exta2,vam,lognum 4,logpos 157
复制代码
开启dump投递历程
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 35> add extract dmpa2 ,exttrailsource /ogg/dirdat/ec
  2. GGSCI (localhost.localdomain DBLOGIN as ogg) 36> add rmttrail /ogg/dirdat/dc,extract dmpa2
复制代码

  1. GGSCI (localhost.localdomain) 42> start dmpa2
  2. GGSCI (localhost.localdomain DBLOGIN as ogg) 52> info all
复制代码

开启交付历程(目的端)
登录数据库
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 39> dblogin sourcedb ceshi@192.168.59.198:3306 userid ogg password 123456
  2. GGSCI (localhost.localdomain DBLOGIN as ogg) 40> add checkpointtable ceshi.checkpoint
复制代码

编辑GLOBALS参数文件
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 53> edit params ./GLOBALS
  2. checkpointtable test.checkpoint
  3. checkpointtable ceshi.checkpoint
复制代码

编写交付历程
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 41> edit params repa2
  2. #定义应用进程名称
  3. replicat repa2
  4. targetdb ceshi@192.168.59.198:3306 userid ogg password 123456   
  5. handlecollisions  
  6. sourcedefs /ogg/dirdef/ceshi.def
  7. discardfile /ogg/dirrpt/repa2.dsc,purge
  8. map ceshi.*, target ceshi.*;
复制代码

  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 42> add replicat repa2,exttrail /ogg/dirdat/dc,checkpointtable ceshi.checkpoint   
复制代码
创建表界说文件,传送到目的端
  1. GGSCI (localhost.localdomain) 1> edit param defgen2
  2. defsfile ./dirdef/ceshi.def
  3. sourcedb ceshi@192.168.59.141:3306 userid ogg, password 123456
  4. table ceshi.*;
复制代码
  1. [root@localhost ogg]# ./defgen paramfile ./dirprm/defgen2.prm  
复制代码

  1. [root@localhost ogg]# scp ./dirdef/ceshi.def root@192.168.59.198:/ogg/dirdef/        
复制代码

开启数据实时同步
  1. GGSCI (localhost.localdomain DBLOGIN as ogg) 12> start mgr
复制代码


新增测试数据
  1. -- 使用 ceshi 数据库
  2. USE ceshi;
  3. -- 向 product 表插入第一条数据
  4. mysql> INSERT INTO product (product_name, price, description)
  5. VALUES ('New Product 5', 99.99, 'This is the first new product.');
  6. -- 向 product 表插入第二条数据
  7. mysql> INSERT INTO product (product_name, price, description)
  8. VALUES ('New Product 6', 49.50, 'This is the second new product.');
  9. mysql> select count(1) from product;
复制代码

验证数据
  1. mysql> select count(1) from product;
  2. mysql> select  * from product order by product_id desc limit 2;
复制代码

到这里,我们就完成了MySQL多种场景的数据实时同步了。
五、总结

OGG的功能非常强大,利用过程中肯定要注意规范利用,尤其是checkpoint的利用,它可以资助我们对每个历程的读、写进行检查,提高效率。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表