[MDEV-30453] Setting innodb_buffer_pool_filename to an empty string attempts to delete the data directory on shutdown Created: 2023-01-24  Updated: 2023-06-12  Resolved: 2023-03-29

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Affects Version/s: 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11, 11.0
Fix Version/s: 11.1.1, 10.11.3, 11.0.2, 10.4.29, 10.5.20, 10.6.13, 10.8.8, 10.9.6, 10.10.4

Type: Bug Priority: Critical
Reporter: Roel Van de Paar Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: upstream-5.7, upstream-8.0


 Description   

Interestingly, the issue is present in MySQL 5.7 and 8.0 as well, but only in those releases.

SET GLOBAL innodb_buffer_pool_filename='';
SHUTDOWN;

Leads to:

11.0.1 b075191ba8598af6aff5549e6e19f6255aef258a (Optimized)

2023-01-24 15:30:26 0 [Note] InnoDB: FTS optimize thread exiting.
2023-01-24 15:30:26 0 [Note] InnoDB: Starting shutdown...
2023-01-24 15:30:26 0 [Note] InnoDB: Dumping buffer pool(s) to /test/MD090123-mariadb-11.0.1-linux-x86_64-opt/data
2023-01-24 15:30:26 0 [ERROR] InnoDB: Cannot delete '/test/MD090123-mariadb-11.0.1-linux-x86_64-opt/data': Is a directory

Bug confirmed present in:
MariaDB: 10.3.38 (dbg), 10.3.38 (opt), 10.4.28 (dbg), 10.4.28 (opt), 10.5.19 (dbg), 10.5.19 (opt), 10.6.12 (dbg), 10.6.12 (opt), 10.7.8 (dbg), 10.7.8 (opt), 10.8.7 (dbg), 10.8.7 (opt), 10.9.5 (dbg), 10.9.5 (opt), 10.10.3 (dbg), 10.10.3 (opt), 10.11.2 (opt), 10.11.2 (dbg), 11.0.1 (dbg), 11.0.1 (opt)
MySQL: 5.7.40 (dbg), 5.7.40 (opt), 8.0.31 (dbg), 8.0.31 (opt)

Bug (or feature/syntax) confirmed not present in:
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.51 (dbg), 5.6.51 (opt)

Interface change: innodb_buffer_pool_filename is now a read-only variable



 Comments   
Comment by Marko Mäkelä [ 2023-01-24 ]

Theoretically, we could duplicate some logic that is already part of unlink(), maybe poorly. Think of the following, for example:

SET GLOBAL innodb_buffer_pool_filename='.';
SET GLOBAL innodb_buffer_pool_filename='./.';

Is there anything that really needs to be fixed? Directories cannot be deleted by unlink(), as the error message indicates. If you think that some other error message should be issued, what should it be? What if the file initially existed as a regular file, but someone deleted the file and created a directory by the same name, and then caused InnoDB to attempt to access the file?

Comment by Marko Mäkelä [ 2023-03-29 ]

I addressed this by making the variable innodb_buffer_pool_filename read-only. An adventurous user might still specify innodb_buffer_pool_filename=ibdata1 or something in the server configuration, but short of removing the parameter (which could break compatibility) I do not think we can do much against that.

Generated at Thu Feb 08 10:16:22 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.