All Interzoid products and tools from a single launch point: Quickly solve data challenges - better ROI for everything your data flows into -> Launch Now!

🐬 MySQL Data Matching Wizard

Connect directly to any MySQL or MariaDB database and find matching clusters, no file exports needed

The MySQL Data Matching Wizard is a browser-based, step-by-step tool that connects directly to your MySQL or MariaDB database and uses Interzoid's AI-powered similarity algorithms to identify and cluster matching records within your tables. Whether you need to deduplicate company names, match individual names, or find address variations, the wizard walks you through the entire process: connecting to the database, selecting a table and columns, estimating the cost, running the match, and reviewing the results in a sortable, searchable spreadsheet view.

It works with every MySQL deployment: Amazon RDS and Aurora MySQL, PlanetScale, Azure Database for MySQL, Google Cloud SQL, DigitalOcean Managed Databases, MariaDB, and self-hosted servers. The wizard supports 17 languages and guides you through a cascading connection flow: connect, then select from your databases and tables using dropdown menus populated directly from the server. No need to manually look up or type object names.

1Prerequisites

Before using the MySQL Data Matching Wizard, you will need:

  • An Interzoid API Key: Register for an account and obtain your unique API license key. This key authenticates your requests and tracks usage credits.
  • A MySQL user with read access: A username and password for an account that can SELECT from the tables you want to match. A dedicated read-only account is recommended; see Connect to MySQL for the statements to create one.
  • Network access from Interzoid: Managed providers restrict which addresses may connect. If your server is not publicly reachable, add Interzoid's addresses to its allow list first; see Network Access.
  • Available Credits: Each record processed consumes one API credit. The wizard counts the rows in your table and shows an estimate before you run, so you can confirm your balance covers the job.

2Launch the Wizard and Enter Your API Key

Open the MySQL Data Matching Wizard in your browser. Before beginning, enter your Interzoid API key in the top-right area of the header bar. Your key will be saved in your browser for future sessions.

  • API Key Field: Type or paste your API key into the input field in the header. Click the lock/eye icon to toggle visibility. The API Key label links to your account page.
  • Check Credits: Click the Credits button to see your current credit balance. The balance is also used for the cost estimate on the Run tab. Approved accounts may run a negative balance: the wizard shows a negative balance in amber with a note, not as an error, and the job proceeds with usage beyond the balance billed to the account.
  • Language Selection: Click the language dropdown in the navigation bar to switch between any of the 17 supported languages. You can also set the language via URL parameter: ?lang=fr for French, ?lang=ja for Japanese, and so on.
  • Resources & Support: The Resources menu links to this guide, a sample match report, Interzoid Central Command, and support.

Once your API key is entered, click Get Started on the introduction screen to begin the wizard.

3Select a Matching Function

The wizard presents six matching functions. Choose the one that matches your data and use case. Each card shows a description, the credit cost per record, how many input columns the function needs, and the column parameters it requires. The function you used most recently is marked Last used and pre-selected the next time you open the wizard.

Single-Column Functions

These functions analyze one column of data to find matches:

Function Use Case Column Required
Company Name Matching Match variations like "IBM", "I.B.M. Corp", "International Business Machines" Company Name
Individual Name Matching Match "James Johnston", "Jim Johnston", "J. Johnston" as the same person Full Name
Street Address Matching Match "400 E Broadway St" with "400 East Broadway Street" Address

Combination Functions

These functions use two columns together for higher matching precision:

Function Use Case Columns Required
Company + Address Higher precision matching using both company name and street address Company Name, Address
Company + Full Name Contact deduplication using company and individual name Company Name, Full Name
Address + Full Name Person-at-address matching using address and individual name Address, Full Name

Click on the card for your chosen function (or select it with the keyboard), then click Next to proceed.

4Connect to MySQL

Enter the server details, click Connect, and then choose the database from a dropdown populated directly from the server. MySQL has no warehouse step and no separate schema level (a schema and a database are the same object), so the flow is the shortest of the database wizards.

Connection Flow

Server & Credentials → Database

Two Ways to Enter the Connection

