Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 16701|Válasz: 1

[Forrás] A legkönnyebb gödör, amire lépni a mysql Binlogban

[Linket másol]
Közzétéve 2018. 09. 25. 10:31:40 | | | |
A MySQL magas rendelkezésre állású architektúrákban az elsődleges adatbázis-replikáció nagyon gyakori típus.

Amikor az elsődleges adatbázis leáll, egy szolgaadatbázist frissíthetsz új elsődleges adatbázissá a szolgáltatás elérhetőségének biztosítása érdekében. Ugyanakkor a teljes klaszter QPS-e javítható a slave könyvtár bővítésével.

A master-slave replikációs architektúra alatt a MySQL binlogot használ a master-slave adatkonzisidencián eléréséhez.



Ahogy a fenti ábrán látható, a MySQL mester-slave replikáció főként a következő lépésekből áll  

1. A mester naplózza a bináris napló változásait

2. A szolga io_thread a fő könyvtár binlogját kérje, és az így kapott binlog naplót írja a relé naplóba

3. Rabszolga sql_thread ismételd meg az eseményeket a relay naplóban


A binlog nemcsak a MySQL master-slave replikációhoz való hivatkozás, hanem más célokat is szolgál. Például:

1. Használd a mysqlbinlog eszközt a binlog fájl elemzésére az időbeli adatbázis-helyreállítás végrehajtásához.

2. Adatbázis visszaemlékezése binlog események alapján (a MariaDB közvetlenül használhatja a mysqlbinlogot flashbackhez)

3. A Github nyílt forráskódú online táblázatváltó eszköze, a gh-ost szintén binlogon keresztül van megvalósítva

4. A binlogokat szegélyezéssel is fokozatosan feliratkozhatsz és fogyaszthatod


A binlog nagyon hasznos, de elkerülhetetlen, hogy a napi működés és karbantartás során problémákba ütközhetsz. Íme néhány binloghoz kapcsolódó hiba.

Az egyik leggyakrabban feltett kérdés

Jelenség

MySQLBinlog5.5 elemzi a MySQL5.7 binlog fájlt

ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 31, event_type: 35ERROR: Could not read entry at offset 123: Error in log format or read error.

Ok-elemzés

A MySQL 5.6 és más magasabb binlog fájlok verziók új binlog eseményeket adtak hozzá, például GTID eseményeket.

A mysqlbinlog a mySQL5.5-ben nem ismeri fel az ilyen binlog eseményeket.

Megoldás

Használd a mysqlbinlog magasabb verzióját a mysqlbinlog alacsonyabb verzió által generált binlog feloldásához

Második gyakran feltett kérdés

Jelenség

Egy egészséges mysql szerver szolga státuszt jelenít meg

Last_SQL_Error:Relay log olvasási hiba: Nem tudtam parzálni a relay log eseménybejegyzést.
A lehetséges okok: a mester bináris naplója megsérült (ezt ellenőrizheted a 'mysqlbinlog' futtatásával a bináris naplón),
A slave relay naplója megsérült (ezt ellenőrizheted a 'MySQLBinlog' futtatásával a relay naplóban),
hálózati probléma, vagy hiba a mester vagy szolga MySQL kódjában.
Ha ellenőrizni akarod a mester bináris naplóját vagy a rabszolga relé naplóját,
A nevüket úgy tudhatod, ha kiadod a 'MUTASSA RABSZOLGA STÁTUSZ' jelzést ezen a rabszolgán.

Ok-elemzés

A relénapló bejegyzései nem olvashatók binlog hibák miatt a master könyvtárban, a slave könyvtárban lévő relay naplóhibák, vagy hálózati problémák és hibák miatt. Általában hálózati hiba vagy a szolga könyvtárra gyakorolt túlzott nyomás okozza, ami helytelen relé-log formátumot eredményez.

Megoldás

Miután megtalálták a jelenlegi szinkronizációs időpontot és újraállították a master-slave szinkronizációt, új relénaplót generálnak, és a master-slave szinkronizáció helyreáll.

