403Webshell
Server IP : 104.21.38.3  /  Your IP : 162.158.170.55
Web Server : Apache
System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64
User : www ( 1000)
PHP Version : 7.4.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /www/server/mysql/src/mysql-test/suite/innodb/t/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/mysql-test/suite/innodb/t/innodb_buffer_pool_load_now.test
#Want to skip this test from daily Valgrind execution
--source include/no_valgrind_without_big.inc
#
# Test for the functionality of InnoDB Buffer Pool dump/load.
#

# This case checks buffer pool dump/load works as expected
# with innodb_buffer_pool_dump_now=ON
# and innodb_buffer_pool_load_now=ON

--source include/have_innodb.inc
# include/restart_mysqld.inc does not work in embedded mode
--source include/not_embedded.inc

--let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)`

--error 0,1
--remove_file $file

# Dump the whole buffer pool because if only a portion of it is dumped, we
# cannot be sure how many of the ib_bp_test's pages will end up in the dump.
SET GLOBAL innodb_buffer_pool_dump_pct=100;

# Create a table and populate it with some data
CREATE TABLE ib_bp_test
(a INT AUTO_INCREMENT, b VARCHAR(64), c TEXT, PRIMARY KEY (a), KEY (b, c(128)))
ENGINE=INNODB;

let $check_cnt =
SELECT COUNT(*) FROM information_schema.innodb_buffer_page_lru
WHERE table_name LIKE '%ib_bp_test%';

--let SPACE = `SELECT space FROM information_schema.innodb_sys_tables WHERE name LIKE '%ib_bp_test%'`

# See that we have a small number of pages in the LRU
--eval $check_cnt

# Here we end up with 16382 rows in the table
--disable_query_log
INSERT INTO ib_bp_test (b, c) VALUES (REPEAT('b', 64), REPEAT('c', 256));
INSERT INTO ib_bp_test (b, c) VALUES (REPEAT('B', 64), REPEAT('C', 256));
let $i=12;
while ($i)
{
  --eval INSERT INTO ib_bp_test (b, c) VALUES ($i, $i * $i);
  INSERT INTO ib_bp_test (b, c) SELECT b, c FROM ib_bp_test;
  dec $i;
}
--enable_query_log

# Accept 83 for 64k page size, 163 for 32k page size, 329 for 16k page size,
# 662 for 8k page size & 1392 for 4k page size
--replace_result 83 {checked_valid} 163 {checked_valid} 329 {checked_valid} 662 {checked_valid} 1392 {checked_valid}
--eval $check_cnt

# Dump
SET GLOBAL innodb_buffer_pool_dump_now = ON;

# Wait for the dump to complete
--disable_warnings
let $wait_condition =
  SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) dump completed at '
  FROM information_schema.global_status
  WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status';
--enable_warnings
--source include/wait_condition.inc

# Confirm the file has been created
--file_exists $file

# Add some garbage records to the dump file
--let IBDUMPFILE = $file
perl;
my $fn = $ENV{'IBDUMPFILE'};
open(my $fh, '>>', $fn) || die "perl open($fn): $!";
print $fh "123456,0\n";
print $fh "0,123456\n";
print $fh "123456,123456\n";
close($fh);
EOF

--move_file $file $file.now

--source include/shutdown_mysqld.inc

# Make sure no dump after shutdown
--error 1
--file_exists $file

--source include/start_mysqld.inc

--move_file $file.now $file

# See that we have no pages in the LRU
--eval $check_cnt

# Load the table so that entries in the I_S table do not appear as NULL
select count(*) from ib_bp_test where a = 1;

# Load
SET GLOBAL innodb_buffer_pool_load_now = ON;

# Wait for the load to complete
--disable_warnings
let $wait_condition =
  SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) load completed at '
  FROM information_schema.global_status
  WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status';
--enable_warnings
--source include/wait_condition.inc

# Show the status, interesting if the above timed out
--disable_warnings
--replace_regex /[0-9]{6}[[:space:]]+[0-9]{1,2}:[0-9]{2}:[0-9]{2}/TIMESTAMP_NOW/
SELECT variable_value
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status';
--enable_warnings

# Accept 83 for 64k page size, 163 for 32k page size, 329 for 16k page size,
# 662 for 8k page size & 1392 for 4k page size
--replace_result 83 {checked_valid} 163 {checked_valid} 329 {checked_valid} 662 {checked_valid} 1392 {checked_valid}
--eval $check_cnt

# Add some total garbage to the dump file
--let IBDUMPFILE = $file
perl;
my $fn = $ENV{'IBDUMPFILE'};
open(my $fh, '>>', $fn) || die "perl open($fn): $!";
print $fh "abcdefg\n";
close($fh);
EOF

call mtr.add_suppression("InnoDB: Error parsing");

# Load
SET GLOBAL innodb_buffer_pool_load_now = ON;

# Wait for the load to fail
--disable_warnings
let $wait_condition =
  SELECT SUBSTR(variable_value, 1, 13) = 'Error parsing'
  FROM information_schema.global_status
  WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status';
--enable_warnings
--source include/wait_condition.inc

--echo # Re-write some valid pages to the dump file, make sure the space
--echo # should be valid but all the page no should be out of bound of the file
--let IBDUMPFILE = $file
perl;
my $fn = $ENV{'IBDUMPFILE'};
my $space = $ENV{'SPACE'};
open(my $fh, '>', $fn) || die "perl open($fn): $!";
print $fh "$space,10000\n";
print $fh "$space,10001\n";
print $fh "$space,10002\n";
close($fh);
EOF

# We force the restart so that the table would be closed
--source include/restart_mysqld.inc

# Load directly, without accessing the table first
SET GLOBAL innodb_buffer_pool_load_now = ON;

# Wait for the load to complete
--disable_warnings
let $wait_condition =
  SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) load completed at '
  FROM information_schema.global_status
  WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status';
--enable_warnings
--source include/wait_condition.inc

# Show the status, interesting if the above timed out
--disable_warnings
--replace_regex /[0-9]{6}[[:space:]]+[0-9]{1,2}:[0-9]{2}:[0-9]{2}/TIMESTAMP_NOW/
SELECT variable_value
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status';
--enable_warnings

DROP TABLE ib_bp_test;
SET GLOBAL innodb_buffer_pool_dump_pct=default;

--echo #
--echo # Bug#21371070 [ERROR] INNODB: CANNOT ALLOCATE 0 BYTES: SUCCESS
--echo #

--let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)`

# Remove the buffer pool file that exists already
--error 0,1
--remove_file $file

# Create an empty buffer pool file
write_file $file;
EOF

SET GLOBAL innodb_buffer_pool_load_now = ON;

Youez - 2016 - github.com/yon3zu
LinuXploit