mirror of
https://github.com/MariaDB/server.git
synced 2025-07-21 21:22:27 +03:00
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.
96 lines
3.5 KiB
Plaintext
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;
|