Próbowałem uruchomić SQLgrey w połączeniu z wieloma (>1) bazami danych MySQL, ale nie wyszło. Niemniej poniżej moje doświadczenia:
- bazy tylko do odczytu (read_hosts) muszą nasłuchiwać na domyślnym porcie (3306), nie ma innej możliwości konfiguracji,
- połączenie na takiego samego użytkownika i to samo hasło jak baza podstawowa (db_host)
$DBIx::DBCluster::CLUSTERS = {
"$self->{sqlgrey}{db_host}" => {
'WRITE_HOSTS' => [$self->{sqlgrey}{db_host}],
'READ_HOSTS' => [@read_hosts],
},
};
$self->{sqlgrey}{dbh} = DBIx::DBCluster->connect($self->cnctinfo(),
$self->{sqlgrey}{db_user},
$self->{sqlgrey}{db_pass},
{ PrintError => 0,
AutoCommit => 1,
InactiveDestroy => 1 }
)
or $self->mylog('dbaccess', 0, "can't connect to DB: $DBI::errstr");
O ile z użytkownikiem i hasłem nie ma problemu (baza mysql również się replikuje na serwer zapasowy), to z portem jak najbardziej jest, no ale można się dostosować.
- pożyteczną opcją może być db_cleanup_hostname, która zapewnia, że tylko jeden serwer z SQLgrey będzie wykonywał okresowe czyszczenie tabel. W przypadku, gdy mamy spory ruch (dużo rekordów w bazie) i wiele frontend‘owych serwerów pocztowych powinno to zmniejszyć obciążenie bazy, a negatywnego wpływu na pracę raczej nie ma.
Uruchomienie SQLgrey z DBCluster kończy się mniej więcej tak:
Jul 28 11:28:01 mailin-ng1 sqlgrey: dbaccess: Using DBIx:DBCluster Jul 28 11:28:01 mailin-ng1 sqlgrey: dbaccess: Read_hosts: 10.0.27.176 Jul 28 11:28:01 mailin-ng1 sqlgrey: fatal: Can't locate object method "connect" via package "DBIx::DBCluster" at /usr/sbin/sqlgrey line 829.
DBIx::DBCluster w wersji 0.01. SQLgrey – 1.7.4. Perl 5.8.8.