I en av våra tidigare bloggar förklarade vi hur Clone Plugin, en av nya funktioner som visades i MySQL 8.0.17, kan användas för att bygga om en replikeringsslav. För närvarande är det bästa verktyget för det, såväl som för säkerhetskopiering, Xtrabackup. Vi tyckte det var intressant att jämföra hur dessa verktyg fungerar och beter sig.
Jämföra prestanda
Det första vi bestämde oss för att testa är hur båda fungerar när det gäller att lagra kopian av data lokalt. Vi använde AWS och m5d.metal-instans med två NVMe SSD och vi körde klonen till lokal kopia:
mysql> CLONE LOCAL DATA DIRECTORY='/mnt/clone/';
Query OK, 0 rows affected (2 min 39.77 sec)
Sedan testade vi Xtrabackup och gjorde den lokala kopian:
rm -rf /mnt/backup/ ; time xtrabackup --backup --target-dir=/mnt/backup/ --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=16
200120 13:12:28 completed OK!
real 2m38.407s
user 0m45.181s
sys 4m18.642s
Som du kan se var tiden som krävdes för att kopiera data i princip densamma. I båda fallen var begränsningen hårdvaran, inte mjukvaran.
Att överföra data till en annan server är det vanligaste användningsfallet för båda verktygen. Det kan vara en slav du vill tillhandahålla eller bygga om. I framtiden kan det vara en säkerhetskopia, Clone Plugin har inte en sådan funktion för närvarande men vi är ganska säkra på att någon i framtiden kommer att göra det möjligt att använda det som ett säkerhetskopieringsverktyg. Med tanke på att hårdvara är begränsningen för lokal säkerhetskopiering i båda fallen, kommer hårdvara också att vara en begränsning för överföring av data över nätverket. Beroende på din inställning kan det vara antingen nätverket, disk I/O eller CPU.
I en I/O-intensiv operation är CPU den minst vanliga flaskhalsen. Detta gör det ganska vanligt att byta ut en del CPU-användning för att minska datamängden. Du kan åstadkomma det genom komprimering. Om det görs i farten måste du fortfarande läsa samma mängd data men du skickar mindre av den (eftersom den är komprimerad) över nätverket. Sedan måste du dekomprimera den och skriva ner den. Det är också möjligt att själva filerna är komprimerade. I så fall minskar du mängden data som läses, överförs och skrivs till disk.
Både Clone Plugin och Xtrabackup kommer med en on-the-fly-komprimering (vi vill tacka Kenny Gryp, som korrigerade oss på denna bit). I Clone Plugin kan du aktivera det genom clone_enable_compression, som är inaktiverat som standard. Xtrabackup kan också använda externa verktyg för att komprimera data. När det gäller komprimerade InnoDB-tabeller kommer extern komprimering inte att göra så stor skillnad, så båda verktygen bör fungera på liknande sätt om nätverkets bandbredd är den begränsande faktorn.
Jämföra användbarhet
Prestandan är bara en sak att jämföra, det finns många andra som hur lätta verktyg är att använda. I båda fallen är det flera steg du måste utföra. För Clone Plugin är det:
- Installera plugin-programmet på alla noder
- Skapa användare på både givar- och mottagarnoder
- Sätt upp donatorlistan på mottagaren
De här tre stegen måste utföras en gång. När de är inställda kan du använda Clone Plugin för att kopiera data. Baserat på init-systemet kan du behöva starta MySQL-noden efter att klonprocessen har slutförts. Detta krävs inte om, som i fallet med systemd, MySQL kommer att startas om automatiskt.
Xtrabackup kräver ytterligare ett par steg för att få saker gjorda.
- Installera programvaran på alla noder
- Skapa användare på givaren
Dessa två steg måste utföras en gång. För varje säkerhetskopiering måste du utföra följande steg:
- Konfigurera nätverksströmning. Ett enkelt och säkert sätt skulle vara att använda SSH, något i stil med:
xtrabackup --backup --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=8 --stream=xbstream --target-dir=/mnt/backup/ | ssh [email protected] "xbstream -x -C /mnt/backup/"
Vi upptäckte dock att för snabbare hårddiskar, med enkeltrådad SSH, blir CPU en flaskhals. Att ställa in netcat kräver ytterligare steg på mottagaren för att säkerställa att netcat är uppe, lyssnar och omdirigerar trafiken till rätt programvara (xbstream).
-
Stoppa MySQL på mottagarnoden
-
Kör Xtrabackup
-
Använd InnoDB-loggar
-
Kopiera tillbaka data
-
Starta MySQL på mottagarnoden
Som du kan se kräver Xtrabackup att fler åtgärder vidtas.
Säkerhetsöverväganden
Klonplugin kan konfigureras för att använda SSL för dataöverföring även om den som standard använder vanlig text. Kloning av de krypterade tabellutrymmena är möjlig men det finns inget alternativ att kryptera till exempel den lokala klonen. Användaren måste göra det separat efter att klonprocessen är klar.
Xtrabackup i sig ger ingen säkerhet. Säkerheten bestäms av hur du streamar data. Om du använder SSH för streaming kommer data under överföring att krypteras. Om du bestämmer dig för att använda netcat kommer det att skickas som en vanlig text. Naturligtvis, om data är krypterad i tabellutrymmen, är den redan säker, precis som i fallet med Clone Plugin. Xtrabackup kan också användas tillsammans med on-the-fly kryptering för att säkerställa att dina data krypteras även i vila.
Pluginfunktioner
Clone Plugin är en ny produkt, fortfarande i en spädbarnsfas. Dess primära uppgift är att tillhandahålla sätt att tillhandahålla noder i InnoDB Cluster och det gör det alldeles utmärkt. För andra uppgifter, som säkerhetskopiering eller provisionering av replikeringsslavar, kan den användas i viss utsträckning men den lider av flera begränsningar. Vi täckte några av dem i vår tidigare blogg så vi kommer inte att upprepa det här men den allvarligaste, när vi pratar om provisionering och säkerhetskopiering, är att endast InnoDB-tabeller klonas. Om du råkar använda någon annan lagringsmotor kan du inte riktigt använda Clone Plugin. Å andra sidan kommer Xtrabackup gärna att säkerhetskopiera och överföra de vanligaste lagringsmotorerna:InnoDB, MyISAM (tyvärr används det fortfarande på många ställen) och CSV. Xtrabackup kommer också med en uppsättning verktyg som är avsedda att hjälpa till att strömma data från nod till nod eller till och med strömma säkerhetskopiering till S3-hinkar.
För att sammanfatta det, när det gäller säkerhetskopiering av data och provisionering av replikeringsslavar, är och kommer förmodligen fortfarande att vara xtrabackup det mest populära valet. Å andra sidan kommer Clone Plugin troligen att förbättras och utvecklas. Vi får se hur framtiden ser ut och hur saker och ting kommer att se ut om ett år.
Berätta för oss om du har några tankar om Clone Plugin, vi är mycket intresserade av att se vad du tycker om detta nya verktyg.