Dua database berlainan

Apa yang anda boleh lakukan jika untuk semua query yang berjenis read perlu menggunakan pangkalan data A, dan untuk semua query yang berjenis write perlu menggunakan pangkalan data B.

Itu adalah soalan yang mana aku jumpa apabila menggunkan MySQL InnoDB Cluster. Apabila terdapat lebih daripada satu database yang mempunyai data yang sama tetapi fungsi yang berlainan, setiap query perlu menggunakan database yang khusus.

Dalam isu InnoDB Cluster, kami telah memasang MySQL Router di dalam server sebagai pembantu dalam menentukan IP pangkalan data yang mana perlu dibuat query. Apa yang telah dibuat adalah dengan membuat hubungan kepada pangkalan data adalah seperti berikut:

// Write
IP: 127.0.0.1
Port: 6666

// Read
IP: 127.0.0.1
Port: 6667

Mujur, di dalam Laravel, ada kaedah yang mudah untuk anda membuat penetapan supaya masalah ini diselesaikan oleh Laravel secara automatik.

// app/config/database.php

'mysql' => [
	'read' => [
		'host' => env('DB_HOST_READ', '127.0.0.1'),
		'port' => env('DB_PORT_READ', '3306'),
	],
	'write' => [
		'host' => env('DB_HOST_WRITE', '127.0.0.1'),
		'port' => env('DB_PORT_WRITE', '3306'),
	],
	'driver' => 'mysql',
	'database' => env('DB_DATABASE', 'forge'),
	'username' => env('DB_USERNAME', 'forge'),
	'password' => env('DB_PASSWORD', ''),
	'unix_socket' => env('DB_SOCKET', ''),
	'charset' => 'utf8mb4',
	'collation' => 'utf8mb4_unicode_ci',
	'prefix' => '',
	'strict' => true,
	'engine' => null,
],

Saya telah tambahkan parameter read dan write dan menyatakan apakah host dan port yang perlu digunakan mengikut keadaan query yang mahu dibuat.

// .env

DB_CONNECTION=mysql
DB_HOST_READ=127.0.0.1
DB_PORT_READ=6667
DB_HOST_WRITE=127.0.0.1
DB_PORT_WRITE=6666
DB_DATABASE=nama_database
DB_USERNAME=root
DB_PASSWORD=

Ubah fail env ikut kesesuaian.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.