1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-21 21:22:27 +03:00
Files
mariadb/mysql-test/suite/innodb/t/innodb_buffer_pool_dump_pct.test
Marko Mäkelä a6780df49b MDEV-30453 Setting innodb_buffer_pool_filename to an empty string attempts to delete the data directory on shutdown
Let us make innodb_buffer_pool_filename a read-only variable
so that a malicious user cannot cause an important file to be
deleted on InnoDB shutdown. An attempt to delete a directory
will fail because it is not a regular file, but what if the
variable pointed to (say) ibdata1, ib_logfile0 or some *.ibd file?

It does not seem to make much sense for this parameter to be
configurable in the first place, but we will not change that in order
to avoid breaking compatibility.
2023-03-29 16:49:10 +03:00

96 lines
3.5 KiB
Plaintext

# ************************************************************
# wl6504: This testcase is to check the functionality of the
# innodb_buffer_pool_dump_pct flag
# step 1.Set innodb_buffer_pool_dump_pct=100 and take the dump
# step 2.Set innodb_buffer_pool_dump_pct=1 and take the dump
# step 3.Compare the size of both the dump files
#*************************************************************
--source include/have_innodb.inc
--source include/have_innodb_16k.inc
let MYSQLD_DATADIR = `SELECT @@datadir`;
CREATE TABLE tab5 (col1 int auto_increment primary key,
col2 VARCHAR(25), col3 varchar(25)) ENGINE=InnoDB;
CREATE INDEX idx1 ON tab5(col2(10));
CREATE INDEX idx2 ON tab5(col3(10));
SET GLOBAL innodb_buffer_pool_dump_pct=100;
#***********************************************************
# SELECT *
# FROM information_schema.global_status
# WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
# gives
# a) VARIABLE_NAME VARIABLE_VALUE
# INNODB_BUFFER_POOL_DUMP_STATUS not started
# in case there was no innodb_buffer_pool_dump since server start.
# b) Something like
# VARIABLE_NAME VARIABLE_VALUE
# INNODB_BUFFER_POOL_DUMP_STATUS Buffer pool(s) dump completed at 130711 13:43:24
# in case there was a innodb_buffer_pool_dump since server start.
# Attention:
# - There is no guarantee that the current test is the first test which
# made an innodb_buffer_pool_dump since server startup.
# - The granularity of the timestamp is one second.
# - There could have been some dump caused by some previous test
# just a few milliseconds before.
# In order to avoid conflict with previous tests, read the current value
# of INNODB_BUFFER_POOL_DUMP_STATUS
# and confirm that the timestamp is different after the dump
#***********************************************************
# Read the current value to compare with the new value.
SELECT variable_value INTO @IBPDS
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
SET GLOBAL innodb_buffer_pool_dump_now=ON;
# Sleep one second in order to ensure that the time stamp is
# different at next dump
--sleep 1
let $wait_condition = SELECT count(*) = 1
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
AND variable_value != @IBPDS
AND variable_value like 'Buffer pool(s) dump completed at%';
--source include/wait_condition.inc
--move_file $MYSQLD_DATADIR/ib_buffer_pool $MYSQLD_DATADIR/ib_buffer_pool100
SET GLOBAL innodb_buffer_pool_dump_pct=1;
SELECT @@global.innodb_buffer_pool_dump_pct;
# Read the current value to compare with the new value.
--disable_warnings
SELECT variable_value INTO @IBPDS
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
--enable_warnings
SET GLOBAL innodb_buffer_pool_dump_now=ON;
# Sleep one second in order to ensure that the time stamp is
# different at next dump
--sleep 1
let $wait_condition = SELECT count(*) = 1
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
AND variable_value != @IBPDS
AND variable_value like 'Buffer pool(s) dump completed at%';
--source include/wait_condition.inc
--file_exists $MYSQLD_DATADIR/ib_buffer_pool
perl;
my $size1 = -s "$ENV{MYSQLD_DATADIR}/ib_buffer_pool";
my $size100 = -s "$ENV{MYSQLD_DATADIR}/ib_buffer_pool100";
die "$size100<=$size1\n" unless $size100 > $size1;
EOF
SET GLOBAL innodb_buffer_pool_dump_pct=DEFAULT;
--remove_file $MYSQLD_DATADIR/ib_buffer_pool100
DROP TABLE tab5;