The toggle at the top of the form switches between them:

  • Connection Fields: Pick your hosting provider, then enter the host, port, username, password, and SSL mode. Choosing a provider fills in the port and SSL mode and shows a hint about where to find the host name in that provider's console. The database is chosen from a dropdown after connecting.
  • Connection String: Paste the complete string your provider gives you, in either the URL form (mysql://user:password@host:3306/database) or the native driver form (user:password@tcp(host:3306)/database?tls=true). The database comes from the string, so the wizard goes straight to table selection once connected. A copy button and a show/hide toggle sit next to the field.

Hosting Providers

Every provider below speaks the standard MySQL protocol with password authentication over TLS, which is what the wizard sends. The presets only save you from looking up the port and SSL setting; the host always comes from your provider's console.

Provider Where to find the host Notes
Amazon RDS / Aurora MySQL The instance or cluster endpoint in the RDS console (ends in rds.amazonaws.com) The security group must allow inbound TCP 3306 from Interzoid. Use the reader endpoint of an Aurora cluster to keep load off the writer.
PlanetScale A connection string created in the PlanetScale dashboard (host ends in psdb.cloud) Create a password for the branch, then use its host, username and password. TLS is required and the preset selects verify-full.
Azure Database for MySQL The server name on the Overview page (ends in mysql.database.azure.com) Add Interzoid to the server's firewall rules under Networking. SSL is required.
Google Cloud SQL The instance's public IP address Add Interzoid under Connections, Authorized networks. Instances that require client certificates are not yet supported; contact support.
DigitalOcean Managed MySQL The public host and port in the cluster's Connection Details The port is usually 25060, not 3306. Add Interzoid under Trusted Sources. SSL is required.
MariaDB Your host name or IP, or the endpoint of a managed MariaDB service (SkySQL, RDS for MariaDB) MariaDB speaks the same protocol and works with every option on this page. Choose the MySQL / MariaDB preset.
Self-hosted / local Your own host name or IP Use SSL mode disable only if the server does not offer TLS. The server must be reachable from the internet, or through a bastion host you control.

SSL Mode

Four modes are offered, using the same vocabulary as the PostgreSQL wizard: require (default, encrypts the connection without validating the server certificate), verify-ca and verify-full (also validate the certificate chain and host name; the MySQL driver treats both the same), and disable (plain TCP, for local servers only). Every managed provider requires TLS and will refuse a connection with SSL disabled; the wizard shows an amber warning if you pick disable for a managed provider.

Network Access

The wizard does not run in your browser's network. The matching API connects to your database from Interzoid's servers, so the database must accept connections from those addresses. If Connect fails with a timeout rather than an authentication error, this is almost always the cause. Add the following addresses to your security group, firewall rules, or authorized networks:

Interzoid outbound addresses: 203.0.113.10, 203.0.113.11

For the IP-restricted setups (an RDS instance in a private subnet, a server behind a corporate firewall), a bastion host or an SSH tunnel you operate can forward port 3306; enter the tunnel endpoint as the host.

Recommended MySQL Setup: a Read-Only Account

For ongoing use, create a dedicated account that can read the tables you want to match and nothing else. Access can be revoked at any time by dropping the user:

CREATE USER 'interzoid_reader'@'%' IDENTIFIED BY 'choose-a-strong-password' REQUIRE SSL;
GRANT SELECT ON my_db.* TO 'interzoid_reader'@'%';

-- Tables created later in my_db are covered automatically by the
-- database-level grant. To revoke access later:
-- DROP USER 'interzoid_reader'@'%';

Enter interzoid_reader and the password in the wizard. Replace '%' with Interzoid's addresses (see Network Access) to limit where the account may connect from, and drop REQUIRE SSL only for a local server without TLS.

After Connecting

  • Connect Button: Click Connect to sign in. If the connection succeeds, the wizard loads the databases the account can see (in connection string mode the database named in the string is used and no list is shown). If it fails, the message says which part went wrong: a host that could not be reached or resolved, a rejected password or unknown database, or a TLS negotiation problem.
  • Database: Select the database containing the table you want to match against. System databases (mysql, sys, information_schema, performance_schema) are left out of the list. If the account can see only one database, it is pre-selected.
Remembering the connection: The Remember these connection details on this browser checkbox is off by default. When on, the host, port, user, password, SSL mode, provider, and connection string are stored in this browser's local storage only, so you can reconnect without retyping them. Turning it off erases them. Leave it off on shared computers.
Security Note: Your password (or a connection string that contains one) is sent to the matching API over HTTPS in the body of each request, never in a URL, and is not retained by Interzoid after the request completes. Processing is read-only: the API issues SELECT statements against the table and columns you choose and nothing else.

Once you have selected a database, click Next to proceed to table and column selection. To connect to a different server, click Disconnect.

5Select Table, Columns, and Options

Choose the table to match against, confirm which columns hold the data to match on, and decide what the output should contain.

Table Selection

The wizard presents a dropdown of all tables and views in the database you selected. Choosing one does three things at once: it loads the column names, fetches the first five rows as a preview, and counts the rows so the Run tab can show a cost estimate. The row count appears directly under the table dropdown.

Match Columns

For each matching parameter required by your chosen function, the wizard looks at the column names and pre-selects the most likely one (a column named company_name for Company Name, street_address for Address, and so on). Pre-selected columns are marked, and you can change any of them from the dropdown. Under each selection the wizard shows what the first record will actually send to the matching engine, so a wrong guess is obvious before you run.

  • Single-column functions: Select one column for the matching parameter.
  • Combination functions: Select two different columns, one for each parameter. The two columns must be different.

Table Preview

Below the column selectors, a preview of the first rows of the table highlights the columns you have mapped, so you can see the data in context. Every column type is rendered as text, including json, datetime, decimal, and binary columns. If a preview cannot be loaded for a table, the mapping still works from the column names.

Output Columns

Use the checkboxes to choose which columns from the table appear in the match report. The match columns are always included and show as checked and locked, so you only need to tick the additional columns you want. Select all and Select none buttons are available for wide tables.

Tip: Include identifying columns (a primary key, city, state, and so on) to make the match report more useful for downstream analysis. Including the primary key is what lets you load the similarity keys back into MySQL and join them to the original rows.

Output Options

These settings are remembered in your browser across sessions.

  • Include header row in output: When enabled (default), the first line of the output lists the column names, with simkey as the last name when similarity keys are shown. The spreadsheet view uses this row to label its columns.
  • Show similarity keys in output: When enabled (default), each output record includes the generated similarity key as the last column. Records with the same key are matches. Disable this for clean output with only the selected data columns (the spreadsheet view can then no longer group matched records).
  • Show matching records only: When enabled (default), only records that have at least one other matching record are returned, grouped into clusters. Disable it to see every record in the table after processing.
  • Keep original record order: Available only when all records are returned. When enabled, output row 1 is table row 1 and so on, which is what you want if you plan to load the similarity keys back alongside the original data. When disabled, similar records are sorted together by similarity key.

Click Next when your selections and options are configured.

6Review and Run

The final screen shows a summary of all your selections: matching function, server, SSL mode, database, table, column assignments, and output options. Below the summary are the number of records to process and the estimated cost in credits, with a banner comparing the estimate to your current balance:

  • Green: your balance covers the run.
  • Amber: your balance is below the estimate.
  • Blue: your balance is negative. Approved accounts may run a negative balance; the job proceeds and usage beyond the balance is billed to the account.
  • Grey: the balance has not been checked yet; click Check Credits.

Click the green Run Match button to start processing. The wizard will:

  • Validate your API key and check your account's credit position for the job.
  • Connect to MySQL and read the selected columns from your table.
  • Process each record through the selected matching algorithm using concurrent workers for performance.
  • Generate the match report with records sorted and grouped into clusters of matching entries.

A progress indicator is shown while the job runs. Processing time depends on the number of records: most tables complete within seconds, while very large tables (up to 500,000 records) may take a minute or more. If a run fails, the reason (a rejected job size, a credit limit, a dropped connection) is shown in a red banner above the results area.

Large tables: The run reads the selected columns in one SELECT. For tables well beyond the 500,000-record limit, create a view that filters to the rows you want to match (a region, a date range, active records only) and match the view instead.

7Review the Results

When the run completes, a summary line reports how many records came back and, when similarity keys are included, how many match groups they form. The results panel below it shows the first 1,000 rows of the output; for larger results a note says how many rows there are in total, and the Spreadsheet View, Open as Text File, and Save Results buttons always work on the complete output.

Spreadsheet View

Click Spreadsheet View to open the results in a grid designed for reviewing match reports:

  • Grouping: matched records are tinted in alternating shades per similarity group and boxed, so each cluster reads as a unit. When all records are returned, records with no match partner stay plain.
  • Search: filters every row by any cell value.
  • Sort: click a column header to sort ascending, again for descending, and a third time to restore the original order. Sorting by the similarity key column regroups the records.
  • Columns: drag a header edge to resize, double-click it to fit the content, or use the fit-all button. The key column is highlighted.
  • Paging and full screen: large results are shown 500 rows per page (search and sort still cover every row), and the grid can expand to fill the window. Press Escape to close it.

Example Output

For a company name match on a table with columns id, company, address, city, state, with similarity keys and the header row enabled:

id,company,address,city,state,simkey
1041,IBM Corporation,1 New Orchard Rd,Armonk,NY,d477E1d7sG6dja3hDNsk9P
2288,I.B.M. Corp,1 New Orchard Road,Armonk,NY,d477E1d7sG6dja3hDNsk9P

1107,Microsoft Inc.,1 Microsoft Way,Redmond,WA,k8Rp2mNx4wQjL9vB3cYh7T
1932,Microsoft Corporation,One Microsoft Way,Redmond,WA,k8Rp2mNx4wQjL9vB3cYh7T
3015,MSFT Corp,1 Microsoft Way,Redmond,WA,k8Rp2mNx4wQjL9vB3cYh7T

In this example, the first cluster contains two records identified as variations of IBM, and the second cluster contains three records identified as variations of Microsoft. The last column in each row is the similarity key; all records sharing the same key are considered matches.

Loading the Keys Back into MySQL

With the primary key and the similarity key in the output, consolidation becomes ordinary SQL. Import the saved file into a staging table (with LOAD DATA LOCAL INFILE, MySQL Workbench's table import, or your provider's import tool), then join on the primary key:

CREATE TABLE company_simkeys (id INT PRIMARY KEY, simkey VARCHAR(64));
LOAD DATA LOCAL INFILE 'company-name-only_mysql_matches.csv'
  INTO TABLE company_simkeys
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  IGNORE 1 LINES
  (id, simkey);

-- Every record with at least one match partner, with its group
-- (window functions need MySQL 8.0 or MariaDB 10.2)
SELECT c.*, k.simkey,
       COUNT(*) OVER (PARTITION BY k.simkey) AS group_size
FROM   customers c
JOIN   company_simkeys k ON k.id = c.id
ORDER  BY k.simkey, c.id;

Run the match with Show matching records only turned off and Keep original record order on if you want a key for every row rather than only the matched ones.

8Save Your Results

Click Save Results above the results panel (or in the spreadsheet view) to download the complete match report as a CSV file. On supported browsers, a save dialog lets you choose the file name and location; on other browsers, the file downloads automatically. Open as Text File opens the complete output in a new browser tab instead.

The saved file is clean, delimited text that can be imported directly into spreadsheets, databases, or other data processing tools for further analysis.

Data Pipeline Integration: With the header row turned off, the output contains only data rows and blank-line cluster separators, which suits automated pipelines. With the header row on, the output opens cleanly in a spreadsheet or loads with LOAD DATA ... IGNORE 1 LINES. The underlying REST API can be called directly for fully automated matching workflows; see the next step.

9API Access for Developers

The MySQL Data Matching Wizard is powered by a REST API that can also be called directly from your own applications, scripts, or data pipelines. The /match and /discover endpoints accept the same parameters either as a GET query string or, recommended, as a JSON body in a POST request. Use POST so the password never appears in a URL or a server log.

Example: Match (POST)

$ curl -X POST "https://match.interzoid.com/match" \
       -H "Content-Type: application/json" \
       -d '{
    "driver": "mysql",
    "db_host": "mydb.abc123.us-east-1.rds.amazonaws.com",
    "db_port": "3306",
    "db_user": "interzoid_reader",
    "db_password": "MY_PASSWORD",
    "db_sslmode": "require",
    "db_database": "my_db",
    "table": "customers",
    "columns": "id,company,address,city,state",
    "function": "company-name-only",
    "company_column_name": "company",
    "apikey": "YOUR_API_KEY",
    "showkeys": "true",
    "matchesonly": "true",
    "includeheaders": "true"
  }'

