Skip to content

Commit bf99662

Browse files
author
Chad MILLER
committed
Bug#35754: mysql_install_db does not work if no hostname is set
Machines with hostname set to "localhost" cause uniqueness errors in the SQL bootstrap data. Now, insert zero lines for cases where the (lowercased) hostname is the same as an already-inserted 'localhost' name. Also, fix a few tests that expect certain local accounts to have a certain host name.
1 parent 04ecf17 commit bf99662

5 files changed

Lines changed: 27 additions & 23 deletions

File tree

mysql-test/r/join.result

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -747,11 +747,13 @@ select t1.b from v1a;
747747
ERROR 42S22: Unknown column 't1.b' in 'field list'
748748
select * from v1a join v1b on t1.b = t2.b;
749749
ERROR 42S22: Unknown column 't1.b' in 'on clause'
750-
select * from information_schema.statistics join information_schema.columns
751-
using(table_name,column_name) where table_name='user';
752-
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
753-
user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL NULL BTREE NULL mysql 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI #
754-
user User NULL mysql 0 mysql PRIMARY 2 A 3 NULL NULL BTREE NULL mysql 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI #
750+
select
751+
statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.CARDINALITY, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
752+
columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
753+
from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
754+
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA COLUMN_COMMENT
755+
user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL NULL BTREE NULL mysql NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI
756+
user User NULL mysql 0 mysql PRIMARY 2 A 2 NULL NULL BTREE NULL mysql NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI
755757
drop table t1;
756758
drop table t2;
757759
drop table t3;

mysql-test/r/rpl_grant.result

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ user host
1212
dummy localhost
1313
dummy1 localhost
1414
dummy2 localhost
15-
SELECT COUNT(*) FROM mysql.user;
15+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
1616
COUNT(*)
17-
6
17+
3
1818
**** On Slave ****
1919
SELECT user,host FROM mysql.user WHERE user != 'root';
2020
user host
2121
dummy localhost
2222
dummy1 localhost
2323
dummy2 localhost
24-
SELECT COUNT(*) FROM mysql.user;
24+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
2525
COUNT(*)
26-
6
26+
3
2727
**** On Master ****
2828
DROP USER nonexisting@localhost;
2929
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
@@ -32,15 +32,15 @@ ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
3232
DROP USER dummy1@localhost, dummy2@localhost;
3333
SELECT user, host FROM mysql.user WHERE user != 'root';
3434
user host
35-
SELECT COUNT(*) FROM mysql.user;
35+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
3636
COUNT(*)
37-
3
37+
0
3838
**** On Slave ****
3939
SELECT user,host FROM mysql.user WHERE user != 'root';
4040
user host
41-
SELECT COUNT(*) FROM mysql.user;
41+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
4242
COUNT(*)
43-
3
43+
0
4444
SHOW SLAVE STATUS;
4545
Slave_IO_State #
4646
Master_Host 127.0.0.1

mysql-test/t/join.test

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -546,10 +546,12 @@ select * from v1a join v1b on t1.b = t2.b;
546546
#
547547
# Bug #17523 natural join and information_schema
548548
#
549-
# We mask out the Privileges column because it differs with embedded server
550-
--replace_column 31 #
551-
select * from information_schema.statistics join information_schema.columns
552-
using(table_name,column_name) where table_name='user';
549+
# Omit columns.PRIVILIGES as it may vary with embedded server.
550+
# Omit columns.ORDINAL_POSITION as it may vary with hostname='localhost'.
551+
select
552+
statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.CARDINALITY, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
553+
columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
554+
from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
553555

554556
drop table t1;
555557
drop table t2;

mysql-test/t/rpl_grant.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ CREATE USER dummy@localhost;
1010
CREATE USER dummy1@localhost, dummy2@localhost;
1111

1212
SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
13-
SELECT COUNT(*) FROM mysql.user;
13+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
1414
sync_slave_with_master;
1515
--echo **** On Slave ****
1616
SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
17-
SELECT COUNT(*) FROM mysql.user;
17+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
1818

1919
--echo **** On Master ****
2020
connection master;
@@ -31,11 +31,11 @@ DROP USER nonexisting@localhost, dummy@localhost;
3131
DROP USER dummy1@localhost, dummy2@localhost;
3232

3333
SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
34-
SELECT COUNT(*) FROM mysql.user;
34+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
3535
sync_slave_with_master;
3636
--echo **** On Slave ****
3737
SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
38-
SELECT COUNT(*) FROM mysql.user;
38+
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
3939

4040
--replace_result $MASTER_MYPORT MASTER_PORT
4141
--replace_column 1 # 8 # 9 # 23 # 33 #

scripts/mysql_system_tables_data.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ DROP TABLE tmp_db;
2121
-- from local machine if "users" table didn't exist before
2222
CREATE TEMPORARY TABLE tmp_user LIKE user;
2323
INSERT INTO tmp_user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
24-
REPLACE INTO tmp_user VALUES (@current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
24+
REPLACE INTO tmp_user SELECT @current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0 FROM dual WHERE LOWER( @current_hostname) != 'localhost';
2525
REPLACE INTO tmp_user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
2626
INSERT INTO tmp_user (host,user) VALUES ('localhost','');
27-
INSERT INTO tmp_user (host,user) VALUES (@current_hostname,'');
27+
INSERT INTO tmp_user (host,user) SELECT @current_hostname,'' FROM dual WHERE LOWER(@current_hostname ) != 'localhost';
2828
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
2929
DROP TABLE tmp_user;

0 commit comments

Comments
 (0)