1. Exportando
Infelizmente, shell mysql pode ' Não despeje o conteúdo do banco de dados como o mysqldump , então é impossível executar consultas SQL e despejar banco de dados em uma chamada para mysql ou mysqldump . No entanto, você pode:
a) Conceda ao usuário test
acesso ao banco de dados ${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
subseqüentemente ligue:
mysqldump -u test -p"${psw}" "${domain}" >domain.sql
e finalmente ligue:
mysql -u test -p"${psw}" <<-MYSQL
REVOKE ALL PRIVILEGES ON ${domain}.* FROM 'test'@'localhost';
REVOKE GRANT OPTION ON ${domain}.* FROM 'test'@'localhost';
MYSQL
Não é necessário inserir a senha novamente quando ela é passada na linha de comando. No entanto, passar a senha na linha de comando é inseguro, portanto, você pode considerar usar expect
ou criação de my.cnf com configurações de usuário / senha e referir-se a ele com --defaults-extra-file=
as motivast sugerido.
b) Você pode ler a senha de root no começo do seu script e usá-la nas chamadas subsequentes do mysql (isto é descrito em motivast comentário):
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
c) Se você só precisar despejar a estrutura da tabela e souber os nomes das tabelas, poderá usar o SHOW CREATE TABLE
SQL:
mysql -u root -p <<-MYSQL
...
use ${domain};
tee domain.dump;
SHOW CREATE TABLE table1;
SHOW CREATE TABLE table2;
MYSQL
Mas isso é muito exótico e domain.dump precisaria de um pouco de edição depois.
2. Importando
Isso é muito fácil com o comando source (o mesmo que no bash):
mysql -u root -p <<-MYSQL
...
use test;
source ${domain}.sql;
MYSQL