일반적으로 자동 완성은 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'