Bug #34224 mysql cli /dev/null overwrite
Submitted: 1 Feb 2008 13:16 Modified: 18 Jun 2009 15:08
Reporter: Akos Torok Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Command-line Clients Severity:S3 (Non-critical)
Version:5.1.22, 5.0.51a OS:Linux
Assigned to: Jim Winstead CPU Architecture:Any

[1 Feb 2008 13:16] Akos Torok
Description:
If the MYSQL_HISTFILE environment variable is set to /dev/null, the mysql cli overwrites the /dev/null device file to a normal file when the cli exits.

How to repeat:
Set MYSQL_HISTFILE=/dev/null, run cli, exit cli.
[4 Feb 2008 13:45] Susanne Ebrecht
Many thanks for writing a bug report.

To verify this, we need some more informations from you:

1) do you use readline or libedit?
2) how do you install MySQL?
3) What is the distribution of your Linux?
4) Do you use MySQL as root (mean: system user root)?
[4 Feb 2008 16:01] Akos Torok
1) readline
2) from source, or from the distribution
3) debian, gentoo, ubuntu
4) yes
[3 Apr 2008 5:51] Sveta Smirnova
Thank you for the report.

Verified as described.
[3 Apr 2008 16:11] MySQL Verification Team
This is not a bug.

If you do not want to have history file, you can export MYSQL_HISTFILE as empty string.
[4 Apr 2008 11:46] Akos Torok
From the manual page of the mysql cli(5.1.23rc):

       If you do not want to maintain a history file, first remove
       .mysql_history if it exists, and then use either of the following
       techniques:

       o  Set the MYSQL_HISTFILE variable to /dev/null. To cause this setting
          to take effect each time you log in, put the setting in one of your
          shell's startup files.

       o  Create .mysql_history as a symbolic link to /dev/null:

          shell> ln -s /dev/null $HOME/.mysql_history
[4 Apr 2008 16:55] Sveta Smirnova
Thank you for the feedback.

Reclassified as documentation request.

Correct procedure:

MYSQL_HISTFILE=""

Also manual should contain alert about it is not safe to use /dev/null when login as root.
[1 Jun 2008 6:00] Sveta Smirnova
Set back to "Client", because workaround export MYSQL_HISTFILE='' doesn't work in versions >=5.0
[1 Jun 2008 6:03] Sveta Smirnova
Current behavior:

$export MYSQL_HISTFILE=''

$mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2427
Server version: 5.0.51a-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select 1;
+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.01 sec)

mysql> \q
/Users/apple/Applications/mysql-5.1/bin/mysql: Error on rename of '.TMP' to '' (Errcode: 2)
Bye
[1 Jun 2008 13:09] Akos Torok
The same problem on Mac OS X 10.5.3, with mysql version 5.0.51b. 
You can use the `unset MYSQL_HISTFILE` command to avoid this problem.

I think the problem is in client/mysql.cc, line 487:
  sprintf(histfile_tmp, "%s.TMP", histfile);

and in the line 538:
    if (!write_history(histfile_tmp))
      my_rename(histfile_tmp, histfile, MYF(MY_WME));
  } 

If you start the cli with -v, you can see the problem.
[10 Dec 2008 11:31] Alessandro Giannini
Check MYSQL_HISTFILE

Attachment: mysql.cc (text/plain), 134.74 KiB.

[10 Dec 2008 11:39] Alessandro Giannini
Sorry I forgot to insert a comment to my last upload. 

This BUG is present also in 5.1.30 release. In my version I declared histfile and histfile_tm variables to NULL and I checked ( trimming ) the MYSQL_HISTFILE content. When MYSQL_HISTFILE is equal to "" no history files will be writter. 
I think this behavior is very useful ! :)
[8 May 2009 0:49] 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/commits/73626

2891 Jim Winstead	2009-05-07
      The mysql command-line client did not properly handle MYSQL_HISTFILE being set
      to an empty string, or to /dev/null, as we suggest and have suggested in the
      documentation. (Bug #34224)
      modified:
        client/mysql.cc
[13 May 2009 16:07] Jim Winstead
Patch queued to 5.1-bugteam, will be merged up from there.
[28 May 2009 8:18] Bugs System
Pushed into 5.1.36 (revid:joro@sun.com-20090528073639-yohsb4q1jzg7ycws) (version source revid:jimw@mysql.com-20090512212719-mjc8fz4q3ewvr4yd) (merge vers: 5.1.35) (pib:6)
[30 May 2009 2:27] Paul DuBois
Noted in 5.1.36 changelog.

If the MYSQL_HISTFILE environment variable was set to /dev/null, the
mysql client overwrote the /dev/null device file as a normal file. 

Setting report to NDI pending push into 6.0.x.
[17 Jun 2009 19:25] Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090616183122-chjzbaa30qopdra9) (version source revid:jimw@mysql.com-20090514020104-7u5cqf5cyywa8aks) (merge vers: 6.0.12-alpha) (pib:11)
[18 Jun 2009 15:08] Paul DuBois
Noted in 5.4.4 changelog.
[26 Aug 2009 13:46] Bugs System
Pushed into 5.1.37-ndb-7.0.8 (revid:jonas@mysql.com-20090826132541-yablppc59e3yb54l) (version source revid:jonas@mysql.com-20090826132541-yablppc59e3yb54l) (merge vers: 5.1.37-ndb-7.0.8) (pib:11)
[26 Aug 2009 13:46] Bugs System
Pushed into 5.1.37-ndb-6.3.27 (revid:jonas@mysql.com-20090826105955-bkj027t47gfbamnc) (version source revid:jonas@mysql.com-20090826105955-bkj027t47gfbamnc) (merge vers: 5.1.37-ndb-6.3.27) (pib:11)
[26 Aug 2009 13:48] Bugs System
Pushed into 5.1.37-ndb-6.2.19 (revid:jonas@mysql.com-20090825194404-37rtosk049t9koc4) (version source revid:jonas@mysql.com-20090825194404-37rtosk049t9koc4) (merge vers: 5.1.37-ndb-6.2.19) (pib:11)
[27 Aug 2009 16:33] Bugs System
Pushed into 5.1.35-ndb-7.1.0 (revid:magnus.blaudd@sun.com-20090827163030-6o3kk6r2oua159hr) (version source revid:jonas@mysql.com-20090826132541-yablppc59e3yb54l) (merge vers: 5.1.37-ndb-7.0.8) (pib:11)
[8 Oct 2009 20:35] Paul DuBois
The 5.4 fix has been pushed to 5.4.2.