A "show slave status\G" kiadásból találjuk meg a következő információkat:

Relay_Master_Log_File: mysql-bin.002540 // A szolga könyvtár által olvasott mester binlogExec_Master_Log_Pos: 950583017 // Az a pozíciópozíció pont, amelyet a szolgán futtattak
Állítsd le a szolgát, és állítsd be újra a szinkronizációt a binlog fájlból, amit a szolga olvasott, és a végrehajtott pozícióból.

Relay_Master_Log_File: mysql-bin.002540 // A szolga könyvtár által olvasott mester binlogExec_Master_Log_Pos: 950583017 // Az a pozíciópozíció pont, amelyet a szolgán futtattak

Harmadik gyakran ismételt kérdés

Jelenség

Állítsd vissza a slave státuszt leállás utáni hiba:

Last_SQL_Error: Hiba a relé log pozíciójának inicializálásában: I/O hiba a fejléc olvasása a bináris naplóból
Last_SQL_Error: Hiba inicializálója a relé napló pozíciója: A binlog rossz varázsszámú; Ez nem egy bináris naplófájl, amit ez a MySQL verzió használhat

Ok-elemzés

Leállás, például áramszünet, alaplap égése stb. vagy illegális leállítás, ami a relay-bin fájl megromlásához vezet

Megoldás

Ugyanaz a második kérdés.

relay_log_recovery = 1 is beállítható.

Amikor a slave leáll a könyvtárból, ha a relay-log megsérül és a relay napló egy része nem kerül feldolgozásra, a relay log automatikusan elhagyódik, és a naplót visszanyerik a mesterről, ezzel befejezve a relénapló helyreállítását.

Gyakran ismételt kérdés negyedik

Jelenség

Akkor jelenik meg, amikor a mastert váltja a könyvtárgép újraindítása után

Hiba (1201-es kód): Nem sikerült inicializálni a fő információs struktúrát; további hibaüzenetek találhatók a MySQL hibanaplóban
vagy

HIBA 1872 (HY000): A slave nem inicializálta a relé napló információs struktúráját a tárolóból

Ok-elemzés

Leállás, például áramszünet, alaplap égése stb., vagy illegális leállítás, ami kárt okoz master.info vagy realy-log.info fájlokban

Megoldás

Slave> reset all slave, válts master

Megelőző intézkedések

Profilbeállítások

relay_log_info_repository=táblázat
master_info_repository=táblázat
A MySQL 5.6.5 mysql.slave_master_info és mysql.slave_relay_log_info tárolómotorja alapértelmezetten MyISAM formátumra van állítva, és át kell váltanod az InnoDB tárolómotorjára

MÓDOSÍTÓ TÁBLÁZAT mysql.slave_master_info ENGINE=InnoDB;
MÓDOSÍTÓ TÁBLÁZAT mysql.slave_relay_log_info ENGINE=InnoDB;
mysql.slave_master_info táblázatot sync_master_info események után frissítik.

mysql.slave_relay_log_info táblázatot minden tranzakciós commitnél frissítik.

5. Gyakran Ismételt Kérdés

Jelenség

A master slave eredetileg egy utasítás binlog_format, miután a fő adatbázist sorra binlog_format változtatta, a "show slave státusz" jelenik meg a könyvtárból:

Last_Error: Error executing row event event: 'Nem lehet végrehajtani utasítást: lehetetlen bináris naplóba írni, mivel az utasítás sorformátumban van, és BINLOG_FORMAT = STATEMENT.'

Ok-elemzés

Ha a fő adatbázis binlog_format sor, és a szolga könyvtár binlog_format is utasítás, a fenti hiba jelenik meg.

De a fő könyvtár binlog_format az állásfoglalás, a rabszolgakönyvtár binlog_format sor;

Vagy ha a fő adatbázis binlog_format sor, akkor a hiba nem kerül jelentésbe, ha az adatbázis binlog_format kevert.

