【发布时间】:2009-12-20 19:26:19
【问题描述】:
我正在协调一些 PHP 开发项目。我已经设置了一个工作流程,开发人员都使用一个 Subversion 存储库。当他们准备好在登台服务器上查看他们的应用程序时,上传 MySQL 数据库转储并创建标签。
我已经配置了一个 shell 脚本,它会自动将 PHP 代码部署到 DocumentRoot 并配置适当的权限。我现在需要编写加载数据库快照的脚本。
当我第一次配置一个新的应用程序时,我会创建一个数据库和用户帐户,如下所示:
CREATE DATABASE foodb;
GRANT ALL ON foodb.* TO user1@localhost IDENTIFIED BY 'password';
现在,当开发人员将新版本的 MySQL 转储检查到 Subversion 时,我需要删除旧数据库并恢复新快照。我目前正在使用以下工作流程。
1.) 以 root 身份登录 MySQL
DROP DATABASE foodb;
CREATE DATABASE foodb;
GRANT ALL ON foodb.* TO user1@localhost IDENTIFIED BY 'password';
2.) 登录 MySQL“user1”
mysql -h localhost -u user1 --password="drumitFed" foodb << new-db-dump-from-subversion.sql
我想合并上面的步骤 1 和 2。我想它看起来像这样。代码不仅应该删除表,还应该删除视图、索引和存储过程。
请注意,它必须以数据库用户而非超级用户身份运行,并且数据库用户没有 DROP DATABASE 或 CREATE DATABASE 权限。
mysql -h localhost -u user1 --password="password" foodb << delete-all-tables-and-views.sql
mysql -h localhost -u user1 --password="password" foodb << new-db-dump-from-subversion.sql
【问题讨论】:
-
特定数据库上的 MySQL CREATE 和 DROP 权限还使该用户能够删除和重新创建数据库本身。因此,您可以安全地提供它,而不会影响数据库之外的任何内容。