rlwrap: mysql 자동 완성이 작동하지 않습니다

rlwrap: mysql 자동 완성이 작동하지 않습니다

일반적으로 자동 완성은 mysql-client-5.5mysql 명령줄 클라이언트( )에서 잘 작동합니다. 라는 테이블이 있습니다 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

이렇게 하면 일반 mysql 서버에서 완료가 가능해집니다.

mysql --auto-rehash

의 경우 설정이 완료 rlwrap되었는지 확인하세요 RLWRAP_HOME. 바라보다여기더 많은 정보를 알고 싶습니다. 이 페이지도보고서시스템 사용량이 너무 많으면 경쟁 조건이 발생할 수 있습니다.

답변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'

관련 정보