通常、オートコンプリートはmysql-client-5.5
mysqlコマンドラインクライアント()でうまく機能します。というテーブルがありますbooking
。文字を入力しb
てキーを押すと、TAB
テーブル名が自動補完されます。
SELECT * FROM b<TAB>
rlwrap
ただし、()を使用するとalias mysql='/usr/bin/rlwrap -s 99999 -a -pRED /usr/bin/mysql'
オートコンプリート機能は機能しません。
rlwrap
オートコンプリート機能に干渉するようです。
私はDebian Wheezyを使用しています。
アップデート1:
startコマンドを使用する場合strace
、つまり:
strace /usr/bin/rlwrap -s 99999 -a -pRED /usr/bin/mysql --auto-rehash
次のエラーが表示されます。
access("/usr/share/rlwrap/completions/mysql", R_OK) = -1 ENOENT (No such file or directory)
rlwrapにmysqlを完成させるためにいくつかのファイルが必要な場合がありますか?
アップデート2
いいですね。ファイルを作成し、/usr/share/rlwrap/completions/mysql
その中に3つのサンプル行を入れました。
select
from
where
mysql
入力を開始すると、sele<TAB>
タブは実際に単語を完成させますselect
。それは進歩ですが、問題全体を解決するわけではありません。覚えたくない(不要な)あいまいなテーブル名を完成させるのに役立つ自動補完機能が主に必要です。ただし、テーブルを変更/追加/名前変更するたびにオートコンプリートファイルを編集することはできません。
rlwrap
同じオートコンプリートファイルを使用するように指示する方法はありませんかmysql
? (mysql
そのようなファイルを使うべきだと思います)
アップデート3:
他のエラーは次のとおりです。strace
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
stat("/home/martin/.terminfo", 0x7fff27ee6a70) = -1 ENOENT (No such file or directory)
access("/etc/terminfo/x/xterm-256color", R_OK) = -1 ENOENT (No such file or directory)
access("/home/martin/.mysql_completions", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/share/rlwrap/completions/mysql", R_OK) = -1 ENOENT (No such file or directory)
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
stat("/home/martin/.inputrc", 0x7fff27ee7710) = -1 ENOENT (No such file or directory)
答え1
答え2
編集するmy.cnf
:
[mysql]
auto-rehash
それでも機能しない場合は、追加してくださいdebian.cnf
。
あなたもできます:
mysql> \#
答え3
FreeBSDフォーラムでこれを見つけましたが、あなたの状況にも効果があります。フォーラム投稿のタイトルは次のとおりです。bashのmysqlにオートコンプリート機能がないのはなぜですか?。
このスレッドで言及されているソリューションは次のとおりです。
オプション#1 - mysqlクライアント経由
$ mysql --auto-rehash -p
これはmysql
マニュアルページからすぐに来たものです。
--auto-rehash
Enable automatic rehashing. This option is on by default, which enables
database, table, and column name completion. Use --disable-auto-rehash to
disable rehashing. That causes mysql to start faster, but you must issue the
rehash command if you want to use name completion.
To complete a name, enter the first part and press Tab. If the name is
unambiguous, mysql completes it. Otherwise, you can press Tab again to see
the possible names that begin with what you have typed so far. Completion
does not occur if there is no default database.
オプション#2 - サーバー経由
サーバーファイル内の同じ機能行をコメントアウトして、サーバー側でこの問題を解決することもできます/etc/my.cnf
。ファイルのソースによって異なりますmy.cnf
。 MySQLは.cnf
デフォルトでいくつかのサンプルファイルを提供します。
はい
これは私のCentOSシステムにあり、あなたのDebianシステムにもこれらの機能があるかもしれません。
$ rpm -ql mysql-server |grep cnf
/usr/share/doc/mysql-server-5.0.95/my-huge.cnf
/usr/share/doc/mysql-server-5.0.95/my-innodb-heavy-4G.cnf
/usr/share/doc/mysql-server-5.0.95/my-large.cnf
/usr/share/doc/mysql-server-5.0.95/my-medium.cnf
/usr/share/doc/mysql-server-5.0.95/my-small.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf
これらのファイルのいずれかがあなたのファイルの基礎である場合は、/etc/my.cnf
そのファイルでこの行を有効にすることができます。たとえば、次のファイルで有効になっています。
$ grep rehash /usr/share/doc/mysql-server-5.0.95/*
/usr/share/doc/mysql-server-5.0.95/my-huge.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-innodb-heavy-4G.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-large.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-medium.cnf:no-auto-rehash
/usr/share/doc/mysql-server-5.0.95/my-small.cnf:no-auto-rehash
したがって、ファイルでその行を有効にした場合は、/etc/my.cnf
次のようにその行をコメントアウトする必要があります。
#no-auto-rehash
あなたのエイリアス
mysqlクライアントの呼び出しに使用する方法がある場合は、次のようにスイッチを追加できrlwrap
ます。--auto-hash -p
$ alias mysql='/usr/bin/rlwrap -s 99999 -a -pRED /usr/bin/mysql --auto-rehash -p'