Example: Match with a Connection String (GET)

A complete connection string can be passed in db_host, in either the mysql:// URL form or the native driver form, in which case db_user, db_password, db_port and db_database are taken from the string (a tls= or sslmode= parameter inside the string overrides db_sslmode). It must be URL-encoded in a query string:

$ curl "https://match.interzoid.com/match?\
driver=mysql&\
db_host=mysql%3A%2F%2Finterzoid_reader%3AMY_PASSWORD%40mydb.example.com%3A3306%2Fmy_db&\
db_sslmode=require&\
table=customers&\
columns=id,company,address,city,state&\
function=company-name-only&\
company_column_name=company&\
apikey=YOUR_API_KEY&\
showkeys=true&\
matchesonly=true&\
includeheaders=true"

MySQL Match API Parameters

Parameter Required Description
driver Yes Set to mysql (mariadb is also accepted)
db_host Yes Host name or IP address of the server, or a complete connection string in mysql:// URL form or native driver form
db_port No Port number; defaults to 3306
db_user Unless in db_host MySQL user name
db_password Unless in db_host The user's password. Send it in a POST body.
db_sslmode No require (default, encrypted without certificate validation), verify-ca or verify-full (certificate validated), or disable
db_database Unless in db_host Database name
table Yes Name of the table or view to read from. database.table is also accepted.
columns Yes Comma-separated list of column names to include in the output
function Yes One of: company-name-only, fullname-only, address-only, company-and-address, company-and-fullname, address-and-fullname
apikey Yes Your Interzoid API license key
company_column_name When applicable Name of the column containing company names
fullname_column_name When applicable Name of the column containing individual names
address_column_name When applicable Name of the column containing street addresses
showkeys No true (default) or false: append the similarity key to each output record
matchesonly No true (default) or false: return only matching clusters, or every record
includeheaders No true (default) or false: write a header row of column names as the first line
preserveorder No false (default) or true: keep table order instead of sorting by similarity key. Applies only when matchesonly=false.

