Obnova MariaDB přes SSH

Obnova MariaDB přes SSH
« kdy: 05. 03. 2019, 10:46:05 »
Potrebujem obnovit DB cez ssh (na ssh sa prihlasujem cez kluc, takze aspon toto je poriesene).
Zalohu DB som vyriesil jednoducho:
Kód: [Vybrat]
ssh -C meno@192.168.1.10 mysqldump -u meno -p 'heslo' nazov_db | cat > /cesta_kde_sa_ulozi_zaloha.sql
toto funguje dobre.
Teraz by som potreboval poriesit restore DB. Zrejme to take jednoduche (pre mna) nebude, lebo zrejme bude potrebne vojst do DB.
Vojst do DB bude potrebne preto, lebo treba zistit, ci sa v DB uz dany nazov DB nachadza a ak ano, tak ho treba zmazat a vytvorit nove meno.
Ais takto:
Kód: [Vybrat]
mysql -u meno -p
DROP DATABASE IF EXISTS `meno-db`;
CREATE DATABASE `meno-db`;
quit
a az potom sa moze db nahrat na server, nejak takto:
Kód: [Vybrat]
ssh -C meno@192.168.1.10 mysql  -p 'heslo' nazov_db | cat > /cesta_kde_je_ulozena_zaloha.sqlvedel by mi niekto poradit, zlozit tento skript ?
« Poslední změna: 05. 03. 2019, 11:13:24 od Petr Krčmář »


Re:Obnova MariaDB přes SSH
« Odpověď #1 kdy: 05. 03. 2019, 11:30:05 »
/usr/bin/expect

;)

Re:Obnova MariaDB přes SSH
« Odpověď #2 kdy: 05. 03. 2019, 11:49:18 »
Hesla je mozne ulozit do konfiguracniho souboru specialne pro tyto potreby:

man mysql
https://dev.mysql.com/doc/refman/8.0/en/option-files.html
       ·   --defaults-extra-file=file_name

           Read this option file after the global option file but (on Unix)
           before the user option file. If the file does not exist or is
           otherwise inaccessible, an error occurs.  file_name is interpreted
           relative to the current directory if given as a relative path name
           rather than a full path name.

           For additional information about this and other option-file
           options, see Section 4.2.7, “Command-Line Options that Affect
           Option-File Handling”.

Re:Obnova MariaDB přes SSH
« Odpověď #3 kdy: 05. 03. 2019, 12:00:59 »
Použijte tento parametr pro mysqldump:
--add-drop-database   Add a DROP DATABASE before each create. Typically used in conjunction with the --all-databases or --databases option because no CREATE DATABASE statements are written unless one of those options is specified.

Re:Obnova MariaDB přes SSH
« Odpověď #4 kdy: 05. 03. 2019, 17:33:09 »
Rozhodně bych nespouštěl obnovu nebo zálohování přímo přes SSH příkazy - vypadne ti spojení a budeš se divit, co se ti nahraje do databáze.  :)

Vytvoř si skript a ten spouštěj přes SSH.

mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"


Re:Obnova MariaDB přes SSH
« Odpověď #5 kdy: 05. 03. 2019, 17:58:58 »
Jak píše Ondřej Vaniš, použijte parametr --add-drop-database, příkaz pro smazání databáze se tak přidá na začátek obnovovacího skriptu.

Mimochodem, v tom zálohovacím příkazu máte zbytečný catcat se používá pro spojení více souborů do jednoho výstupu, pokud máte cat v koloně, je to snad vždy zbytečné. Stačí výstup toho ssh přesměrovat přímo do souboru.

Rozhodně bych nespouštěl obnovu nebo zálohování přímo přes SSH příkazy - vypadne ti spojení a budeš se divit, co se ti nahraje do databáze.  :)
V databázi bude poslední commitnutá transakce. Pokud by v průběhu obnovy databáze vypadlo spojení, neřešil bych, co se stihlo obnovit a co ne, to zavání průšvihem. Prostě bych tu obnovu spustil znova od začátku. Řešit výpadky spojení má smysl v případě, kdy ta obnova databáze bude trvat desítky minut a více a výpadek spojení by obnovu podstatně prodloužil.

Na výpadek spojení je náchylné spíš to zálohování databáze, protože tam asi není žádná kontrola, aby se záloha zopakovala, pokud se nepodaří. Takže pokud by výpadky spojení byl problém, je potřeba to vyřešit hlavně na té straně zálohování – nejspíš dostatečným prostorem na serveru, kam se záloha uloží, a pak už se jen přenese rsyncem jinam. Pak už je řešení obnovy snadné, postup se akorát otočí – rsyncem se přenese záloha na cílový server a tam se jen naimportuje.