爆肝整理!OGG 实现 MySQL 数据库数据实时迁移超详细指南,小白也能秒懂
一、背景在金融、电商等关键业务范畴,数据的正确性与实时性是保障业务稳固运行和决策精准的核心要素。哪怕是瞬间的数据延迟或错误,都可能在这些范畴引发严重的连锁反应,造成巨大的经济丧失和信誉损害。因此,确保数据库之间的高效同步成为了技术架构中的关键环节。
Oracle GoldenGate(OGG)工具,作为数据同步与集成范畴的佼佼者,能够为企业提供强大的数据容灾和迁移办理方案。借助OGG,不仅可以实现数据的实时复制,保障业务一连性,还能在体系升级、架构调解时,安稳地完成数据迁移工作,最大程度降低对业务的影响。
接下来,将为大家详细演示如何运用OGG工具实现数据库之间的同步,助力大家深入理解并掌握这一关键技术。 好多人也利用这种技术完成了数据库的容灾和迁移等工作。
二、OGG原理
它是基于日志捕获技术实现数据实时同步,属于逻辑同步。OGG同步过程大抵为源端OGG负责抽取源端数据库变革数据,并将变革数据投递至目的端OGG,目的端OGG负责解析并持久化到目的数据库,OGG历程不多,只有5个历程,影性历程一个(Collector),其他四个都是可见的历程,如下:
https://i-blog.csdnimg.cn/direct/75fccafbb2f1429aa757f85e3672bc9f.png
数据同步从宏观上分为源端和目的端,也就是source和target。
https://i-blog.csdnimg.cn/direct/9f7843ee4080469087d3ac5b819a6168.png
大家也可以在操作体系体系上查看这几个历程。
# ps -ef|grep ogg
https://i-blog.csdnimg.cn/direct/236457f242b048e4b0b4788aac7de4d0.png
https://i-blog.csdnimg.cn/direct/91ea4b877e1d43429c6e6893155acaf5.png
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、详细图解:
https://i-blog.csdnimg.cn/direct/28bb6274abed4463ba50168521f53316.png
三、情况准备
(一)准备情况
节点操作体系版本数据库版本OGG版本IP地点源端centos7.9mysql 803712.2.0.2.0192.168.59.141目的端centos7.9mysql 803712.2.0.2.0192.168.59.198 这里利用一键安装脚本安装数据库。
链接:https://mp.weixin.qq.com/s/I_7lcbfyjnx6R4AnyQ76lw
安装包链接如下:
通过网盘分享的文件:OGG-MySQL 链接:
https://pan.baidu.com/s/12mFztIk5f7PGMEDn6bJ0wQ
提取码: fe8d
https://i-blog.csdnimg.cn/direct/3414056cf2b7497587383c470d176bdb.png
https://i-blog.csdnimg.cn/direct/7feb0d008f3f4970be02839caf26063b.png
关闭防火墙(两台都操作)
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
https://i-blog.csdnimg.cn/direct/7f7edd27a06646ceaccf357794562ccc.png
(二)下载ogg安装包
官网地点:https://edelivery.oracle.com/
登录后输入:goldengate for non oracle database,找到相应的版本的安装包即可。
https://i-blog.csdnimg.cn/direct/391c223fd3bd45588e6b52c36d86ea4c.jpeg
https://i-blog.csdnimg.cn/direct/27a545b1e9e34c9fa454d1714f6c199e.jpeg
https://i-blog.csdnimg.cn/direct/ae7684a27ce74d56aea471086ee3c268.png
https://i-blog.csdnimg.cn/direct/64b035a41fad4763a981f3fa5bbf3431.png
https://i-blog.csdnimg.cn/direct/ab2ce6762bbb4c4bbc6d683f6a9effaa.png
点击zip文件下载即可。
https://i-blog.csdnimg.cn/direct/525e5feb35b740f2ab29d8cd832eb31c.png
上传安装包至服务器
https://i-blog.csdnimg.cn/direct/d98bcd0079e14604b35674b4973f1cd7.png
(三)摆设OGG
1、源端
# mkdir -p /ogg
# cd /ogg/
# ll
https://i-blog.csdnimg.cn/direct/5572f2b0a33c463a8ffd735698e2288f.png
# tar -xvf ggs_Linux_x64_MySQL_64bit.tar
# ./ggsci
https://i-blog.csdnimg.cn/direct/e9a2ad26e9e9499990354aeeaf15fe5f.png
创建ogg管理用户
GGSCI (localhost.localdomain) 19> edit params ./GLOBALS
MGRSERVNAME GGMGR
~
GGSCI (localhost.localdomain) 2> create subdirs
https://i-blog.csdnimg.cn/direct/0f26b4c87ee845e59700db7ca818efbd.png
源端配置
创建数据库用户ogg,该用户用来同步数据:
mysql> grant system_user on *.* to 'root'@'%';
mysql> create user ogg@'%' identified by '123456';
mysql> grant all privileges on *.* to ogg@'%';
mysql> flush privileges;
mysql>ALTER USER 'ogg'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql>FLUSH PRIVILEGES;
https://i-blog.csdnimg.cn/direct/ed61723a54714fdfa2ad68c5199ecfbc.png
https://i-blog.csdnimg.cn/direct/810a98e485fa4beebb8114b8a36ef5bd.png
模拟源端的数据
-- 创建 test 数据库
CREATE DATABASE IF NOT EXISTS test;
USE test;
-- 创建表1:示例表,包含整数、字符串、日期等字段
CREATE TABLE table1 (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT,
create_date DATE
);
-- 创建表2:示例表,包含浮点数、文本等字段
CREATE TABLE table2 (
id INT AUTO_INCREMENT PRIMARY KEY,
value DECIMAL(10, 2),
description TEXT
);
-- 创建表3:示例表,包含布尔值、时间戳等字段
CREATE TABLE table3 (
id INT AUTO_INCREMENT PRIMARY KEY,
is_active BOOLEAN,
update_time TIMESTAMP
);
-- 创建表4:示例表,包含枚举类型等字段
CREATE TABLE table4 (
id INT AUTO_INCREMENT PRIMARY KEY,
gender ENUM('Male', 'Female'),
email VARCHAR(255)
);
-- 创建存储过程用于插入数据到表1
DELIMITER //
CREATE PROCEDURE insert_data_table1(IN num_records INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= num_records DO
INSERT INTO table1 (name, age, create_date)
VALUES (CONCAT('Name_', i), FLOOR(RAND() * 100), CURDATE() - INTERVAL FLOOR(RAND() * 365) DAY);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 创建存储过程用于插入数据到表2
DELIMITER //
CREATE PROCEDURE insert_data_table2(IN num_records INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= num_records DO
INSERT INTO table2 (value, description)
VALUES (RAND() * 100, CONCAT('Description_', i));
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 创建存储过程用于插入数据到表3
DELIMITER //
CREATE PROCEDURE insert_data_table3(IN num_records INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= num_records DO
INSERT INTO table3 (is_active, update_time)
VALUES (FLOOR(RAND() * 2), NOW());
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 创建存储过程用于插入数据到表4
DELIMITER //
CREATE PROCEDURE insert_data_table4(IN num_records INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= num_records DO
INSERT INTO table4 (gender, email)
VALUES (IF(FLOOR(RAND() * 2) = 0, 'Male', 'Female'), CONCAT('email_', i, '@example.com'));
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 计算大约插入多少条数据能达到1GB(这只是一个估算,实际可能因数据类型和存储方式不同而有所差异)
-- 假设平均每条记录大小为1KB(1024字节),1GB = 1024 * 1024 KB
SET @approx_records = 1024 * 1024;
-- 插入数据到4张表
CALL insert_data_table1(@approx_records / 4);
CALL insert_data_table2(@approx_records / 4);
CALL insert_data_table3(@approx_records / 4);
CALL insert_data_table4(@approx_records / 4);
https://i-blog.csdnimg.cn/direct/3a6ad02b94124b97862049c6cbfa0630.jpeg
https://i-blog.csdnimg.cn/direct/5d47a0c825384f83946920237da2691c.png
源端配置管理历程mgr
GGSCI (localhost.localdomain) 4> edit param mgr
新增以下内容:
#指定端口号
port 7809
#绑定可用端口列表
dynamicportlist 7840-7939
#定时清理trail文件
purgeoldextracts /ogg/dirdat/*,usecheckpoints, minkeepdays 1
https://i-blog.csdnimg.cn/direct/123f2ff913ca472c8ccb564f95be07da.jpeg
启动管理历程mgr
#输入启动管理进程命令(关闭:stop mgr )
GGSCI (localhost.localdomain) 5> start mgr
#输入查看状态命令查看是否启动
GGSCI (localhost.localdomain) 6> info all
https://i-blog.csdnimg.cn/direct/1826ce4b79e94b54bfccc4c36963331b.png
配置抽取历程Extract
GGSCI (localhost.localdomain) 6> edit param exta
#定义抽取进程名称
extract exta
#指定OGG连接数据库的地址、账户与密码
sourcedb test@192.168.59.141:3306 userid ogg password 123456
#指定写入到本地的哪个队列
exttrail /ogg/dirdat/ea
#定义discardfile文件位置,如果处理中有记录出错会写入到此文件中
discardfile/ogg/dirrpt/exta.dsc,append
#指定在解析数据库日志时所需要的特殊参数
TranLogOptions AltLogDest /data/mysql/mysql-bin.index
#定义需复制的表,后面需以;结尾
table test.*;
https://i-blog.csdnimg.cn/direct/287bf029be964a848ba10c91c20d6488.png
GGSCI (localhost.localdomain) 8> add extract exta,tranlog,begin now
GGSCI (localhost.localdomain) 9> add exttrail /ogg/dirdat/ea,extract exta
https://i-blog.csdnimg.cn/direct/d71ba1a90d824efca81f63b9cd94ec7f.png
配置投递历程dmpa
GGSCI (localhost.localdomain) 11> edit param dmpa
#定义投递进程名
extract dmpa
passthru
#源端数据库地址、用户名
sourcedb test@192.168.59.141:3306 userid ogg password 123456
#目标端地址
rmthost192.168.59.198,mgrport 7809,compress
# 指定写入文件
rmttrail/ogg/dirdat/da
dynamicresolution
numfiles 3000
#投递的表
table test.*;
~
~
https://i-blog.csdnimg.cn/direct/0a9b135c5b52447ea156566297c82545.png
GGSCI (localhost.localdomain) 13> add extract dmpa,exttrailsource /ogg/dirdat/ea
https://i-blog.csdnimg.cn/direct/941ef693f66e4c40bd0cf700bd13b221.png
GGSCI (localhost.localdomain) 15> add rmttrail /ogg/dirdat/da,extract dmpa
https://i-blog.csdnimg.cn/direct/49570793732f49cd835f4fbb24b60a0d.png
创建表界说文件,传送到目的端
GGSCI (localhost.localdomain) 13> edit param defgen
defsfile ./dirdef/test.def
sourcedb test@192.168.59.141:3306 userid ogg, password 123456
table test.*;
~
~
https://i-blog.csdnimg.cn/direct/e28600a3ea274fc5b09e02bc0057bfd9.png
配置数据结构不一致时的表界说文件
# ./defgen paramfile ./dirprm/defgen.prm
https://i-blog.csdnimg.cn/direct/f00b4fa8a93c4d28910427b25a356291.png
生成表界说文件(生成成功后复制一份到目的端OGG的dirdef目录下)
# scp /ogg/dirdef/test.def 192.168.59.198:/ogg/dirdef/
https://i-blog.csdnimg.cn/direct/e76a4da700744d3a93ecfa64b4baca2e.png
2、目的端
mysql> grant system_user on *.* to 'root'@'%';
mysql> create user ogg@'%' identified by '123456';
mysql> grant all privileges on *.* to ogg@'%';
mysql> flush privileges;
mysql> ALTER USER 'ogg'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
https://i-blog.csdnimg.cn/direct/70fe3caef2ac4fffb54e1278b861f750.png
# mkdir -p /ogg
# cd /ogg/
# tar -xvf ggs_Linux_x64_MySQL_64bit.tar
# ls
GGSCI (localhost.localdomain) 2> create subdirs
GGSCI (localhost.localdomain) 8> edit param mgrport 7809dynamicportlist 7840-7939port 7809dynamicportlist 7840-7939purgeoldextracts /ogg/dirdat/*,usecheckpoints, minkeepdays 1 ~ ~
https://i-blog.csdnimg.cn/direct/4686408aaedf42cc9eece24b52410659.png
GGSCI (localhost.localdomain) 5> start mgr
GGSCI (localhost.localdomain) 6> info all
https://i-blog.csdnimg.cn/direct/886557c9ff35455a90c34038edd6a4c3.png
配置检查表
https://i-blog.csdnimg.cn/direct/bb8af6f0ba0e4855afbb000445abfd11.png
在目的端新建库。
mysql> create database test;
mysql> show databases;
https://i-blog.csdnimg.cn/direct/0684c4affa8c47f1937ffca12ac2815f.png
mysql> CREATE TABLE `table1` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `name` varchar(255) DEFAULT NULL,
-> `age` int DEFAULT NULL,
-> `create_date` date DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Query OK, 0 rows affected (0.12 sec)
mysql>CREATE TABLE `table2` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `value` decimal(10,2) DEFAULT NULL,
-> `description` text,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE `table3` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `is_active` tinyint(1) DEFAULT NULL,
-> `update_time` timestamp NULL DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Query OK, 0 rows affected, 1 warning (0.10 sec)
mysql> CREATE TABLE `table4` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `gender` enum('Male','Female') DEFAULT NULL,
-> `email` varchar(255) DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=262145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Query OK, 0 rows affected (0.06 sec)
https://i-blog.csdnimg.cn/direct/bb45f47af28448e891400bcc007f3be3.png
GGSCI (localhost.localdomain) 11> dblogin sourcedb test@192.168.59.198:3306 userid ogg password 123456
GGSCI (localhost.localdomain DBLOGIN as ogg) 12> add checkpointtable test.checkpoint
https://i-blog.csdnimg.cn/direct/3e63e3a91b5b47f88699be85b08a6e68.png
配置应用历程Replicat
GGSCI (localhost.localdomain DBLOGIN as ogg) 14> edit params repa
#定义应用进程名称
replicat repa
#配置目标端数据库地址、用户名和密码
targetdb test@192.168.59.198:3306 userid ogg password 123456
handlecollisions
#假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生
sourcedefs /ogg/dirdef/test.def
#定义discardfile文件位置,如果处理中有记录出错会写入到此文件中,建议参数值1024m
discardfile /ogg/dirrpt/repa.dsc,purge
#用于指定源端与目标端表的映射关系
map test.*, target test.*;
https://i-blog.csdnimg.cn/direct/fb3a6c7b6332450a809cf9e3b212c4ee.png
GGSCI (localhost.localdomain DBLOGIN as ogg) 15> add replicat repa,exttrail /ogg/dirdat/da,checkpointtable test.checkpoint
https://i-blog.csdnimg.cn/direct/a541d198205947d6a3c82b7b2b038164.png
四、开启数据同步
(一)小数据量
在这种情况下,我们可以不用备份数据,直接在目的端新建数据库和表结构即可,就可以开启数据同步了。
1、进入ggsci启动源端抽取历程、投递历程和目的端的应用历程,随后在源端数据库手动插入数据查看目的数据库是否完成了同步
源端:
GGSCI (localhost.localdomain) 22> start exta
GGSCI (localhost.localdomain) 23> start dmpa
https://i-blog.csdnimg.cn/direct/23f03d2c4a3e401994de73eb8f1d0d3e.png
目的端:
GGSCI (localhost.localdomain DBLOGIN as ogg) 20> start repa
https://i-blog.csdnimg.cn/direct/f2c683a8b99c4897a970a6aba5da0788.png
GGSCI (localhost.localdomain) 28> info all
https://i-blog.csdnimg.cn/direct/a79ea50e08d34342812c0821ecd7ad87.png
GGSCI (localhost.localdomain DBLOGIN as ogg) 38> info all
https://i-blog.csdnimg.cn/direct/d1e4041dbb794169b88dd37ff8666d40.png
查看日志:
# tailf/ogg/ggserr.log
https://i-blog.csdnimg.cn/direct/c8b3b21ec3b14fa78f8cbd4fa15fbf46.png
测试数据是否同步:
mysql> select count(1) from table1;
https://i-blog.csdnimg.cn/direct/2e72ee28a93346009ffe7b2c4e0c1315.png
https://i-blog.csdnimg.cn/direct/334ca9df136a43928420be420106da9f.png
新增数据:
在源端新增数据:
– 利用 test 数据库
USE test;
-- 创建存储过程用于插入数据
DELIMITER //
CREATE PROCEDURE insert_data_to_table1()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE total_records INT DEFAULT 1024 * 1024;-- 大约插入 1GB 数据量的记录数,假设每条记录 1KB
DECLARE start_id INT DEFAULT 262145;-- 基于上一个 ID 262144,这里从 262145 开始
WHILE i <= total_records DO
INSERT INTO table1 (name, age, create_date)
VALUES (
CONCAT('Name_', start_id + i - 1),-- 生成唯一的 name 值
FLOOR(RAND() * 100),-- 生成 0 到 99 之间的随机年龄
CURDATE() - INTERVAL FLOOR(RAND() * 365) DAY-- 生成过去一年中的随机日期
);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 调用存储过程插入数据
CALL insert_data_to_table1();
https://i-blog.csdnimg.cn/direct/0e76aff3d6af44b9bb1c293e8373e497.png
https://i-blog.csdnimg.cn/direct/8edd421ebcc54fa6928cf07a57b3fa75.png
我们观察目的端的表数据是否同步,到这里基本就完成数据同步了。
(二)大数据量
如果是之前数据量和库表比较多的情况下,我们可以将源库需要同步的表导出,然后导入到目的数据库。
上面演示了单个库的配置场景,接下来再加一个库,我们来看看如何进行配置。
源端:
GGSCI (localhost.localdomain DBLOGIN as ogg) 51> edit param exta2
extract exta2
sourcedb ceshi@192.168.59.141:3306 userid ogg password 123456
exttrail /ogg/dirdat/ec
discardfile/ogg/dirrpt/exta2.dsc,append
TranLogOptions AltLogDest /data/mysql/mysql-bin.index
table ceshi.*;
https://i-blog.csdnimg.cn/direct/d551bb5db073429db501db2fa258e46b.png
注意:这里需要注意的是之前已经有一个库的捕获和传输历程了。这里如果我们要再加一个库的,两个历程名和里面的文件注意肯定不要重复了。
源端新建一个库ceshi,并插入数据
-- 创建名为 ceshi 的数据库
mysql> CREATE DATABASE IF NOT EXISTS ceshi;
-- 使用 ceshi 数据库
USE ceshi;
-- 创建表1:员工信息表
CREATE TABLE employee (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
department VARCHAR(50)
);
-- 创建表2:订单表
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_number VARCHAR(50) NOT NULL,
customer_name VARCHAR(50),
order_date DATE
);
-- 创建表3:产品表
CREATE TABLE product (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
price DECIMAL(10, 2),
description TEXT
);
-- 创建插入数据到 employee 表的存储过程
DELIMITER //
CREATE PROCEDURE insert_employee_data()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 100 DO
INSERT INTO employee (name, age, department)
VALUES (
CONCAT('Employee_', i),
FLOOR(RAND() * 60) + 18,-- 生成 18 到 77 岁之间的随机年龄
CASE
WHEN FLOOR(RAND() * 3) = 0 THEN 'Sales'
WHEN FLOOR(RAND() * 3) = 1 THEN 'Engineering'
ELSE 'Marketing'
END
);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 创建插入数据到 orders 表的存储过程
DELIMITER //
CREATE PROCEDURE insert_orders_data()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 100 DO
INSERT INTO orders (order_number, customer_name, order_date)
VALUES (
CONCAT('ORDER_', LPAD(i, 5, '0')),
CONCAT('Customer_', FLOOR(RAND() * 50) + 1),
DATE_ADD(CURDATE(), INTERVAL - FLOOR(RAND() * 365) DAY)
);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 创建插入数据到 product 表的存储过程
DELIMITER //
CREATE PROCEDURE insert_product_data()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 100 DO
INSERT INTO product (product_name, price, description)
VALUES (
CONCAT('Product_', i),
ROUND(RAND() * 1000, 2),
CONCAT('This is product ', i, '.')
);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 调用存储过程插入数据
CALL insert_employee_data();
CALL insert_orders_data();
CALL insert_product_data();
https://i-blog.csdnimg.cn/direct/5f9c4e544faa4a9f86bc099cf6152d55.png
将源库ceshi导出,并传到目的数据库服务器上
# mysqldump -uroot -p'6ThLZGT1mdleYEOh' -h192.168.59.141--single-transaction --flush-logs --source-data=2 ceshi> ceshi.sql
# scpceshi.sql root@192.168.59.198:/root/
https://i-blog.csdnimg.cn/direct/b0c88fe7a01d4a359b07d15e148de811.png
目的端数据库执行备份数据导入
mysql> create database ceshi;
# mysql -uroot -p'1fXQFNHQX/luUPSQ' ceshi < ceshi.sql
编写dump传输历程
GGSCI (localhost.localdomain DBLOGIN as ogg) 50> edit param dmpa2
extract dmpa2
passthru
sourcedb ceshi@192.168.59.141:3306 userid ogg password 123456
rmthost192.168.59.198,mgrport 7809,compress
# 指定写入文件
rmttrail/ogg/dirdat/dc
dynamicresolution
numfiles 3000
table ceshi.*;
https://i-blog.csdnimg.cn/direct/9c4e1663a8a0499a82487895c3491fe8.png
在源端开启捕获历程
由于数据库数据不停在变革,所以对于导出的ceshi.sql文件,需要记载二进制日志文件的log_file和log_pos。
# cat ceshi.sql |grep "CHANGE MASTER TO MASTER_LOG_FILE"
https://i-blog.csdnimg.cn/direct/8fd90e06b9ec4e32b6cb438d012d5ddc.png
从导出时的binlog开始抽取
GGSCI (localhost.localdomain) 36> ADD EXTRACT exta2, TRANLOG, BEGIN NOW
GGSCI (masterdb) 5> alter extract exta2,vam,lognum 4,logpos 157
开启dump投递历程
GGSCI (localhost.localdomain DBLOGIN as ogg) 35> add extract dmpa2 ,exttrailsource /ogg/dirdat/ec
GGSCI (localhost.localdomain DBLOGIN as ogg) 36> add rmttrail /ogg/dirdat/dc,extract dmpa2
https://i-blog.csdnimg.cn/direct/13b14e31bb63407fac30133babc1baaf.png
GGSCI (localhost.localdomain) 42> start dmpa2
GGSCI (localhost.localdomain DBLOGIN as ogg) 52> info all
https://i-blog.csdnimg.cn/direct/59f5433e818f4ea1899e2f0c9303eb5e.png
开启交付历程(目的端)
登录数据库
GGSCI (localhost.localdomain DBLOGIN as ogg) 39> dblogin sourcedb ceshi@192.168.59.198:3306 userid ogg password 123456
GGSCI (localhost.localdomain DBLOGIN as ogg) 40> add checkpointtable ceshi.checkpoint
https://i-blog.csdnimg.cn/direct/c16428f3650d4a11a79698b2dcda9592.png
编辑GLOBALS参数文件
GGSCI (localhost.localdomain DBLOGIN as ogg) 53> edit params ./GLOBALS
checkpointtable test.checkpoint
checkpointtable ceshi.checkpoint
https://i-blog.csdnimg.cn/direct/bfbfc39b35964aa2bfab329326de43a8.png
编写交付历程
GGSCI (localhost.localdomain DBLOGIN as ogg) 41> edit params repa2
#定义应用进程名称
replicat repa2
targetdb ceshi@192.168.59.198:3306 userid ogg password 123456
handlecollisions
sourcedefs /ogg/dirdef/ceshi.def
discardfile /ogg/dirrpt/repa2.dsc,purge
map ceshi.*, target ceshi.*;
https://i-blog.csdnimg.cn/direct/f08cbf672aeb4597a959ecf5dcd85362.png
GGSCI (localhost.localdomain DBLOGIN as ogg) 42> add replicat repa2,exttrail /ogg/dirdat/dc,checkpointtable ceshi.checkpoint
创建表界说文件,传送到目的端
GGSCI (localhost.localdomain) 1> edit param defgen2
defsfile ./dirdef/ceshi.def
sourcedb ceshi@192.168.59.141:3306 userid ogg, password 123456
table ceshi.*;
# ./defgen paramfile ./dirprm/defgen2.prm
https://i-blog.csdnimg.cn/direct/90f0d539716345df9d7ce4734a48a58c.png
# scp ./dirdef/ceshi.def root@192.168.59.198:/ogg/dirdef/
https://i-blog.csdnimg.cn/direct/784a397e847b4cce80d538290d6898fb.png
开启数据实时同步
GGSCI (localhost.localdomain DBLOGIN as ogg) 12> start mgr
https://i-blog.csdnimg.cn/direct/97d2a29d2a424edaa64a898334783f47.png
https://i-blog.csdnimg.cn/direct/9e69cec8ca5b4e67a72a8dccee1d5881.png
新增测试数据
-- 使用 ceshi 数据库
USE ceshi;
-- 向 product 表插入第一条数据
mysql> INSERT INTO product (product_name, price, description)
VALUES ('New Product 5', 99.99, 'This is the first new product.');
-- 向 product 表插入第二条数据
mysql> INSERT INTO product (product_name, price, description)
VALUES ('New Product 6', 49.50, 'This is the second new product.');
mysql> select count(1) from product;
https://i-blog.csdnimg.cn/direct/cca58944c5d346d2af4b0418af3b3832.png
验证数据
mysql> select count(1) from product;
mysql> select* from product order by product_id desc limit 2;
https://i-blog.csdnimg.cn/direct/dd2c3ced672a4cad9735c7b93fd3a842.png
到这里,我们就完成了MySQL多种场景的数据实时同步了。
五、总结
OGG的功能非常强大,利用过程中肯定要注意规范利用,尤其是checkpoint的利用,它可以资助我们对每个历程的读、写进行检查,提高效率。
https://i-blog.csdnimg.cn/direct/bdd01a0df897473c8294a4d2b4b5b2e7.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]