다음 코드는 명명된 데이터베이스 사용자와 데이터베이스 인스턴스( test
둘 다 존재하는 경우)를 삭제한 다음 권한이 있는 모든 권한을 가진 데이터베이스 사용자와 test
동일한 이름( 과 동일)을 가진 데이터베이스 인스턴스를 생성합니다.
mysql -u root -p <<-MYSQL
DROP user IF EXISTS 'test'@'localhost'; SELECT user FROM mysql.user;
DROP database IF EXISTS test; show databases;
CREATE user 'test'@'localhost' IDENTIFIED BY '${psw}';
CREATE database test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
MYSQL
또한 이 코드에는 뭔가가 빠졌습니다.
${domain}
mysqldump 로 내보냅니다{$domain}.sql
.${domain}.sql
test
mysqldump를 DB 데이터베이스 로 가져옵니다 .
이 두 가지 작업을 어떻게 추가할 수 있습니까?~에여기에 문서가 있나요? 나는 그들이 heredocument 외부에서 다른 작업을 수행하는 것을 원하지 않습니다(사용자 이름과 비밀번호를 계속해서 입력해야 함). 대신 마지막 GRANT 쿼리 직후 heredocument 내에서 일반 mysql 쿼리로 필요합니다.
답변1
1. 수출
안타깝게도,MySQL 쉘데이터베이스 콘텐츠를 덤프할 수 없습니다.MySQL 덤프이는 사실이므로 한 번의 호출로 SQL 쿼리를 실행하고 데이터베이스를 덤프하는 것은 불가능합니다.mysql또는MySQL 덤프. 하지만 넌 할수있어:
ㅏ)사용자에게 데이터베이스 test
에 대한 액세스 권한을 부여합니다.${domain}
mysql -u root -p <<-MYSQL
...
GRANT ALL PRIVILEGES ON ${domain}.* TO 'test'@'localhost';
GRANT GRANT OPTION ON ${domain}.* TO 'test'@'localhost';
FLUSH PRIVILEGES;
MYSQL
그런 다음 전화하십시오.
mysqldump -u test -p"${psw}" "${domain}" >domain.sql
마지막 호출:
mysql -u test -p"${psw}" <<-MYSQL
REVOKE ALL PRIVILEGES ON ${domain}.* FROM 'test'@'localhost';
REVOKE GRANT OPTION ON ${domain}.* FROM 'test'@'localhost';
MYSQL
비밀번호는 명령줄에 전달되므로 다시 입력할 필요가 없습니다. 그러나 명령줄에서 비밀번호를 전달하는 것은 안전하지 않으므로 expect
사용자/비밀번호 설정으로 my.cnf를 사용하거나 생성하고 --defaults-extra-file=
다음을 사용하여 참조하는 것을 고려할 수 있습니다.동기 부여제안.
비)스크립트 시작 부분에서 루트 비밀번호를 읽은 다음 후속 mysql 호출에서 이를 사용할 수 있습니다(이 작업은 다음에서 수행됩니다).동기 부여논평):
read -s -p 'Enter password: ' root_psw
echo
my_cnf=`tempfile -s .cnf -m 400`
echo "[mysql] >${my_cnf}
echo "user=root" >>${my_cnf}
echo "password=${root_psw}" >>${my_cnf}
# Delete the password file after this script finish (even in case of error)
cleanup_my_cnf { rm "${my_cnf}"; }
trap cleanup_my_cnf INT TERM EXIT
mysql --defaults-extra-file="${my_cnf}" <<-MYSQL
...
MYSQL
mysqldump --defaults-extra-file="${my_cnf}" "${domain}" >domain.sql
씨)테이블 구조를 덤프하고 테이블 이름을 알아야 하는 경우 SQL을 사용할 수 있습니다 SHOW CREATE TABLE
.
mysql -u root -p <<-MYSQL
...
use ${domain};
tee domain.dump;
SHOW CREATE TABLE table1;
SHOW CREATE TABLE table2;
MYSQL
하지만 이것은 너무 화려해서 나중에 domain.dump를 약간 편집해야 합니다.
2. 수입
source 명령을 사용하는 것은 매우 쉽습니다(bash와 동일).
mysql -u root -p <<-MYSQL
...
use test;
source ${domain}.sql;
MYSQL