使用Vagrant进行简单的MySQL设置(使用shell provisioner)

4

把Vagrant配置成输出“hello world”是一件轻而易举的事情。哎呀,就算是我也能搞定!

但是当我们需要对虚拟机进行一些用户实际需要的操作时,比如安装mysql、创建数据库和mysql用户等等,这些东西似乎就不起作用了。真是令人沮丧。

我正在使用一个虚拟的CentOS服务器,并且安装MySQL非常顺利,但是在此之后遇到了无法解决的问题。请注意,我可以通过SSH登录到虚拟机并轻松地完成所有这些操作(但是这样做显然违背了配置的初衷):

echo "hello world"; <-- good

sudo yum install mysql-server -y; <-- good

sudo /sbin/service mysqld start; <-- good

sudo mysql create user 'mycooluser'@'%' identified by 'mypassword'; <-- BAD

我已经在Google上搜索了很长时间,最接近的结果是this article,但由于它基于Ubuntu而不是CentOS,我立即陷入困境,因为显然yum不知道什么是debconf-utils,而apt知道。有人能给我一些提示吗?我认为我的使用情况并不过分,我只是想要使用shell provisioner
  1. 安装MySQL
  2. 创建数据库
  3. 创建用户并授予他所有权限
  4. 运行db_setup.sql将表结构和数据添加到新数据库
请不要告诉我“使用chef或puppet”。我已经尝试过它们,它们有自己的问题,对于这些简单的要求来说,感觉有些大材小用。肯定可以通过shell provisioner完成这些事情吧?
非常感谢您的任何见解。您可能能够看出我已经到了忍无可忍的地步。

你能和我们分享你的Vagrantfile和配置脚本吗?你正在使用哪个版本的Vagrant? - m1keil
1个回答

9

这是我的 Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

$script = <<SCRIPT
    set -x
    echo I am provisioning...
    date > /etc/vagrant_provisioned_at
    echo "hello world"
    yum install mysql-server -y
    /sbin/service mysqld start
    mysql -e "create user 'mycooluser'@'%' identified by 'mypassword'"

SCRIPT
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "chef/centos-6.5"
  config.vm.provision :shell, :inline => $script

end

vagrant up 的作用是启动一个带有mysql和用户'mycooluser'的CentOS 6.5操作系统。

验证方法如下:

当虚拟机完成配置后,使用命令 vagrant ssh 连接到CentOS操作系统内部,在其中执行以下命令:

mysql -uroot

mysql> SELECT User FROM mysql.user;
+------------+
| User       |
+------------+
| mycooluser |
| root       |
|            |
| root       |
|            |
| root       |
+------------+
6 rows in set (0.00 sec)

注意:您可能希望授予“mycooluser”权限,以便使用mysql shell等登录。
更多详细信息可以在此处找到:这里

谢谢您的回复,但编写Shell脚本的整个目的是为了消除手动SSH进入服务器创建数据库、用户、授予权限等操作的需要。 - Brian FitzGerald
作为vagrant up过程的一部分,Vagrantfile顶部的shell脚本将会运行。我列出的步骤是验证用户是否已创建的一种方式。根据您的需求添加/修改/删除shell脚本。 - nikhil
哦!抱歉,我误读了你帖子的那部分。我尝试过使用相同的语法来添加用户(虽然是在外部shell脚本中而不是内联文件中),但你是说你成功地让它工作了吗?我会尝试这个并发布结果。 - Brian FitzGerald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接