mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
BUG#37858: loaddata,rpl_slave_skip,rpl_innodb_mixed_dml fail if datafile not world-readable
Problem 1: main.loaddata tried to trigger an error caused by reading files outside the vardir, by reading itself. However, if loaddata.test is not world-readable (e.g., umask=0077), then another error is triggered. Fix 1: allow the other error too. Problem 2: rpl_slave_skip and rpl_innodb_mixed_dml tried to copy a file from mysql-test/suite/rpl/data to mysql-test/var and then read it. That failed too if umask=0077, since the file would not become world-readable. Fix 2: move the files from mysql-test/suite/rpl/data to mysql-test/std_data and update tests accordingly. Remove the directory mysql-test/suite/rpl/data. mysql-test/r/loaddata.result: Updated result file. mysql-test/std_data/rpl_bug28618.dat: Moved this file to std_data. mysql-test/std_data/rpl_mixed.dat: Moved this file to std_data. mysql-test/suite/rpl/data: Removed directory that is now unused. mysql-test/suite/rpl/include/rpl_mixed_dml.inc: The rpl_mixed.dat file has been moved. Updated the test to use the new location. mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result: Updated result file. mysql-test/suite/rpl/r/rpl_slave_skip.result: Updated result file. mysql-test/suite/rpl/t/rpl_slave_skip.test: The rpl_bug28618.dat file has been moved. Updated the test to use the new location. mysql-test/t/loaddata.test: Allow more error messages. ER_TEXTFILE_NOT_READABLE may happen if the file is not world-readable (which may happen, e.g., if the user has umask=0077).
This commit is contained in:
parent
43e396c8d5
commit
fb17cbe42e
8 changed files with 10 additions and 11 deletions
|
@ -212,7 +212,7 @@ set @@secure_file_priv= 0;
|
||||||
ERROR HY000: Variable 'secure_file_priv' is a read only variable
|
ERROR HY000: Variable 'secure_file_priv' is a read only variable
|
||||||
truncate table t1;
|
truncate table t1;
|
||||||
load data infile 'MYSQL_TEST_DIR/t/loaddata.test' into table t1;
|
load data infile 'MYSQL_TEST_DIR/t/loaddata.test' into table t1;
|
||||||
ERROR HY000: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
|
Got one of the listed errors
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a b c
|
a b c
|
||||||
select load_file("MYSQL_TEST_DIR/t/loaddata.test");
|
select load_file("MYSQL_TEST_DIR/t/loaddata.test");
|
||||||
|
|
|
@ -51,9 +51,8 @@ DELETE FROM t2 WHERE a = 2;
|
||||||
|
|
||||||
--echo
|
--echo
|
||||||
--echo ******************** LOAD DATA INFILE ********************
|
--echo ******************** LOAD DATA INFILE ********************
|
||||||
--copy_file suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
LOAD DATA INFILE '../../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
|
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
|
||||||
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
|
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
--source suite/rpl/include/rpl_mixed_check_select.inc
|
--source suite/rpl/include/rpl_mixed_check_select.inc
|
||||||
--source suite/rpl/include/rpl_mixed_clear_tables.inc
|
--source suite/rpl/include/rpl_mixed_clear_tables.inc
|
||||||
|
@ -329,6 +328,7 @@ DROP VIEW v2;
|
||||||
--echo ******************** SHOW BINLOG EVENTS ********************
|
--echo ******************** SHOW BINLOG EVENTS ********************
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
--replace_regex /Server ver: .+/Server ver: #/ /table_id: [0-9]+/table_id: #/ /COMMIT.+xid=[0-9]+.+/#/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/
|
--replace_regex /Server ver: .+/Server ver: #/ /table_id: [0-9]+/table_id: #/ /COMMIT.+xid=[0-9]+.+/#/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
show binlog events from 1;
|
show binlog events from 1;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID
|
# as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID
|
||||||
|
|
|
@ -103,7 +103,7 @@ DELETE FROM t1;
|
||||||
DELETE FROM t2;
|
DELETE FROM t2;
|
||||||
|
|
||||||
******************** LOAD DATA INFILE ********************
|
******************** LOAD DATA INFILE ********************
|
||||||
LOAD DATA INFILE '../../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
|
LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
a b
|
a b
|
||||||
10 line A
|
10 line A
|
||||||
|
@ -884,7 +884,7 @@ master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
|
||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
|
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
|
||||||
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
|
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
|
||||||
master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE '../../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=#
|
master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=#
|
||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
|
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
|
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
|
||||||
|
|
|
@ -344,7 +344,7 @@ CREATE TABLE t10 (a INT, b VARCHAR(20)) ENGINE=myisam;
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
*** On Master ***
|
*** On Master ***
|
||||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
|
LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
|
||||||
SELECT * FROM t10 ORDER BY a;
|
SELECT * FROM t10 ORDER BY a;
|
||||||
a b
|
a b
|
||||||
1 master only
|
1 master only
|
||||||
|
|
|
@ -286,10 +286,9 @@ source include/wait_for_slave_to_stop.inc;
|
||||||
--echo *** On Master ***
|
--echo *** On Master ***
|
||||||
connection master;
|
connection master;
|
||||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||||
exec cp ./suite/rpl/data/rpl_bug28618.dat $MYSQLTEST_VARDIR/tmp/;
|
|
||||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
|
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/std_data/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat;
|
|
||||||
|
|
||||||
SELECT * FROM t10 ORDER BY a;
|
SELECT * FROM t10 ORDER BY a;
|
||||||
|
|
||||||
|
|
|
@ -163,7 +163,7 @@ set @@secure_file_priv= 0;
|
||||||
# Test "load data"
|
# Test "load data"
|
||||||
truncate table t1;
|
truncate table t1;
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
--error 1290
|
--error ER_OPTION_PREVENTS_STATEMENT, ER_TEXTFILE_NOT_READABLE
|
||||||
eval load data infile '$MYSQL_TEST_DIR/t/loaddata.test' into table t1;
|
eval load data infile '$MYSQL_TEST_DIR/t/loaddata.test' into table t1;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue