Bug #43398 mysqld in --bootstrap mode still initialises its binlog
Description:
mysqld --bootstrap is of course called from mysql_install_db
And normally, it would only be run on a new installation, so there's no MySQL Server running.
However, if someone (or something!) does start the script, mysqld will start.
Normally multiple servers can't run on the same datadir because they'll try to bind to the same IP port.
However, --bootstrap won't bind to an IP port, so it can. And thus it can touch any data and logfiles while a server is running. This is mostly harmless because of what it does and how it does it (as far as I can tell), except that it does initialise its binlog subsystem.
So, say the running MySQL server is working with binlog.000007
mysqld --bootstrap will create binlog.000008 (as root:root), do its other stuff, and exits. It may also write binlog.index but not sure and it's probably kept open by the running server anyway...
What will the running server do next, when binlog 7 becomes full, on FLUSH LOGS, or server restart?
Will the running server overwrite the binlog.index? or append?
This and many more potential race conditions... it's a messy situation.
The running server later complains about not being able to start binlog 8 (since it's owned by root, etc)
--bootstrap just shouldn't initialise binlog, then there wouldn't be a issue.
Note that cPanel runs mysql_install_db in its automatic upgrade scripts, and it behaves exactly as described above. It then chowns the binlog files to mysql:mysql which does is a hack, also there's still a brief moment where the logfile has the wrong permissions, and mysqld may still encounter other race conditions by the mysql --bootstrap just adding a binlog file independently.
How to repeat:
start a mysql server
run mysql_install_db (as root, like normal)
See the new binlog file get created, with ownership/group root!
Suggested fix:
--bootstrap mode should not initialise binlog subsystem, or anything else not needed for bootstrap functionality (installation of the mysql system db tables).
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.043 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.