【发布时间】:2018-02-20 17:58:50
【问题描述】:
对于一个 vagrant box,我创建了一个引导脚本,使我的 mysql 数据持久化。它通过具有特权的配置者 shell 脚本运行。
基本上,脚本从 /var/lib/mysql -> /vagrant/mysqldata 创建一个符号 /vagrant 文件夹已挂载到主机系统,因此在创建此符号链接后,mysql 中的所有数据都会重新出现
if [ ! -L /var/lib/mysql ] ; then
sudo service mysql stop
sudo mv /var/lib/mysql /var/lib/mysql-old
sudo ln -s /vagrant/mysqldata /var/lib/mysql
sudo echo "alias /var/lib/mysql/ -> /vagrant/mysqldata/," >> /etc/apparmor.d/tunables/alias
sudo service apparmor reload
sudo service mysql start
fi
问题是,在我运行了这个脚本之后,我运行了vagrant reload --provision,它总是失败并出现错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
但是,如果我 ssh 进入 vagrant 并手动启动 mysql,它就可以工作。我不确定这里有什么问题。
正如您在脚本中看到的那样,它将旧的 mysql 数据文件夹重命名为 mysql-old,我将其设置回它再次工作。所以它与那个符号链接有关。
【问题讨论】:
-
我不会依赖 /vagrant 挂载您的数据目录。该界面不稳定且性能不佳。我所做的是使用vagrant plugin for persistent storage 并将MySQL 数据放在这个卷上。这样我就可以让 MySQL 数据在 vagrant destroy 和 recreate 中存活下来。