Column and table names are backtick-quoted by the API, so pass them exactly as /discover returns them. Table name case sensitivity depends on the server's lower_case_table_names setting (case-sensitive on most Linux servers, case-insensitive on Windows and most managed services).

Discovery API

The wizard's dropdown menus, table preview, and row count are powered by a /discover endpoint that you can also call directly. It takes the same connection parameters as /match plus a resource. MySQL has no warehouse step and no separate schema level, so resource=warehouses and resource=schemas both return an empty list and a shared client can skip ahead:

# List databases (also validates the credentials). Shown as GET for brevity;
# POST a JSON body with the same fields to keep the password out of the URL.
$ curl "https://match.interzoid.com/discover?driver=mysql&db_host=mydb.example.com&db_user=interzoid_reader&db_password=MY_PASSWORD&db_sslmode=require&resource=databases"

# List tables and views within a database
$ curl "https://match.interzoid.com/discover?...&db_database=my_db&resource=tables"

# List columns within a table
$ curl "https://match.interzoid.com/discover?...&db_database=my_db&table=customers&resource=columns"

# Count the rows in a table (for a cost estimate)
$ curl "https://match.interzoid.com/discover?...&db_database=my_db&table=customers&resource=rowcount"

# First five rows of a table, as column names plus rows
$ curl "https://match.interzoid.com/discover?...&db_database=my_db&table=customers&resource=preview"

The list resources and rowcount return a JSON object with the names (or the count) in items; preview adds a rows array:

{"resource":"databases","items":["my_db","analytics"]}

{"resource":"rowcount","items":["12480"]}

{"resource":"preview","items":["id","company","city"],"rows":[["1041","IBM Corporation","Armonk"],["2288","I.B.M. Corp","Armonk"]]}

The /match API returns plain text output identical to what the wizard displays, making it suitable for piping into other tools or storing directly as a file.

The MySQL Data Matching Wizard makes it easy to discover hidden duplicates, inconsistent values, and matching records directly within your MySQL or MariaDB database, wherever it is hosted. Whether you use it interactively through the browser-based wizard or programmatically through the API, it delivers clean, actionable match reports that help you improve the quality, consistency, and value of your data, without ever exporting a file. If you have any questions or need assistance, don't hesitate to reach out to our support team.