Firma X zaslala předžalobní výzvu vývojáři projektu Nitter (Wikipedia), open-source alternativního frontendu k sociální síti X (ex-Twitter), a provozovatelům instancí jako XCancel, které umožňovaly číst příspěvky bez přihlášení, reklam a javascriptu. Údajně se dopouštějí „sběru dat“. Zdrojový kód Nitteru vývojář archivoval. Vývoj již dříve přerušil v roce 2024 po tehdejším omezení API X. X je dceřiná společnost SpaceXAI Elona Muska, provozující mj. kontroverzního chatbota Grok.
Bylo vydáno Ubuntu 26.04.1 LTS, tj. první opravné vydání Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek a oprav na Discourse.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2025 (pdf). Incidentů ubylo, sofistikovanost útočníků roste.
Open source softwarový stack AMD ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán v nové major verzi 10.0. S ROCm.AI. Přehled novinek v aktualizované dokumentaci.
Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se
… více »Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se
… více »Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.
Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.
Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.
Jde o způsob jakým udržovat stejný obsah databáze na více DB serverech naráz, přestože se SQL příkazy provádějí pouze na jednom ze serverů.
Replikace probíhá tak, že hlavní DB server (master) si ukládá tzv. transakční logy (informace o tom, jaké příkazy provádí), které pak (zpravidla po síti) pomocí replikačního protokolu postupně zasílá vedlejšímu DB serveru (slave – těchto může být i více) a tento pak vykonává stejné příkazy jako master.
Slave může být provozován na pomalejším hardware než master a potom je možné (pravděpodobné), že bude minimálně ve špičkách docházet ke zpoždění – replikace nebude probíhat v reálném čase a slave dožene mastera až v klidnějším období, kdy se databáze nemění tak rychle. To je jeden z důvodů proč jsou potřeba transakční logy – jinak by master tyto informace mohl posílat slavům ihned. Další důvod je ten, že replikace nemusí probíhat pořád a lze ji přerušit a navázat kdykoliv, pokud máme transakční logy z časového období od přerušení replikace až po současnost a známe aktuální pozici v logu, od které musíme replikaci navázat.
Replikační slave lze využít pro účely zálohování databáze, a to zejména v případě, kdy je hlavní DB server příliš vytížený nebo je na něm velká databáze, kterou si nemůžeme dovolit zálohovat pomocí mysqldump – zamklo by to tabulky na nepřijatelně dlouhou dobu. V takovém případě lze dump spustit na některém ze slave serverů a jediné k čemu může dojít je, že se zpozdí replikace.
Dále, pokud vypadne master DB server, může jej slave okamžitě zastoupit. Ovšem může dojít k tomu, že ve slave DB budou chybět některé poslední změny.
Pokud nám nezáleží na replikačním zpoždění, tedy smíříme-li se s tím, že změny se na slave serverech projeví se zpožděním, tak lze replikaci využít i pro load-balancing, ale je potřeba mít na paměti, že slave DB servery lze v takové konfiguraci používat pouze pro čtení, protože zápis (do replikované tabulky) by způsobil nekonzistenci s masterem a replikace by se dříve či později rozpadla. Je-li toto omezení nepřijatelné, pak je potřeba využít multi-master replikace, kterou se v tomto článku zabývat nebudu.
Master server je potřeba nastavit tak, aby ukládal transakční (binární) logy. Toto jsou soubory na souborovém systému, ve kterých jsou uloženy informace o změnách v DB, které byly provedeny. Samozřejmě se zaznamenávají pouze příkazy, které mění data (INSERT, UPDATE, ...). Do hlavního konfiguračního souboru my.cnf přidáme:
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log max_binlog_size = 100M expire_logs_days = 10 binlog_format = MIXED
Volba server-id je ID serveru – slave servery budou pokračovat v číslování od 2 dále. Pomocí log_bin určíme, kam se mají transakční logy ukládat, dále max_binlog_size stanoví jak velké soubory mají vznikat (kdyby se měl soubor zvětšit nad tuto hodnotu, vytvoří se další), pak nastavíme kolik dnů zpátky chceme mít logy k dispozici (expire_logs_days) a nakonec binlog_format určuje formát binárních logů*. Je potřeba zkontrolovat volbu bind-address – pokud DB server naslouchá pouze na lokálním síťovém rozhraní, nedostane se k ní vzdálený slave.
O formátech binárních logů a jejich výhodách a nevýhodách by se dal napsat samostatný článek. Zde pouze zmíním, že máte tři základní možnosti: 1) STATEMENT, kdy se do logů budou ukládat přímo SQL příkazy, 2) ROW, kdy se budou ukládat přímo změněné řádky anebo jako v ukázce 3) MIXED – to nejlepší z obou světů, kdy se používá standardně STATEMENT a kde to není bezpečné, tam ROW.
Dále je (na master serveru) potřeba vytvořit uživatele s právem replikace, tedy pod správcovským účtem v MySQL spustit:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replslave'@'adresa_slave' IDENTIFIED BY 'slozite_heslo';
Slave server je potřeba nastavit tak, aby replikoval.
server-id = 2 relay-log = relay-bin relay-log-index = relay-bin.index relay-log-space-limit = 5G
Volby relay-log* určují nastavení logů obsahujících data z transakčních logů od master serveru (názvy souborů, jejichž umístění je relativní k datadiru a maximální velikost relay logu).
Když máme toto připravené, je potřeba zkopírovat adresář s daty MySQL (datadir – obvykle /var/lib/mysql), ale musíme si předem uložit pozici v binárním logu, abychom replikaci mohli od tohoto bodu na slave serveru navázat. Na master DB serveru tedy spustíme:
mysql> FLUSH TABLES WITH READ LOCK; -- zamkne celou databázi mysql> SHOW MASTER STATUS; -- tento výstup je potřeba si uložit +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.045325 | 47975493 | | | +------------------+----------+--------------+------------------+
A klienta MySQL nebudeme zavírat (jinak by se zámek zrušil) – zejména pokud toto provádíme vzdáleně přes SSH, je vhodné použít nástroj screen. Nyní zkopírujeme celý datadir na slave server (vypneme slave DB a můžeme kopírovat rovnou na správné místo) a ihned poté můžeme klienta na master serveru ukončit, čímž se databáze opět odemkne.
master # rsync -av --progress --delete /var/lib/mysql/ slave:/var/lib/mysql/
Alternativou tohoto kopírování za běhu je vytvoření dumpu pomocí mysqldump, ale opět nesmíme zapomenout na to, že budeme potřebovat znát pozici v binárním logu v době dumpu.
Nyní, poté co jsme překopírovali datadir na slave, je vše připraveno pro to, abychom replikaci spustili na slave serveru. Spustíme zde tedy DB server a v MySQL spustíme pod správcovským účtem následující:
mysql> CHANGE MASTER TO MASTER_HOST='adresa_master',
MASTER_PORT=3306, MASTER_USER='replslave',MASTER_PASSWORD='slozite_heslo',
MASTER_LOG_FILE='mysql-bin.045325', MASTER_LOG_POS=47975493; -- všimněte si, že jsem použil údaje z výše vypsaného MASTER STATUS
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS \G
Ve výpisu posledního příkazu musí být toto:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
Pokud I/O či SQL vlákno neběží, tak došlo k chybě, která bude vysvětlená ve sloupci Last_Error.
Proces (od kopírování datadiru z master serveru) můžeme opakovat kdykoliv dojde k nezotavitelné chybě na slave serveru nebo když chceme přidat další slave server.
Předvedl jsem nejjednodušší variantu, kdy se replikuje celá databáze, ale lze docílit i toho, aby se replikovaly pouze vybrané databáze či tabulky a dokonce se i každá z nich může replikovat na jiný slave server. Toho lze docílit tak, že na slave serveru v my.cnf nastavíme:
replicate-wild-do-table = nazev_databaze.%
Použité „žolíkové“ (wildcard) znaky fungují stejně jako v SQL výrazu LIKE a například abc%.def% by vybralo ze všech databází začínajících na „abc“ tabulky s názvy začínajícími na „def“.
Když dojde při replikaci na slave k chybě, která se vám nezdá kritická a chcete ji přeskočit, lze toho docílit pomocí:
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
Proměnná SQL_SLAVE_SKIP_COUNTER určuje počet chyb, které se mají jednorázově přeskočit.
Je ovšem možné nastavit přeskakování určitých chyb pokaždé. Například chyba „duplicate entry“ (při vkládání stejného řádku podruhé) má kód 1062 (pro všechny kódy chyb viz dokumentaci) a přeskakování tohoto typu chyb lze nastavit tak, že na slave přidáme do my.cnf následující:
slave-skip-errors = 1062
Přejeme-li si přeskakovat více druhů chyb, pak kódy oddělujeme čárkou.
Přeskakování chyb ale nenastavujte, pokud k tomu nemáte dobrý důvod anebo pokud dobře nerozumíte tomu, proč k chybám dochází. Snadno tak může dojít k nekonzistenci dat, kdy na slave serveru budete mít něco jiného, než má master.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
některé CMS klidně udělají okolo sta selectů jen na zobrazení jedíné stránkyTak to je hodne spatne, pokud se provadi nasledujici pseudokod:
for row in (SELECT foo FROM Foo): SELECT bar FROM Bar WHERE foo = row[0]Jinymi slovy, kdyz pocet dotazu na stranku je primo umerny poctu vypisovanych polozek. Spatny framework/CMS/programator.
některé CMS klidně udělají okolo sta selectů jen na zobrazení jedíné stránkyDokonce jsem viděl i několikrát zopakovaný stejný select (při vyřizování jednoho požadavku)
Budu to muset řešit výhledově, v blízké budoucnosti dostanu na starost webový projekt, ale protože nejsem programátor, neodpustím si dotaz: je možné řešit replikaci k předem stanovenému okamžiku třeba jednou za den nebo týden, nebo příkazem? A pokud k tomu replikace není vhodná, jakým jiným způsobem řešit můj problém?
Oč mi jde: mám databázi, která obsahuje odkaz na XML soubor s textem, někdy dost rozsáhlým. Program v php pak skládá web stránku ze záznamů v databázi a z onoho XML souboru přes XSLT. Pokud se přidává záznam do projektu, pak se musí vytvořit záznam v databázi, zeditovat k němu příslušný nově vzniklý soubor XML a upravit či doplnit v daších XML souborech odkazy. Teprve poté, po delší práci, jsou synchronní jak položky v databázi, tak i soubory XML, a chtěl bych to dávkově zpracovat (čili během jednoho okamžiku skriptem odeslat nové a změněné XML soubory na server a replikovat databázi). Právo na insert/update/delete a na editaci XML mají pouze admini v admin verzi db, návštěvníci webu mají pouze select do serverové verze db schovaný v php.
Předem díky za navedení na použitelné a funkční řešení.
Kym nevytukam "UNLOCK TABLES", tak ziaden zapis na disk neprebehne a vsetky vlakna mysql co chcu zapisovat na disk cakaju na uvolnenie global read lock.
A par ludi adminovat MySQL servery musi, inac by firmy nemohli predavat sluzby webhostingu.
A k získání příkazů pro vytvoření dané databáze (včetně obsahu, volitelně) slouží právě dump.
(Vyzkoušeno.)