2017-02-22 1 views
0

InfiniDB를 사용하고 있습니다 (선택 사항이 아님).로그인시 mysql이 응답하지 않음

<user>@<host>:~$ /usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> 
Enter password: <password> 

Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 1725 
Server version: 5.1.39 MySQL Community/Calpont InfiniDB Community 2.2.11-1 Fin                    al (COSS LA) 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> use <database_name> 
Database changed 
mysql> 

하지만 떠들썩한 파티 스크립트를 사용하는 경우, 그것은 응답 : 나는 리눅스 쉘을 사용하는 경우, 내가 잘 데이터베이스에 연결할 수 있어요

<user>@<host>:~$ bash -x /home/aliceell/db_export.sh 
+ DB=al05_09 
+ export_dir=/tmp/ 
++ /usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name> 
Enter password: 

그것은 내가 입력 한 후 응답하지 내 비밀번호를 입력하고 '엔터'를 누릅니다. ctrl-C를 사용하여 그것을 벗어나야합니다. 여기

는 내가 가지고있는 코드입니다 : 내가 비난과 내 데이터베이스의 모든 테이블을 통해 루프를 사용하고 ( similar to this script)를 내보낼려고 노력하는 새로운 해요

DB=<db_name> 
export_dir="/tmp/" 

err_exit() 
{ 
echo -e 1>&2 
exit 1 
} 

mysql_data_dir=$(/usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name>) #it hangs at this stage 

if ! (mysqlshow $DB 1>/dev/null); then 
    echo ERROR: unable to access database 
    exit 1 
fi 

echo "connected" 

if ! [ -w $export_dir ]; then 
    echo ERROR: export dir is not writable 
    exit 1 
fi 

ExportTable() 
{ 
/usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name>" 
    SELECT * INTO OUTFILE '/tmp/$T.csv' 
    FIELDS TERMINATED BY '|' 
    LINES TERMINATED BY '\n' 
    FROM $T 
" 
} 

/usr/local/Calpont/mysql/bin/mysql -u <user> -p -h <host> <db_name> "show tables" | 
while read T; do 
    echo exporting $T 
    ExportTable || err_exit 
    sudo mv $mysql_data_dir/$DB/$T.psv $export_dir/ || err_exit 
done 

하지만 아무 소용이 심지어 데이터베이스에 연결할 수없는 경우 ...

미리 도움을 주셔서 감사합니다.

+0

실제로'db_export.sh '는 어떻게 생겼을까요? – chepner

+0

게시물에 링크 된 스크립트와 비슷합니다. 코드를 포함하도록 내 게시물을 편집했습니다. 단, mysql 대신에/usr/local/Calpont/mysql/bin/mysql을 사용해야한다. infinidb (afaik)에서 작동하는 방법이기 때문이다. – ale19

답변

1

mysql_data_dir에 할당 할 명령 대체가 대화식으로 실행되지 않으므로 mysql 명령을 실행해야하며 출력을 생성하고 종료하여 출력이 셸 변수에 반환됩니다. linked example (아래에서 발췌 한 내용)을 자세히 살펴보면 그의 mysql 명령문이 바로 이런 종류의 명령 줄이라는 것을 알 수 있습니다. 후 처리를 위해 awk 명령으로 실행되고 파이프되는 mysql 명령을 포함합니다. 당신이해야 할 일은

mysql_data_dir=$(mysql $myopts "show variables like 'datadir'" | awk '{sub(/\/$/,"");print$NF}') 

은 "한 줄"mysql 명령이 무엇인지 식별하고 $()에 그것을 넣어이다.

+0

아, 고마워! 구문이 어떻게 작동하는지 몰랐습니다. 내가 필요한 명령을 찾았습니다. 이제 연결할 수 있습니다. 불행히도 SELECT INTO OUTFILE 명령을 실행할 수 없습니다. $ T 변수를 올바르게 사용하지 않는 것 같습니다./usr/local/Calpont/mysql/bin/mysql을 export 할 때, readline 5.1을 사용하여 unknown-linux-gnu (x86_64) 용 Ver 14.14 Distrib 5.1.39를 export한다. Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc .... "와 MySQL의 모든 옵션 목록을 제공합니다. 그러나 실제로 아무 것도 수출하지 않습니다 ... 당신은 무슨 일이 벌어지고 있는지 알 수 있습니다. – ale19

+0

나머지 코드를 내 게시물에 추가했습니다. 누군가에게 도움이 될 경우를 대비하여 – ale19

+0

루프에 파이핑하는 'mysql'명령의 출력이 테이블 이름 만 생성하는지 확인 하시겠습니까? 코드가 작동하기 위해 건너 뛸 필요가있는 헤더 행이있을 수 있습니다. 위의 내 답변이 기본 질문에 대한 답변 인 경우 올바른 답으로 표시하십시오. –

-1

일반적으로 명령 줄에 암호를 포함 할 수 있습니다.

/usr/지방/Calpont/MySQL은/​​빈/MySQL을 -u [사용자] -p [PWD] -h [호스트] DB_NAME]

참고 : -p 사이에 공백이 없어야하고 비밀번호.

암호에 특정 구두 문자가있는 경우 큰 따옴표로 묶어야 할 수도 있습니다.

분명히이 방법을 사용하는 것이 가장 안전한 방법이지만 가장 간단한 방법입니다.

+0

암호를 잘 입력 할 수 있으므로 문제가 아닌 것 같습니다 ... 어쨌든 그냥 시도해 보았지만 프로그램을 실행 한 후에도 계속 응답하지 않습니다 ... – ale19