maria-discuss team mailing list archive
-
maria-discuss team
-
Mailing list archive
-
Message #01263
Re: mysqld-wait-ready -> Re: start mariadb randomly fails or answers with wrong response to systemd
Am 20.01.2014 16:37, schrieb Sergei Golubchik:
> Hi, Reindl!
>
> On Jan 20, Reindl Harald wrote:
>>
>> "there are no time-consuming operations in-between" is not enough
>> in case of systemd and as-soon-as-possible parallel startup
>
> Okay, I suppose we can change that and start accepting connections
> before reporting "ready"...
that would be cool!
>> in fact systemd calls "ExecStart" and get the zero-return-value from
>> "/usr/libexec/mysqld" *before* the service really accepts connections
>> that's why "/usr/libexec/mysqld-wait-ready" was needed
>
> This is something I don't understand.
>
> As far as I remember, /usr/libexec/mysqld does not return until you
> shutdown the server. It doesn't daemonize itself, the caller is supposed
> to start it in the background.
i speak about "status=0/SUCCESS"
while a non-zero status would be a failure
[root@rh:~]$ systemctl status mysqld
mysqld.service - MariaDB Database
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)
Active: active (running) since Mo 2014-01-20 10:04:34 CET; 6h ago
Process: 740 ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 739 (mysqld)
CGroup: /system.slice/mysqld.service
└─739 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --pid-file=/var/run/mysqld/mysqld.pid
--socket=/var/lib/mysql/mysql.sock --open-files-limit=750000 --basedir=/usr --user=mysql
> Perhaps - just guessing - systemd looks for a PIDFile and assumes that
> the service is ready as soon as the PIDFile is created?
no, the PID file would be not needed at all i guess if we would not need "ExecStartPost"
the problem is the timewindow between "ExecStart" and "ExecStartPost" and that
"code=exited, status=0/SUCCESS" happens before the daemon accepts connections and auth
while otherwise the PIDfile as well as "ExecStartPost" would not be needed at all
please take a look at
http://www.freedesktop.org/software/systemd/man/systemd.service.html
maybe the problem is *that* there is no option to let it daemonize itself with a CLI-switch
and/or support http://www.freedesktop.org/software/systemd/man/systemd.socket.html missing
with Type=forking the whole problem would went away without systemd.socket support needed
If set to forking, it is expected that the process configured with
ExecStart= will call fork() as part of its start-up. The parent process is expected to exit
when start-up is complete and all communication channels are set up
however, the current state is not perfect in case of systemd which acts really fine
as supervisor replacing "mysqld_safe" and super-simple service units
>> ________________________________
>> [Service]
>> Type=simple
>> PIDFile=/var/run/mysqld/mysqld.pid
>> ExecStart=/usr/libexec/mysqld --defaults-file=/etc/my.cnf --pid-file=/var/run/mysqld/mysqld.pid
>> --socket=/var/lib/mysql/mysql.sock --open-files-limit=750000 --basedir=/usr --user=mysql
>> ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID
>> ________________________________
>
> Regards,
> Sergei
Regards
Harry
Attachment:
signature.asc
Description: OpenPGP digital signature
References