Bug #20100 | mysql_upgrade passes socket parameter to mysqlcheck etc. incorrectly | ||
---|---|---|---|
Submitted: | 26 May 2006 21:59 | Modified: | 14 Nov 2006 3:47 |
Reporter: | Anatoly Pidruchny (Candidate Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Installing | Severity: | S3 (Non-critical) |
Version: | 5.0.23-BK, 5.0.21 | OS: | Linux (Linux) |
Assigned to: | Bugs System | CPU Architecture: | Any |
[26 May 2006 21:59]
Anatoly Pidruchny
[27 May 2006 14:03]
Valeriy Kravchuk
Thank you for a problem report. It looks similar to a known and verified bug #19452. Please, check.
[27 May 2006 23:03]
Anatoly Pidruchny
Bug #19452 looks similar, but I think it is different. In fact, I can not reproduce the problem reported in bug #19452. My experience shows something different. What I see is that mysql_upgrade reads the [client] section, but putting host=host_name option in the [client] group does not cause the problem, reported in the bug #19452. This bug #20100 is reported, because mysql_upgrade does not take into account the socket option (and possibly some other options) specified in the [client] group and passing --socket=<filename> from the command line also does not work correctly.
[31 May 2006 20:02]
Richard McLane
I ran into this today as well. It looks like the script is adding backslashes before the foward slashes to escape them out and then not parcing them correctly as escaped out foward slashes. Here's what the socket option looks like when it fails: --socket=\/var\/lib\/mysql\/main\/mysql.sock I was able to get around it by running mysql_upgrade from the directory the socket was in and just passing it --socket=mysql.sock
[21 Jun 2006 7:36]
Michal Marek
The problem is that the 'sed' call in parse_arguments() in scripts/mysql_fix_privilege_tables.sh and scripts/mysql_upgrade.sh is copy-pasted from mysqld_safe, but isn't needed acutally, because there is no 'eval' call in these scripts. A plain 'args="$args $arg"' would work better.
[26 Jun 2006 13:28]
Valeriy Kravchuk
Verified just as described: openxs@suse:~/dbs/5.0> sh -x bin/mysql_upgrade --force --socket=/tmp/mysql5.sock + sh -x bin/mysql_upgrade --force --socket=/tmp/mysql5.sock + user=root + case "$1" in + find_my_print_defaults + test -x ./bin/my_print_defaults + print_defaults=./bin/my_print_defaults + args= + DATADIR= + bindir= + MY_BASEDIR_VERSION= + verbose=0 + force=0 + help_option=0 ++ ./bin/my_print_defaults mysqld mysql_upgrade + parse_arguments + pick_args= + test '' = PICK-ARGS-FROM-ARGV + parse_arguments PICK-ARGS-FROM-ARGV --force --socket=/tmp/mysql5.sock + pick_args= + test PICK-ARGS-FROM-ARGV = PICK-ARGS-FROM-ARGV + pick_args=1 + shift + for arg in '"$@"' + case "$arg" in + force=1 + for arg in '"$@"' + case "$arg" in + test -n 1 ++ echo --socket=/tmp/mysql5.sock ++ sed -e 's,\([^a-zA-Z0-9_.=-]\),\\\1,g' + args=' --socket=\/tmp\/mysql5.sock' + test 0 = 1 ++ pwd + MY_PWD=/home/openxs/dbs/5.0 + test -z '' + test -f ./share/mysql/english/errmsg.sys -a -x ./bin/mysqld + test -f ./share/mysql/english/errmsg.sys -a -x ./libexec/mysqld + MY_BASEDIR_VERSION=/home/openxs/dbs/5.0 + bindir=/home/openxs/dbs/5.0/bin + test -z '' + test -d /home/openxs/dbs/5.0/data/mysql + test -d /home/openxs/dbs/5.0/var/mysql + DATADIR=/home/openxs/dbs/5.0/var + test '!' -x /home/openxs/dbs/5.0/bin/mysqlcheck + test '!' -f /home/openxs/dbs/5.0/var/mysql/user.frm + CHECK_FILE=/home/openxs/dbs/5.0/var/mysql_upgrade.info + test -f /home/openxs/dbs/5.0/var/mysql_upgrade.info -a 1 = 0 + check_args='--check-upgrade --all-databases --auto-repair --user=root' + test 0 = 1 + /home/openxs/dbs/5.0/bin/mysqlcheck --check-upgrade --all-databases --auto-rep air --user=root '--socket=\/tmp\/mysql5.sock' /home/openxs/dbs/5.0/bin/mysqlcheck: Got error: 2002: Can't connect to local MyS QL server through socket '\/tmp\/mysql5.sock' (2) when trying to connect + '[' 2 = 0 ']' + /home/openxs/dbs/5.0/bin/mysql_fix_privilege_tables --silent --user=root '--so cket=\/tmp\/mysql5.sock' This script updates all the mysql privilege tables to be usable by MySQL 4.0 and above. This is needed if you want to use the new GRANT functions, CREATE AGGREGATE FUNCTION, stored procedures, or more secure passwords in 4.1 Got a failure from command: cat /home/openxs/dbs/5.0/share/mysql/mysql_fix_privilege_tables.sql | /home/open xs/dbs/5.0/bin/mysql --no-defaults --force --user=root --host=localhost --socket =\/tmp\/mysql5.sock --database=mysql Please check the above output and try again. Running the script with the --verbose option may give you some information of what went wrong. If you get an 'Access denied' error, you should run this script again and give the MySQL root user password as an argument with the --password= option openxs@suse:~/dbs/5.0> And yes, the fix suggested in the last comment works. Although, when executed from the command line: openxs@suse:~/dbs/5.0> bin/mysql -uroot --socket=\/tmp\/mysql5.sock test + bin/mysql -uroot --socket=/tmp/mysql5.sock test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 5.0.23 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> mysql itself works with it from the command line. Because \ are pre-processed by shell...
[21 Oct 2006 2:38]
Vladimir Shebordaev
The bug report describes faulty behavior of mysql_upgrade script which is know deprecated. As of 5.0.25 and above client/mysql_upgrade.c gets explicit communication parameters from the command line and just passes 'em to mysqlcheck as extra arguments if any. [client] configuration group is anyways read by mysql and mysqlcheck themselves. So, client/mysql_upgrade.c just needs to also pass communication parameters specified on the cmdline to mysql when it is about to fix privilege tables.
[21 Oct 2006 12:13]
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/14109 ChangeSet@1.2324, 2006-10-21 16:12:46+04:00, ted@ted.mysql.internal +1 -0 BUG#20100 mysql_upgrade modified to accept all the communication paramenters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[23 Oct 2006 3: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/14126 ChangeSet@1.2324, 2006-10-23 07:47:54+04:00, ted@ted.mysql.internal +1 -0 BUG#20100 mysql_upgrade modified to also accept all the communication paramenters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[23 Oct 2006 4:14]
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/14127 ChangeSet@1.2324, 2006-10-23 08:13:50+04:00, ted@ted.mysql.internal +1 -0 BUG#20100 mysql_upgrade modified to also accept all the communication paramenters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[23 Oct 2006 6:25]
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/14147 ChangeSet@1.2324, 2006-10-23 09:43:59+04:00, ted@ted.mysql.internal +1 -0 BUG#20100 mysql_upgrade modified to also accept all the communication paramenters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[26 Oct 2006 12:30]
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/14427 ChangeSet@1.2339, 2006-10-26 16:30:16+04:00, ted@ted.mysql.internal +1 -0 BUG#20100 fix: mysql_upgrade modified to also accept all the communication paramenters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[7 Nov 2006 0:29]
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/14915 ChangeSet@1.2295, 2006-11-07 03:29:39+03:00, ted@ted.mysql.internal +1 -0 BUG#20100 fix: mysql_upgrade modified to also accept all the communication parameters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[7 Nov 2006 1:22]
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/14918 ChangeSet@1.2295, 2006-11-07 04:22:01+03:00, ted@ted.mysql.internal +1 -0 BUG#20100 fix: mysql_upgrade modified to also accept all the communication parameters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[7 Nov 2006 13:10]
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/14958 ChangeSet@1.2298, 2006-11-07 16:10:07+03:00, ted@ted.mysql.internal +1 -0 BUG#20100 fix: mysql_upgrade modified to also accept all the communication parameters from the cammand line and pass 'em correctly to both mysqlcheck and mysql
[8 Nov 2006 2:46]
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/15003 ChangeSet@1.2298, 2006-11-08 05:45:50+03:00, ted@ted.mysql.internal +1 -0 BUG#20100 fix: mysql_upgrade modified to also accept all the communication parameters from the command line and pass 'em correctly to both mysqlcheck and mysql
[14 Nov 2006 3:47]
Paul DuBois
Noted in 5.0.30 (not 5.0.29), 5.1.13 changelogs. mysql_upgrade now passes all the parameters specified on the command line to both mysqlcheck and mysql using the upgrade_defaults file.