Mysql replicare pe un singur computer, mysql

Avertizare. Dacă nu sunteți familiarizați cu replicare în MySQL, este puțin probabil să realizeze ceva de la nizhenapisannogo, ar trebui să citiți mai întâi documentația pentru replicarea și multi-server MySQL rula pe același computer.







Prelude. Mi-a trebuit să organizez replicarea bazei de date bidirecționale pe două servere mysql care rulează pe aceeași mașină (pentru a ocoli blocarea meselor myisam). Nu ar părea nimic complicat și special aici, având în vedere că știu cum să ruleze mai multe servere mysql pe o singură mașină și cum să organizeze replicarea bazelor de date între două mașini diferite. Dar sarcina nu a fost cea mai ușoară. Nu vă voi spune cum am luptat cu configurile pentru o zi întreagă, câte opțiuni de lansare am încercat etc. ci doar scrie despre capcane:

Piatra subacvatică №1. Mysql are parametrii master-host, master-port, dar nu există parametru master-socket, așa că atunci când am scris pentru primul server
master-host = localhost
master-port = 3307,
nu se lipsea de 127.0.0.1:3307, ci de la /tmp/mysql.sock, adică la sine, și nu la al doilea server. Și în jurnalele de informații despre locul în care se lipeste de fapt accidental a apărut numai atunci când eram foarte nerăbdător acolo.
Soluționarea acestei probleme este de a scrie master-host = 127.0.0.1.

Piatra subacvatica numarul 2. Chiar si dupa ce mi-am schimbat stapanul-gazda la 127.0.0.1 in my.cnf, sistemul nu a functionat. Aici motivul este că opțiunea este maestru-gazdă și alți parametri de replicare sunt citite din fișierul de configurare principal numai dacă ceva este în neregulă cu master.info fișier (este creat automat în directorul de date), de exemplu, el pur și simplu lipsește, iar dacă există, atunci master-host este citit de acolo și serverul este pus în ceea ce am schimbat în my.cnf. Documentația spune asta, dar am găsit-o după ce am găsit-o prin experiment ... Trebuia să-l subliniez în font roșu îndrăzneț, la naiba.







Soluționarea acestei probleme este de a edita manual, sau, mai ușor, eliminați master.info, fără a uita să opriți serverul mysql înainte de aceasta. Când dezinstalați, infa operațional pentru replicare este pierdut - fișierul jurnal curent - deci trebuie să fiți atent, este mai sigur să îl editați.

Ce sa întâmplat în cele din urmă. Iată o bucată din my.cnf, relevantă pentru cazul, cu care totul funcționează bine (versiunea mysql 4.0.18):

################
# Serverul MySQL 1
[Mysqld1]
port = 3306
socket = /tmp/mysql.sock
datadir = / data / mysql1
pid-file = /data/mysql1/mysqld.pid
user = mysql

# replicare
log-bin
server-id = 1
binlog-do-db = test

master-host = 127.0.0.1
master-port = 3307
master-user = replicator
master-connect-retry = 10
replicate-do-db = test
################

################
# Serverul MySQL 2
[Mysqld2]
port = 3307
socket = /tmp/mysql2.sock
datadir = / data / mysql2
pid-file = /data/mysql2/mysqld.pid
user = mysql

# replicare
log-bin
server-id = 2
binlog-do-db = test

master-host = localhost
master-port = 3306
master-user = replicator
master-connect-retry = 10
replicate-do-db = test
################

Pe primul server trebuie să faceți:
GRAND REPLICATION SLAVE ON *. * Pentru replicator @ localhost;

pe al doilea:
SLAVE DE REPLICARE GRANTĂ * * * TO [email protected];

Despre performanță (în loc de concluzie). După cum puteți vedea, pentru al doilea server am părăsit master-host = localhost. se va conecta la /tmp/mysql.sock, adică la primul server și trebuie să mergem acolo. Se pare că, ca un schimb prin domeniul unix de aproximativ două ori mai rapid decât prin prize de rețea. Aproape acest lucru poate afecta foarte mult performanța replicării, mai ales că în majoritatea cazurilor este implementată între două mașini diferite prin rețea. Dar, în ciuda acestui fapt, este confuz că dezvoltatorii mysql nu au presupus cazul de replicare pe un singur calculator și nu au implementat parametrul master-socket.







Articole similare

Trimiteți-le prietenilor: