Nie jestem ekspertem MySQL.Czy istnieje dobry sposób na wykrycie, że MySQL jest "gotowy"?
Mam skrypt, który instaluje MySQL, uruchamia mysqld
, a następnie używa mysql
do wykonania inicjalizacji.
Obecnie, aby mieć tę pracę, to wchodzi w pętlę, że (przepraszam za pseudocode mieszania wielu języków): (!)
mysqld_safe /* ... */ & /* ampersand to start in background so we can continue */
while(fileDoesNotExist("/tmp/mysql.sock")) {
sleepFor100ms();
}
mysql -u root /* and so forth */ initialize.sql
to wydaje się działać, ale ma kilka problemów:
- odpytywania pachnie zabawny,
- nie jestem wystarczająco inteligentny, aby o MySQL wiem, czy patrząc na tej zakodowanej ścieżki
/tmp/mysql.sock
jest mądry w ogóle.
A jednak jest to dużo łatwiejsze niż próby (na przykład) zużywają i analizowania stdout (czy jest to stderr?) Z mysqld_safe
aby dowiedzieć się, czy serwer został uruchomiony.
Moje wąskie pytanie brzmi, czy istnieje sposób na wydanie blokującego początku mysqld
: czy mogę wydać polecenie blokujące do momentu uruchomienia bazy danych, a następnie wyjść (i odłącza, być może pozostawiając plik PID) i ma polecenie zatrzymania towarzysza? (A może pozwala mi odczytać plik PID i wydać własne SIGTERM?)
Moje ogólne pytanie brzmi, czy jestem na dobrej drodze, czy jest tam coś zupełnie innego i łatwiejszego (dla mnie "łatwiej" to dla mnie musiałbym być lekki, nie jestem zainteresowany instalowaniem zestawu narzędzi takich jak Puppet czy DbMaintain/Liquibase czy jakikolwiek inny) podejście do rozwiązania problemu, który wypowiedziałem? To znaczy, począwszy od pliku .gz
zawierającego MySQL, zainstalować MySQL użytkownika i zainicjować bazę danych?
Nie trzeba być albo nie być ekspertem, aby zadać pytanie tutaj. – tadman
Dzięki za powitalną myśl.Po prostu pomyślałem, że będzie to pomocne w kontekście, więc ludzie nie będą mówić za mną. :) –
Czy [sondowanie, aby sprawdzić, czy plik istnieje] (http://stackoverflow.com/questions/2379829/while-loop-to-test-if-a-file-exists-in-bash) być krokiem w właściwy kierunek? – tadman