Pada suatu saat mungkin programmer ingin membuat join antar tabel yang letaknya tidak hanya berbeda database, tetapi juga berbeda server. Bisa dua sistem yang dibuat sendiri, maupun salah satu atau keduanya sistem yang tidak dibuat sendiri, seperti Open Source. Misalnya menghubungkan Sistem Informasi Universitas dengan Elearning yang dibangun dengan Moodle, seperti pada gambar di bawah ini:
CREATE TABLE `server1`.`detail_sampel` (
`iddetailsampel` INT(10) UNSIGNED NOT NULL,
`detailsampel` VARCHAR(100) NOT NULL,
`idsampel` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`iddetailsampel`));
CREATE TABLE `server2`.`sampel` (
`idsampel` INT(10) UNSIGNED NOT NULL,
`sampel` VARCHAR(100) NOT NULL,
PRIMARY KEY (`idsampel`));
FEDERATED
Pada MySQL, hal tersebut tidak dapat dilakukan, kecuali menggunakan tabel dengan jenis FEDERATED.
The FEDERATED storage engine lets you access data from a remote MySQL database without using replication or cluster technology. Querying a local FEDERATED table automatically pulls the data from the remote (federated) tables. No data is stored on the local tables. The FEDERATED storage engine is not enabled by default in the running server; to enable FEDERATED, you must start the MySQL server binary using the –federated option. (sumber: https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html)
CREATE TABLE `server1`.`kopisampel` (
`idsampel` INT(10) UNSIGNED NOT NULL,
`sampel` VARCHAR(100) NOT NULL,
PRIMARY KEY (`idsampel`))
ENGINE=FEDERATED
CONNECTION=’mysql://userdbserver2:passworddbserver2@192.168.1.2:3306/server2/sampel’;
Sekarang join antar tabel lebih dari satu tabel dapat dilakukan dengan cara membuat tabel berjenis FEDERATED yang sama persis strukturnya dengan tabel yang letaknya berbeda server. Oleh karena itu, jika melakukan query seperti di bawah ini:
SELECT * FROM `server1`.`detailsampel` ds JOIN `server1`.`kopisampel` ks ON ks.idsampel=ds.idsampel;
maka seolah-olah melakukan query seperti di bawah ini:
SELECT * FROM `server1`.`detailsampel` ds JOIN `server2`.`sampel` s ON s.idsampel=ds.idsampel;
Mengaktifkan Federated (Ubuntu)
Pada definisi tipe tabel Federated di atas, disebutkan bahwa untuk memulai agar Federated dapat digunakan maka gunakan –federated pada saat memulai Mysql. Oleh karena itu, lakukan perintah di bawah ini:
- nano /lib/systemd/system/mysql.service
ubah ExecStart=/usr/sbin/mysqld menjadi ExecStart=/usr/sbin/mysqld –federated - systemctl daemon-reload
- service mysql restart