Bug #6660 | mysqldump creates bad pathnames on Windows | ||
---|---|---|---|
Submitted: | 16 Nov 2004 10:20 | Modified: | 7 Apr 2005 1:55 |
Reporter: | Tobias Asplund | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: MyISAM storage engine | Severity: | S2 (Serious) |
Version: | 4.1.10 | OS: | Windows (Windows) |
Assigned to: | Reggie Burnett | CPU Architecture: | Any |
[16 Nov 2004 10:20]
Tobias Asplund
[17 Nov 2004 0:16]
MySQL Verification Team
According with the Manual: DATA DIRECTORY and INDEX DIRECTORY The DATA DIRECTORY and INDEX DIRECTORY options for CREATE TABLE are ignored on Windows, because Windows doesn't support symbolic links. These options also are ignored on systems that have a non-functional realpath() call. Since the DATA DIRECTORY is ignored as mentioned above, can be considered not a bug ?
[17 Nov 2004 8:44]
Tobias Asplund
Then I would say that mysqldump on windows never should output a DATA DIRECTORY in the table creation, since it should be ignored on that platform.
[18 Nov 2004 2:33]
MySQL Verification Team
Sorry I don't understand what you meant. I wasn't able for to get a mysqldump like you mentioned because the create table ignores the data dirctory clause. See below both show create table output on Linux and Windows: miguel@hegel:~/dbs/4.1$ bin/mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 4.1.8-debug-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database mytest; Query OK, 1 row affected (0.00 sec) mysql> use mytest; Database changed mysql> create table t1 (id int) data directory="/home/miguel/mydata"; Query OK, 0 rows affected (0.01 sec) mysql> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/home/miguel/mydata/' 1 row in set (0.01 sec) mysql> c:\mysql\bin>mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 4.1.7-nt-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database mytest; Query OK, 1 row affected (0.01 sec) mysql> use mytest; Database changed mysql> create table t1 (id int) data directory="c:/mydata"; Query OK, 0 rows affected (0.10 sec) mysql> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.01 sec)
[17 Feb 2005 13:04]
Jan Kneschke
The problem only appears with mysqldump, not with SHOW CREATE TABLE. Still broken in 4.1.9 on winxp
[18 Feb 2005 2:49]
MySQL Verification Team
Sorry I wasn't able to repeat with latest Windows BK source. Below how I verified: C:\mysql\bin>mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 4.1.11-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database testbug; Query OK, 1 row affected (0.00 sec) mysql> use testbug; Database changed mysql> create table t1 (id int) data directory="c:/mydata"; Query OK, 0 rows affected (0.06 sec) mysql> insert into t1 values (1), (2), (3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> exit Bye C:\mysql\bin>mysqldump -uroot testbug > my.sql C:\mysql\bin>type my.sql -- MySQL dump 10.9 -- -- Host: localhost Database: testbug -- ------------------------------------------------------ -- Server version 4.1.11-nt /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -- -- Table structure for table `t1` -- DROP TABLE IF EXISTS `t1`; CREATE TABLE `t1` ( `id` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `t1` -- /*!40000 ALTER TABLE `t1` DISABLE KEYS */; LOCK TABLES `t1` WRITE; INSERT INTO `t1` VALUES (1),(2),(3); UNLOCK TABLES; /*!40000 ALTER TABLE `t1` ENABLE KEYS */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; C:\mysql\bin>mysql -uroot testbug < my.sql C:\mysql\bin>mysql -e"select * from testbug.t1" -uroot +------+ | id | +------+ | 1 | | 2 | | 3 | +------+
[3 Mar 2005 22:16]
Tobias Asplund
Found a way to reproduce this, it seems that when you create a table like a MERGE table it'll somehow go in and change the underlaying MyISAM tables and add the DATA DIRECTORY path. See test-case below: # Default storage engine for server is InnoDB CREATE TABLE `log` ( `host` varchar(100) NOT NULL default '', `visited` datetime NOT NULL default '0000-00-00 00:00:00', `timezone` varchar(6) NOT NULL default '', `cmd` text NOT NULL, `returncode` int(11) NOT NULL default '0', `bytes` varchar(10) default NULL, `referer` text, `browser` text ); -- Query OK, 0 rows affected (0.00 sec) ALTER TABLE log ENGINE = MyISAM; -- Query OK, 0 rows affected (0.00 sec) -- Records: 0 Duplicates: 0 Warnings: 0 CREATE TABLE log2 LIKE log; -- Query OK, 0 rows affected (0.00 sec) CREATE TABLE l LIKE log; -- Query OK, 0 rows affected (0.00 sec) ALTER TABLE l ENGINE = MERGE UNION = (log, log2); -- Query OK, 0 rows affected (0.00 sec) -- Records: 0 Duplicates: 0 Warnings: 0 exit; C:\>mysqldump --master-data --single-transaction bug > tmp.sql Creates: -- MySQL dump 10.9 -- -- Host: localhost Database: bug -- ------------------------------------------------------ -- Server version 4.1.10-nt-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -- -- Position to start replication or point-in-time recovery from -- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000001', MASTER_LOG_POS=43049414; -- -- Table structure for table `l` -- DROP TABLE IF EXISTS `l`; CREATE TABLE `l` ( `host` varchar(100) NOT NULL default '', `visited` datetime NOT NULL default '0000-00-00 00:00:00', `timezone` varchar(6) NOT NULL default '', `cmd` text NOT NULL, `returncode` int(11) NOT NULL default '0', `bytes` varchar(10) default NULL, `referer` text, `browser` text ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(`log`,`log2`); -- -- Table structure for table `log` -- DROP TABLE IF EXISTS `log`; CREATE TABLE `log` ( `host` varchar(100) NOT NULL default '', `visited` datetime NOT NULL default '0000-00-00 00:00:00', `timezone` varchar(6) NOT NULL default '', `cmd` text NOT NULL, `returncode` int(11) NOT NULL default '0', `bytes` varchar(10) default NULL, `referer` text, `browser` text ) ENGINE=MyISAM DEFAULT CHARSET=utf8 DATA DIRECTORY='C:\mysql\Data\bug\' INDEX DIRECTORY='C:\mysql\Data\bug\'; -- -- Dumping data for table `log` -- /*!40000 ALTER TABLE `log` DISABLE KEYS */; LOCK TABLES `log` WRITE; UNLOCK TABLES; /*!40000 ALTER TABLE `log` ENABLE KEYS */; -- -- Table structure for table `log2` -- DROP TABLE IF EXISTS `log2`; CREATE TABLE `log2` ( `host` varchar(100) NOT NULL default '', `visited` datetime NOT NULL default '0000-00-00 00:00:00', `timezone` varchar(6) NOT NULL default '', `cmd` text NOT NULL, `returncode` int(11) NOT NULL default '0', `bytes` varchar(10) default NULL, `referer` text, `browser` text ) ENGINE=MyISAM DEFAULT CHARSET=utf8 DATA DIRECTORY='C:\mysql\Data\bug\' INDEX DIRECTORY='C:\mysql\Data\bug\'; -- -- Dumping data for table `log2` -- /*!40000 ALTER TABLE `log2` DISABLE KEYS */; LOCK TABLES `log2` WRITE; UNLOCK TABLES; /*!40000 ALTER TABLE `log2` ENABLE KEYS */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
[3 Mar 2005 22:26]
MySQL Verification Team
Thank you for the test case.
[14 Mar 2005 22:34]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/23009
[15 Mar 2005 17:19]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/23047
[15 Mar 2005 22:09]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/23060
[15 Mar 2005 22:15]
Reggie Burnett
Thank you for your bug report. This issue has been committed to our source repository of that product and will be incorporated into the next release. If necessary, you can access the source repository and build the latest available version, including the bugfix, yourself. More information about accessing the source trees is available at http://www.mysql.com/doc/en/Installing_source_tree.html
[24 Mar 2005 18:52]
Reggie Burnett
This was pushed 3/15. Sorry, but forgot to set to documenting. This was fixed in 4.1 and 5.0 (as of 3/15)
[7 Apr 2005 1:55]
Paul DuBois
Noted in 4.1.11, 5.0.3 changelogs.