Oracle’s database link allows user to query on multiple physical databases.
Is there any MySQL equivalent ? Workaround ?
I want to run a join query on two tables , which are in two physical databases. Is it possible in MySQL ?
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
I can think of four possible workarounds for your scenario:
- use fully-qualified-table-names when querying for the external table. MySQL supports the
dbname.tablename-syntax to access tables outside the current database scope. This requires that the currently connected user has the appropriate rights to read from the requested table in another physical db.
- if your external database is running on a different MySQL server (either on the same machine or via a network connection) you could use replication to constantly update a read-only copy of the remote table. Replication is only possible if you’re running two separate MySQL instances.
- use the
FEDERATEDMySQL storage engine to virtually import the table into your current database. This lifts the requirement of giving the current user access rights into the second database as the credentials are given with the
CREATE TABLE-statement when using the
FEDERATEDstorage engine. This also works with the databases running on different physical servers or different MySQL instances. I think that this will be the poorest performing option and does have some limitations – more or less important depending on your usage scenario and your requirements.
- This is an extension to method 1. Instead of having to specify the fully-qualified-table-names every time you request information from your external table, you simply can create a view inside your current database based on a simple
SELECT <<columns>> FROM <<database>>.<<table>>. This resemble the way, the
FEDERATED-method works, but is limited to tables on the same MySQL instance.
Personally I’d consider method (4) as the most useful – but the others could also be possible workarounds depending on your requirements.
There’s no MySQL equavilent method at the moment, see this post. However as the poster suggest you can do a work-around if the databases are on the same machine, by just adding the database-name in front of the table-name.
Also see this, it’s 6 years old, but still not resolved. It’s closed and probably not on their todo-list anymore.