以下代码删除名为 的数据库用户和数据库实例(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}
到{$domain}.sql
mysqldump。 ${domain}.sql
将mysqldump 导入DBtest
数据库。
我怎么能添加这两个动作,但在heredocument 中?我不希望它们是 heredocument 之外的不同操作(这需要一次又一次地输入用户名和密码),相反,我需要它们作为 heredocument 内的常规 mysql 查询,紧接在最后一个 GRANT 查询之后。
1.出口
不幸的是,mysql shell不能像mysqldump那样转储数据库内容,所以不可能在对mysql或mysqldump的一次调用中执行 SQL 查询和转储数据库。但是您可以:
a)授予用户
test
访问${domain}
数据库的权限:随后调用:
最后调用:
不需要再次输入密码,因为它是在命令行中传递的。但是,在命令行中传递密码是不安全的,因此您可以考虑使用
expect
或创建带有用户/密码设置的 my.cnf,并--defaults-extra-file=
按照motivast 的建议引用它。b)您可以在脚本的开头读取 root 密码,然后在后续的 mysql 调用中使用它(这在motivast评论中有描述):
c)如果你只需要转储表结构并且你知道表名,你可以使用
SHOW CREATE TABLE
SQL:但这太奇特了,之后 domain.dump 需要进行一些编辑。
2.导入
使用 source 命令非常简单(与 bash 中相同):