mirror of
https://github.com/MariaDB/server.git
synced 2025-02-12 00:15:35 +01:00
109 lines
2.8 KiB
PHP
109 lines
2.8 KiB
PHP
#
|
|
# WL#9237: Add a new variable binlog_expire_logs_seconds
|
|
|
|
# Here we will test purging of binary logs when either one or both of these variables are set
|
|
# - binlog_expire_logs_seconds
|
|
# - expire_logs_days
|
|
|
|
# The three scenarios being tested for are:
|
|
# 1. FLUSH LOGS
|
|
# 2. Rotation of logs because of binlog growing bigger than max_binlog_size
|
|
# 3. Server restart
|
|
#
|
|
# Usuage: --let $binlog_expire_logs_seconds=
|
|
# --let $expire_logs_days=
|
|
#
|
|
# --source suite/binlog/include/binlog_expire_logs_seconds.inc
|
|
|
|
--let $expire_logs_seconds= `SELECT @@global.binlog_expire_logs_seconds`
|
|
|
|
CREATE TABLE t1(s LONGBLOB );
|
|
|
|
--let $max_binlog_size_save= `SELECT @@GLOBAL.MAX_BINLOG_SIZE`
|
|
|
|
--let $case= 0
|
|
|
|
while ($case < 3)
|
|
{
|
|
--echo Case:$case
|
|
--let $first_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
|
|
|
# rotates the log, thence the first log will be closed, and depending upon
|
|
# the expire time the purge will/will not happen.
|
|
|
|
FLUSH LOGS;
|
|
|
|
INSERT INTO t1 VALUES('a');
|
|
|
|
--let $second_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
|
|
|
FLUSH LOGS;
|
|
|
|
|
|
# This is done to avoid time out in cases where the expire time is more.
|
|
# What we do is in those cases modify the timestamp of the oldest log file
|
|
# to be the same as expire time so when we execute the next flush log command
|
|
# the oldest log will be purged.
|
|
|
|
# Only change the timestamp of binlog file when the expire_logs_seconds which is the total
|
|
# time for expiring log is greater than 30 seconds
|
|
|
|
if (`SELECT $expire_logs_seconds > 30`)
|
|
{
|
|
--let _EXPIRE_TIME= `SELECT $expire_logs_seconds + 60`
|
|
--let _FIRST_BINLOG_FILE= $MYSQLD_DATADIR/$first_binlog_file
|
|
--perl
|
|
use strict;
|
|
use warnings;
|
|
my $expire_time = $ENV{'_EXPIRE_TIME'};
|
|
my $first_binlog_file = $ENV{'_FIRST_BINLOG_FILE'};
|
|
my $epoch = (stat($first_binlog_file))[9];
|
|
my $mtime = $epoch - $expire_time;
|
|
utime $mtime, $mtime, $first_binlog_file;
|
|
EOF
|
|
}
|
|
|
|
# Checking this ensures that nothing is purged so far.
|
|
--file_exists $MYSQLD_DATADIR/$first_binlog_file
|
|
|
|
if ($case == 0)
|
|
{
|
|
--echo #### 1. FLUSH LOGS
|
|
|
|
FLUSH LOGS;
|
|
}
|
|
if ($case == 1)
|
|
{
|
|
--echo #### 2. Binlog_size > max_binlog_size
|
|
|
|
SET @@GLOBAL.MAX_BINLOG_SIZE= 4096;
|
|
|
|
INSERT INTO t1 (s) VALUES (REPEAT('s',50000));
|
|
}
|
|
if ($case == 2)
|
|
{
|
|
--echo #### 3. Server restart
|
|
|
|
--let $restart_parameters=--binlog_expire_logs_seconds=$expire_logs_seconds
|
|
--source include/restart_mysqld.inc
|
|
}
|
|
|
|
if (`SELECT $expire_logs_seconds != 0`)
|
|
{
|
|
--error 1
|
|
--file_exists $MYSQLD_DATADIR/$first_binlog_file
|
|
}
|
|
if ($expire_logs_seconds == 0)
|
|
{
|
|
--file_exists $MYSQLD_DATADIR/$first_binlog_file
|
|
}
|
|
--file_exists $MYSQLD_DATADIR/$second_binlog_file
|
|
|
|
--inc $case
|
|
RESET MASTER;
|
|
}
|
|
--echo ##### Cleanup #####
|
|
--eval SET @@GLOBAL.MAX_BINLOG_SIZE= $max_binlog_size_save;
|
|
DROP TABLE t1;
|
|
RESET MASTER;
|
|
|