O código a seguir elimina um usuário de banco de dados e uma instância de banco de dados com o nome de test
, se ambos existirem, e cria um usuário de banco de dados autorizado e com todos os privilégios e uma instância de banco de dados com o mesmo nome (também 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
Faltam-me também coisas neste código:
- Exportando
${domain}
para um{$domain}.sql
mysqldump. - Importando
${domain}.sql
mysqldump para o banco detest
dados DB.
Como eu poderia adicionar essas duas ações, mas dentro do heredocument? Não quero que sejam ações diferentes fora do heredocument (o que requer inserir o nome de usuário e a senha repetidamente), em vez disso, preciso deles como consultas mysql regulares dentro do heredocument, vindo logo após a última consulta GRANT.
1. Exportando
Infelizmente, o shell mysql não pode despejar o conteúdo do banco de dados como o mysqldump faz, então é impossível executar consultas SQL e despejar o banco de dados em uma chamada para mysql ou mysqldump . No entanto, você pode:
a) Conceda ao usuário
test
acesso ao banco de${domain}
dados:posteriormente ligue:
e finalmente ligue:
Não há necessidade de digitar a senha novamente, pois ela é passada na linha de comando. No entanto, passar a senha na linha de comando é inseguro, então você pode considerar o uso
expect
ou a criação de my.cnf com configurações de usuário/senha e referindo-se a ele--defaults-extra-file=
como motivador sugerido.b) Você pode ler a senha do root no início do seu script e então usá-la nas chamadas subseqüentes do mysql (descrito no comentário motivast ):
c) Se você precisar apenas despejar a estrutura da tabela e souber os nomes das tabelas, poderá usar o
SHOW CREATE TABLE
SQL:Mas isso é muito exótico e o 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):