Skip to main content

Oracle GoldenGate 23ai Installation Guide for MySQL

Oracle GoldenGate 23ai installation for MySQL

Introduction

Oracle GoldenGate (OGG) is a real-time data replication platform that enables seamless data integration between heterogeneous databases. It supports high throughput, minimal latency, and advanced deployment architectures. As a CDC (Change Data Capture) tool, it captures committed changes from the source database transaction logs and replicates them to a target database.

This is the second post in our GoldenGate 23ai series. We previously covered installing Oracle GoldenGate 23ai for Oracle. This guide covers the same installer family but configured for MySQL, using Oracle GoldenGate 23ai (version 23.4.1.24.05) for MySQL. The overall flow is similar, with the key difference being the MySQL ODBC connector setup in place of an Oracle Instant Client.

Prerequisites

Below are the minimum requirements for a Linux environment:

  • CPU: 2 cores
  • RAM: 4GB
  • Disk space: 25GB
  • OS: Oracle Linux 8/9
  • MySQL ODBC Connector

Software Download

Environment Used in This Guide

Item Value
Hostname mysqlOGG.oraeasy.com
IP 192.168.101.6
OS OL9
OGG Home /ogg/ogg23ai_ma
OGG Service Manager /ogg/ogg23ai_sm
OGG Deployment Home /ogg/ogg23ai_deploy

Step 1: Prepare the OS for Installation

Before installing GoldenGate itself, the OS needs a compatibility package for OpenSSL, an Oracle user and group, and the target directories with correct ownership. SELinux is set to permissive and the firewall is disabled to avoid connectivity issues during setup.