Ha az SQL szálad valóban konfigurált
binlog_format=STATEMENT Ha megkap egy SOR-eseményt, megáll. A
az oka az, hogy nem tudná naplózni ezt a ROW eseményt STATEMENTformatban (néha ezt ROW injekciónak is nevezzük, ami vagy egy
BINLOG utasítás vagy egy ROW esemény, amelyet a slave SQL szála hajt végre)
Részletes indoklás:https://bugs.mysql.com/bug.php?id=69095

Megoldás

RABSZOLGA> ÁLLÍTSD RABSZOLGA;
RABSZOLGA> GLOBÁLIS KÉSZLET binlog_format=VEGYES HALMAZ;
RABSZOLGA> KEZDJ RABSZOLGA;

6. számú gyakran ismételt kérdés

Jelenség

Hiba a mysql5.6 és mysql5.5 szinkronizálásakor

Last_IO_Error: Fatal error 1236 a master-től, amikor bináris naplóból olvasott adatokat: 'Slave nem tudja kezelni a replikációs eseményeket azzal az ellenőrzőösszeggel, amelyre a master be van állítva; Az első esemény 'MySQL-bin.000001' 4-kor, az utolsó esemény a 'MySQL Bin.000001' 120-nál, az utolsó bájt a 'MySQL Bin.000001' 120-nál olvasható.

Ok-elemzés

Annak érdekében, hogy megoldják azt a problémát, hogy az elsődleges szerveren futó SQL utasítások nem konzisztenszenek a szerveren futó SQL utasításokkal (úgynevezett event corrupt) szoftver- és hardver- vagy hálózati átviteli hibák miatt, a MySQL 5.6 hozzáadja a Replikációs Esemény Ellenzőösszeg funkciót. Amikor egy eseményt a bináris naplóba írnak, az ellenőrző összeget is a bináris naplóba írják, majd miután az esemény a hálózaton keresztül továbbítódik a szolgának, az a szolgán ellenőrzik, majd a szolga átadó naplójába kerül. Mivel minden lépésnél eseményeket és ellenőrzőösszegeket rögzítenek, gyorsan kideríthetjük, mi a probléma.

A mysql5.6.5 és újabb verziókban binlog_checksum alapértelmezett érték crc32,

Az előző verzió alapértelmezett értéke binlog_checksum nem volt

megoldás

Szolga> globális készlet binlog_checksum=nincs

Gyakran ismételt kérdés 7

Jelenség

Miután a lemez tele van, tisztítsd meg kézzel a binlog fájlt és a mysql-bin.index fájlt

A show binary naplók üresek, de a show master státusz normális.

a mysql> bináris naplókat mutat; Üres készlet (0.00 sec)mysql> show master status;
+------------------+-----------+--------------+------------------+
| Fájl | Pozíció | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.001385 | 987114584 |              |                  |
+------------------+-----------+--------------+------------------+

Ok-elemzés

Miután megnéztem a mysql-bin.index fájlt, megtaláltam az első üres sort.

A mysql forráskódban rpl_master.cc:show_binlogs() a következő kódot találod:

/* The file ends with EOF or empty line */
  míg ((length=my_b_gets(index_file, fname, sizeof(fname))) > 1)
Az üres sorokat a dokumentum végének tekintik

(Hivatkozás.)https://yq.aliyun.com/articles/213657Cikk)

Megelőző intézkedések

Ne töröld kézzel a binlogot, ne szerkessze kézzel a mysql-bin.index fájlt, hacsak nem tudod, mit csinálsz, különben magadnak kell bányákat rakni!

összefoglalás

A DBA-knak odafigyelniük kell a binlog fejlesztéseire minden új MySQL verzióban (például az 5.6-os verzióban hozzáadott gtid funkcióra, az 5.7-es verzióban hozzáadott Enhanced Multi-threaded Slaves-re), és részletesen meg kell érteniük minden paraméter jelentését, hogy tudják, mit jelentenek, ha hibákkal találkoznak, és könnyen megoldják a problémákat.





Előző:C# string speciális szimbólumok
Következő:Alapvető típusok és referenciatípusok a js-ben
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com