Bug #69674 Command-line option '--innodb-ft-aux-table' cannot take an argument
Submitted: 4 Jul 2013 20:27 Modified: 31 Jul 2013 14:06
Reporter: Elena Stepanova Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S3 (Non-critical)
Version:5.6.12 OS:Any
Assigned to: CPU Architecture:Any

[4 Jul 2013 20:27] Elena Stepanova
Description:
The manual (http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_ft_aux_table) says:

Command-Line Format	--innodb_ft_aux_table=db_name/table_name

When I'm trying to do so, I'm getting

[ERROR] mysqld: option '--innodb-ft-aux-table' cannot take an argument
[ERROR] Parsing options for plugin 'InnoDB' failed.
[ERROR] mysqld: unknown variable 'innodb_ft_aux_table=test/t1'
[ERROR] Aborting

Starting the server without it and setting it at runtime works all right:

MySQL [test]> set global innodb_ft_aux_table = 'test/t1';
Query OK, 0 rows affected (0.00 sec)

How to repeat:
Start server with the command-line option --innodb_ft_aux_table=db_name/table_name
[5 Jul 2013 7:23] MySQL Verification Team
Hello Elena,

Thank you for the bug report and the test case. 
Verified as described.

Thanks,
Umesh
[5 Jul 2013 7:25] MySQL Verification Team
//
mysql> use test;     
mysql> CREATE TABLE `dir_test_innodb` (
    ->   `id` int(10) unsigned NOT NULL,
    ->   `full_name` varchar(100) DEFAULT NULL,
    ->   `details` text,
    ->   PRIMARY KEY (`id`),
    ->   FULLTEXT KEY `full_name` (`full_name`,`details`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.26 sec)

// Stop/Start server with the command-line option --innodb_ft_aux_table=<string>

[root@ushastry mysql-5.6.12-release]# bin/mysqld_safe --defaults-file=my.cnf --innodb_ft_aux_table="test/dir_test_innodb" --user=mysql &
[root@ushastry mysql-5.6.12-release]# bin/mysqld_safe --defaults-file=my.cnf --innodb_ft_aux_table='test/dir_test_innodb' --user=mysql &
[root@ushastry mysql-5.6.12-release]# bin/mysqld_safe --defaults-file=my.cnf --innodb_ft_aux_table=test/dir_test_innodb --user=mysql &

But the end result is same as below

2013-07-05 12:49:07 11669 [ERROR] /home/ushastry/mybuilds/mysql-5.6.12-release/bin/mysqld: option '--innodb-ft-aux-table' cannot take an argument
2013-07-05 12:49:07 11669 [ERROR] Parsing options for plugin 'InnoDB' failed.

// Starting the server without it and setting it at runtime works all right:

mysql> select version();
+------------------+
| version()        |
+------------------+
| 5.6.12-debug-log |
+------------------+
1 row in set (0.00 sec)

mysql> set global innodb_ft_aux_table='test/dir_test_innodb';
Query OK, 0 rows affected (0.00 sec)

mysql> 

mysql> show variables like 'INNODB_FT_AUX_TABLE';
+---------------------+----------------------+
| Variable_name       | Value                |
+---------------------+----------------------+
| innodb_ft_aux_table | test/dir_test_innodb |
+---------------------+----------------------+
1 row in set (0.00 sec)
[24 Jul 2013 7:53] Shaohua Wang
Not a bug.

innodb_ft_aux_table is set internally to take no argument and It is mainly 
for diagnostic purpose.

mysql> CREATE TABLE articles ( 
    ->         id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    ->         title VARCHAR(200), 
    ->         body TEXT, 
    ->         FULLTEXT (title,body) 
    ->         ) ENGINE=InnoDB; 
Query OK, 0 rows affected (0.12 sec) 

mysql> INSERT INTO articles (title,body) VALUES 
    ->         ('MySQL Tutorial','DBMS stands for DataBase ...')  , 
    ->         ('How To Use MySQL Well','After you went through a ...'); 
Query OK, 2 rows affected (0.01 sec) 
Records: 2  Duplicates: 0  Warnings: 0 

mysql> set global innodb_ft_aux_table="test/articles"; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select * from information_schema.INNODB_FT_INDEX_TABLE; 
Empty set (0.00 sec) 

mysql> select * from information_schema.INNODB_FT_INDEX_CACHE; 
+----------+--------------+-------------+-----------+--------+----------+ 
| WORD     | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | 
+----------+--------------+-------------+-----------+--------+----------+ 
| after    |            2 |           2 |         1 |      2 |       22 | 
| database |            1 |           1 |         1 |      1 |       31 | 
| dbms     |            1 |           1 |         1 |      1 |       15 | 
| mysql    |            1 |           2 |         2 |      1 |        0 | 
| mysql    |            1 |           2 |         2 |      2 |       11 | 
| stands   |            1 |           1 |         1 |      1 |       20 | 
| through  |            2 |           2 |         1 |      2 |       37 | 
| tutorial |            1 |           1 |         1 |      1 |        6 | 
| use      |            2 |           2 |         1 |      2 |        7 | 
| well     |            2 |           2 |         1 |      2 |       17 | 
| went     |            2 |           2 |         1 |      2 |       32 | 
| you      |            2 |           2 |         1 |      2 |       28 | 
+----------+--------------+-------------+-----------+--------+----------+ 
12 rows in set (0.04 sec)
[24 Jul 2013 8:14] MySQL Verification Team
In that case, manual should indicate it clearly to avoid any confusion..

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_ft_aux_table
[26 Jul 2013 21:39] Elena Stepanova
I'm confused. 

If it's not a bug (I assume Shaohua Wang speaks on behalf of the InnoDB team), why does it stay 'Verified' and not closed?

At the same time, how can it be not a bug if the documentation clearly states that the option must take an argument, and it doesn't? 

If nothing else, it's a documentation bug, although it's seriously weird for an option which by nature requires an argument to be "set internally to take no argument" -- why?! What kind of "diagnostic purpose" can be behind this hidden logic? If the option is debug-only, make it such; if the option on whatever reason is runtime-only, make it such... But why make it take no argument while still keeping it a command-line option?..

Anyway, could somebody please clarify the status of this report?

Thanks.
[27 Jul 2013 4:53] MySQL Verification Team
Hi Elena,

Internal bug has been already classified as doc bug, and once the documentation is fixed, doc team would mark this as closed.

Thanks,
Umesh
[29 Jul 2013 19:23] Paul DuBois
Sorry, but this IS a bug, and the documentation cannot be fixed properly until the server is fixed.

I take it from the InnoDB team that you can set this system variable
only at runtime, and not at server startup?

If that's true, there is still a problem: mysqld --verbose --help
displays it as something that CAN be set at server startup, but
with confusing syntax:

 --innodb-ft-aux-table
                     FTS internal auxiliary table to be checked

That indicates that you use this  without an argument.
There is no '=#' following the name like there is,
for example, here:

 --innodb-force-recovery-crash=#
                     Kills the server during crash recovery.

But the syntax shown (no argument) is inconsistent with the
description, which indicates that you name a table to
be checked.

There are a couple of ways around this problem:

1) Make the system variable settable to a table name at startup.
(Change PLUGIN_VAR_NOCMDARG to the appropriate value that
accepts an argument of whatever type the variable is (string?).

or

2) Change PLUGIN_VAR_NOCMDARG to whatever value causes this
variable not to be settable at server startup and
not displayed in the --help message.
[31 Jul 2013 14:06] Bugs System
The variable description has been revised. The revised information will appear soon, in the next published documentation build.

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_ft_aux_table

http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_ft_aux_table

Thank you for the bug report.
[6 Dec 2018 15:27] Daniel Price
Posted by developer:
 
innodb_ft_aux_table does not take an argument at startup. 

#define PLUGIN_VAR_NOCMDARG 0x1000  /* No argument for cmd line */

8.0:

static MYSQL_SYSVAR_STR(ft_aux_table, fts_internal_tbl_name2,
                        PLUGIN_VAR_NOCMDARG,
                        "FTS internal auxiliary table to be checked",
                        innodb_internal_table_validate,
                        innodb_internal_table_update, NULL);
						
						
5.7:

static MYSQL_SYSVAR_STR(ft_aux_table, fts_internal_tbl_name2,
  PLUGIN_VAR_NOCMDARG,
  "FTS internal auxiliary table to be checked",
  innodb_internal_table_validate,
  innodb_internal_table_update, NULL);

5.6

static MYSQL_SYSVAR_STR(ft_aux_table, fts_internal_tbl_name2,
  PLUGIN_VAR_NOCMDARG,
  "FTS internal auxiliary table to be checked",
  innodb_internal_table_validate,
  innodb_internal_table_update, NULL);

It can only be configured at run time using a SET statement. The documentation has been updated accordingly.