Install packages:
[root@mysqlOGG ~]# dnf install compat-openssl11 Last metadata expiration check: 0:26:18 ago on Thu 22 May 2025 12:33:52 AM IST. Dependencies resolved. ============================================================================================================================================================== Package Architecture Version Repository Size ============================================================================================================================================================== Installing: compat-openssl11 x86_64 1:1.1.1k-4.0.1.el9_0 ol9_appstream 1.5 M Transaction Summary ============================================================================================================================================================== Install 1 Package Total download size: 1.5 M Installed size: 3.7 M Is this ok [y/N]: y Downloading Packages: compat-openssl11-1.1.1k-4.0.1.el9_0.x86_64.rpm 1.6 MB/s | 1.5 MB 00:00 -------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 1.6 MB/s | 1.5 MB 00:00 Oracle Linux 9 Application Stream Packages (x86_64) 5.7 MB/s | 6.2 kB 00:00 Importing GPG key 0x8D8B756F: Userid : "Oracle Linux (release key 1) " Fingerprint: 3E6D 826D 3FBA B389 C2F3 8E34 BC4D 06A0 8D8B 756F From : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle Is this ok [y/N]: y Key imported successfully Importing GPG key 0x8B4EFBE6: Userid : "Oracle Linux (backup key 1) " Fingerprint: 9822 3175 9C74 6706 5D0C E9B2 A7DD 0708 8B4E FBE6 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle Is this ok [y/N]: y Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : compat-openssl11-1:1.1.1k-4.0.1.el9_0.x86_64 1/1 Running scriptlet: compat-openssl11-1:1.1.1k-4.0.1.el9_0.x86_64 1/1 Verifying : compat-openssl11-1:1.1.1k-4.0.1.el9_0.x86_64 1/1 Installed: compat-openssl11-1:1.1.1k-4.0.1.el9_0.x86_64 Complete! [root@mysqlOGG ~]# [root@mysqlOGG ~]# ls /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1 [root@mysqlOGG ~]# Create Oracle user & its group:
[root@mysqlOGG ~]# groupadd -g 54321 oinstall [root@mysqlOGG ~]# groupadd -g 54322 dba [root@mysqlOGG ~]# useradd -u 54321 -g oinstall -G dba oracle [root@mysqlOGG ~]# [root@mysqlOGG ~]# passwd oracle Changing password for user oracle. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@mysqlOGG ~]# Directory creation & Ownership change:
[root@mysqlOGG ~]# mkdir -p /ogg/ogg23ai_deploy [root@mysqlOGG ~]# mkdir -p /ogg/ogg23ai_ma [root@mysqlOGG ~]# mkdir -p /ogg/ogg23ai_sm [root@mysqlOGG ~]# chown -R oracle:oinstall /u01 [root@mysqlOGG ~]# chmod -R 775 /u01 [root@mysqlOGG ~]# chown -R oracle:oinstall /ogg [root@mysqlOGG ~]# chmod -R 775 /ogg SELinux => Permissive:
[root@mysqlOGG ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. # See also: # https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/using_selinux/changing-selinux-states-and-modes_using-selinux#changing-selinux -modes-at-boot-time_changing-selinux-states-and-modes # # NOTE: Up to RHEL 8 release included, SELINUX=disabled would also # fully disable SELinux during boot. If you need a system with SELinux # fully disabled instead of SELinux running with no policy loaded, you # need to pass selinux=0 to the kernel command line. You can use grubby # to persistently set the bootloader to boot with selinux=0: # # grubby --update-kernel ALL --args selinux=0 # # To revert back to SELinux enabled: # # grubby --update-kernel ALL --remove-args selinux # SELINUX=permissive # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted Disable Firewall:
[root@mysqlOGG ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled) Active: active (running) since Thu 2025-05-22 11:39:36 IST; 46min ago Docs: man:firewalld(1) Main PID: 750 (firewalld) Tasks: 2 (limit: 21748) Memory: 40.6M CPU: 1.209s CGroup: /system.slice/firewalld.service └─750 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid May 22 11:39:26 mysqlOGG.oraeasy.com systemd[1]: Starting firewalld - dynamic firewall daemon... May 22 11:39:36 mysqlOGG.oraeasy.com systemd[1]: Started firewalld - dynamic firewall daemon. [root@mysqlOGG ~]# [root@mysqlOGG ~]# systemctl stop firewalld [root@mysqlOGG ~]# [root@mysqlOGG ~]# systemctl disable firewalld Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service". Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".

Step 2: Install and Configure the MySQL ODBC Connector

Unlike the Oracle version of this installer, GoldenGate for MySQL talks to the database through ODBC. We install unixODBC and the MySQL Connector/ODBC package, register the driver, and set up a DSN in odbc.ini before testing the connection with isql.


Install the required Packages and verify them:
[root@mysqlOGG ~]# dnf -y install unixODBC Last metadata expiration check: 0:01:55 ago on Mon 02 Jun 2025 04:18:41 PM IST. Package unixODBC-2.3.9-4.el9.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete! [root@mysqlOGG ~]# dnf list installed | grep -i odbc python3-pyodbc.x86_64 4.0.30-4.el9 @AppStream unixODBC.x86_64 2.3.9-4.el9 @AppStream [root@mysqlOGG ~]# [root@mysqlOGG ~]# dnf install mysql-connector-odbc Last metadata expiration check: 0:04:49 ago on Mon 02 Jun 2025 04:18:41 PM IST. Dependencies resolved. ============================================================================================================================================================== Package Architecture Version Repository Size ============================================================================================================================================================== Installing: mysql-connector-odbc x86_64 9.3.0-1.el9 mysql-connectors-community 6.2 M Transaction Summary ============================================================================================================================================================== Install 1 Package Total download size: 6.2 M Installed size: 55 M Is this ok [y/N]: y Downloading Packages: mysql-connector-odbc-9.3.0-1.el9.x86_64.rpm 2.3 MB/s | 6.2 MB 00:02 -------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 2.2 MB/s | 6.2 MB 00:02 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : mysql-connector-odbc-9.3.0-1.el9.x86_64 1/1 Running scriptlet: mysql-connector-odbc-9.3.0-1.el9.x86_64 1/1 Success: Usage count is 1 Success: Usage count is 1 Verifying : mysql-connector-odbc-9.3.0-1.el9.x86_64 1/1 Installed: mysql-connector-odbc-9.3.0-1.el9.x86_64 Complete! [root@mysqlOGG ~]# [root@mysqlOGG ~]# odbcinst -q -d [PostgreSQL] [MySQL] [MySQL-5] [FreeTDS] [MariaDB] [MySQL ODBC 9.3 Unicode Driver] [MySQL ODBC 9.3 ANSI Driver] [root@mysqlOGG ~]# Configure odbc.ini (Same server used for MySQL DB):
[root@mysqlOGG ~]# cat /etc/odbc.ini [mysqldb] Description=MySQL Local ODBC Connection Driver=MySQL ODBC 9.3 Unicode Driver Server=mysqlOGG.oraeasy.com Port=3306 User=mysqlogg Password=India#123 Database=mysqldb Option=3 [root@mysqlOGG ~]# ls -l /etc/odbc.ini -rw-r--r--. 1 root root 184 Jun 2 16:40 /etc/odbc.ini [oracle@mysqlOGG ~]$ isql -v mysqldb mysqlogg India#123 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> show databases; +-----------------------------------------------------------------+ | Database | +-----------------------------------------------------------------+ | information_schema | | mysql | | mysqldb | | performance_schema | | sys | +-----------------------------------------------------------------+ SQLRowCount returns 5 5 rows fetched SQL> [oracle@mysqlOGG ~]$

Step 3: Place and Unzip the OGG Software

With the ODBC connector in place, extract the GoldenGate for MySQL installer archive to a staging location. This produces the ship home directory that the installer runs from.


[oracle@mysqlOGG oggsoft]$ pwd
/u01/oggsoft
[oracle@mysqlOGG oggsoft]$ ls -lrth
total 490M
-rw-r--r--. 1 oracle oinstall 490M May 22 00:09 OGG_MYSQL_V1043063-01.zip
[oracle@mysqlOGG oggsoft]$
[oracle@mysqlOGG oggsoft]$ unzip OGG_MYSQL_V1043063-01.zip

[oracle@mysqlOGG oggsoft]$ ls
ggs_Linux_x64_MySQL_services_shiphome  META-INF  OGG-23ai-README.txt  OGGCORE_Release_Notes_23.4.2.24.06.pdf  OGG_MYSQL_V1043063-01.zip

Step 4: Run the OGG Installation

The runInstaller script launches the Oracle Universal Installer GUI, which walks through home selection, prerequisite checks, and the actual file copy. A root script needs to run partway through to register the inventory.


[oracle@mysqlOGG oggsoft]$ cd ggs_Linux_x64_MySQL_services_shiphome/Disk1/
[oracle@mysqlOGG Disk1]$ ls
install  response  runInstaller  stage

[oracle@mysqlOGG Disk1]$ ./runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 3693 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 4095 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2025-05-22_12-12-37AM. Please wait ...
[oracle@mysqlOGG Disk1]$

Now a GUI window will appear. Follow the instructions below.

Click Next

Oracle GoldenGate for MySQL installer welcome screen

Provide the OGG Home: /ogg/ogg23ai_ma

Setting OGG Home path in the installer

Click Next

Installer summary screen before installation

Click Install

Oracle GoldenGate for MySQL installation progress bar
Installer copying files during setup
Installer approaching completion

Log in with the root user and run the script, then click OK.

Prompt to run root configuration script

[root@mysqlOGG ~]# /ogg/oraInventory/orainstRoot.sh
Changing permissions of /ogg/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /ogg/oraInventory to oinstall.
The execution of the script is complete.
[root@mysqlOGG ~]#

Click Close

Installation complete confirmation screen

Step 5: Set Up Deployments and Create a Service Manager Using OGGCA

Once the binaries are installed, the OGGCA (Oracle GoldenGate Configuration Assistant) wizard creates the service manager and the first deployment. This is what registers GoldenGate as a running service on the host.


[oracle@mysqlOGG ogg23ai_ma]$ cd /ogg/ogg23ai_ma/
[oracle@mysqlOGG ogg23ai_ma]$ ls
bin  deinstall  diagnostics  include  install  inventory  jdk  jlib  lib  OPatch  oraInst.loc  oui  srvm
[oracle@mysqlOGG ogg23ai_ma]$
[oracle@mysqlOGG ogg23ai_ma]$ cd bin/
[oracle@mysqlOGG ogg23ai_ma]$ ls
adminclient  cachefiledump  chkptdump      convchk  defgen       distsrvr  extract  logdump   oggerr  pmsrvr    replicat  ServiceManager  XAGTask
adminsrvr    checkprm       ConfigService  convprm  diagnostics  emsclnt   keygen   oggca.sh  orapki  recvsrvr  retrace   trailscan
[oracle@mysqlOGG ogg23ai_ma]$ ./oggca.sh

Now the OGGCA GUI window will appear. Follow the instructions below.

Provide the Software Home, Service Manager Home, hostname/IP, and port.

OGGCA wizard Service Manager home configuration

Provide the credentials used to access the OGG console.

Setting OGG console admin credentials

Provide the deployment name, deployment home, hostname/IP, and port.

OGGCA deployment name and home configuration

Check the box and click Next.

Confirming deployment settings summary

Click Finish

OGGCA wizard finish screen
OGGCA configuration progress bar
OGGCA configuration nearing completion

Click OK

Deployment created confirmation dialog

Log in with the root user and run the script, then click OK.

Prompt to register OGG as a system service

[root@mysqlOGG ~]# /ogg/ogg23ai_sm/bin/registerServiceManager.sh
Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
----------------------------------------------------
     Oracle GoldenGate Install As Service Script
----------------------------------------------------
OGG_HOME=/ogg/ogg23ai_ma
OGG_CONF_HOME=/ogg/ogg23ai_sm/etc/conf
OGG_VAR_HOME=/ogg/ogg23ai_sm/var
OGG_USER=oracle
Running OracleGoldenGateInstall.sh...
Created symlink /etc/systemd/system/multi-user.target.wants/OracleGoldenGate.service → /etc/systemd/system/OracleGoldenGate.service.
[root@mysqlOGG ~]#

Click Close

GoldenGate service registration complete

Step 6: Check the OGG Service Status on the Server

After registration, GoldenGate runs as a systemd service. Confirm it is active and review the child processes it spawns for the admin server, distribution server, receiver server, and process manager.


[oracle@mysqlOGG ~]$ systemctl status OracleGoldenGate
● OracleGoldenGate.service - Oracle GoldenGate Service Manager
     Loaded: loaded (/etc/systemd/system/OracleGoldenGate.service; enabled; preset: disabled)
     Active: active (running) since Sun 2025-05-22 11:33:52 IST; 14min ago
   Main PID: 656 (ServiceManager)
      Tasks: 111 (limit: 15712)
     Memory: 160.2M
        CPU: 40.601s
     CGroup: /system.slice/OracleGoldenGate.service
             ├─ 656 /ogg/ogg23ai_ma/bin/ServiceManager --inventory "'/ogg/ogg23ai_sm/etc/conf'"
             ├─3586 /ogg/ogg23ai_ma/bin/adminsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-adminsrvr-config.dat
             ├─3588 /ogg/ogg23ai_ma/bin/recvsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-recvsrvr-config.dat
             ├─3590 /ogg/ogg23ai_ma/bin/distsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-distsrvr-config.dat
             └─3592 /ogg/ogg23ai_ma/bin/pmsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-pmsrvr-config.dat
[oracle@mysqlOGG ~]$
[oracle@mysqlOGG ~]$ ps -ef|grep ogg23ai
oracle       656       1  1 11:33 ?        00:00:09 /ogg/ogg23ai_ma/bin/ServiceManager --inventory '/ogg/ogg23ai_sm/etc/conf'
oracle      3586     656  0 11:34 ?        00:00:03 /ogg/ogg23ai_ma/bin/adminsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-adminsrvr-config.dat
oracle      3588     656  0 11:34 ?        00:00:03 /ogg/ogg23ai_ma/bin/recvsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-recvsrvr-config.dat
oracle      3590     656  1 11:34 ?        00:00:12 /ogg/ogg23ai_ma/bin/distsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-distsrvr-config.dat
oracle      3592     656  1 11:34 ?        00:00:12 /ogg/ogg23ai_ma/bin/pmsrvr --config /ogg/ogg23ai_sm/var/run/OggMySQL-pmsrvr-config.dat
oracle      5274    5095  0 11:48 pts/1    00:00:00 grep --color=auto ogg23ai
[oracle@mysqlOGG ~]$

Step 7: Log In to the Service Manager and Deployment Console

With the service running, both consoles should be reachable over HTTP using the credentials set during OGGCA. The Service Manager console runs on port 7801 and the deployment services console runs on port 7803.

http://192.168.101.6:7801 ==> Service Manager
http://192.168.101.6:7803 ==> Deployment Services

http://192.168.101.6:7801

Oracle GoldenGate Service Manager login page for MySQL deployment
Oracle GoldenGate Service Manager dashboard for MySQL deployment

http://192.168.101.6:7803

Oracle GoldenGate deployment services login page
Oracle GoldenGate deployment console after login

Oracle GoldenGate 23ai for MySQL is now installed, registered as a systemd service, and reachable through both the Service Manager and deployment consoles. From here you can create extract and replicat processes to start replicating data between MySQL and your target database.

Thank you for reading!

I hope this content has been helpful to you. Your feedback and suggestions are always welcome. Feel free to leave a comment or reach out with any queries.

Abhishek Shrivastava

Oracle DBA with hands-on experience managing production Data Guard, RAC, GoldenGate, and APEX environments. I write practical, tested installation and troubleshooting guides based on real deployment work.

📧 Email: oraeasyy@gmail.com
🌐 Website: www.oraeasy.com

Follow Us

Comments

↑