初始化mysql目录错误
Posted
技术标签:
【中文标题】初始化mysql目录错误【英文标题】:Initializing mysql directory error 【发布时间】:2016-06-05 16:21:02 【问题描述】:我检查了这个页面: http://dev.mysql.com/doc/refman/5.7/en/mysql-install-db.html
mysql_install_db
被删除,但是,当我使用mysqld --initialize
时。它会引发这些错误和警告。
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
[ERROR] --initialize specified but the data directory has files in it. Aborting.
[ERROR] Aborting
根据这个可以忽略第一个:How to enable explicit_defaults_for_timestamp?
我不知道如何解决第二个问题。
【问题讨论】:
【参考方案1】:请仔细阅读错误:
[ERROR] --initialize 已指定,但 数据目录中有文件。中止。
您的目录不为空。您必须删除它的所有内容或选择另一个。
【讨论】:
如果它真的是空的,它看起来像 mysql 写了这些文件并对我说,这太讽刺了,但我正在经历它。哈哈 使用docker-compose,我按照github.com/docker-library/mysql/issues/219解决了这个问题 我不知道哪个目录有文件。你知道那是什么目录吗? 这取决于您使用的操作系统发行版。通常对于 Ubuntu,它是/var/lib/mysql
,但可能会有所不同。最好用谷歌搜索您的案例中使用的目录。
初始化不是有意的,而是来自 systemd 或任何地方。该解决方案不是解决方案。问题不在于数据,而在于没人想要的模糊初始化选项。 mysqld 应该从它拥有的数据开始,而不是初始化新数据。您的解决方案实际上只包括“阅读错误消息”,每个人肯定都知道并理解。【参考方案2】:
我遇到了示例问题。我从
重命名了容器目录/var/lib/mysql
到
/var/lib/minesql 或其他名称
。现在容器已启动。
上一条命令:
docker container run --name=mysql -d -e MYSQL_ROOT_PASSWORD=abc1234 -e MYSQL_DATABASE=sample -e MYSQL_USER=ashik -e MYSQL_PASSWORD=abc123 -v mysql_volume:/var/lib/mysql mysql
工作命令:
docker container run --name=mysql -d -e MYSQL_ROOT_PASSWORD=abc1234 -e MYSQL_DATABASE=sample -e MYSQL_USER=ashik -e MYSQL_PASSWORD=abc123 -v mysql_volume:/var/lib/minesql mysql
【讨论】:
【参考方案3】:Kubernetes 和 MySQL 5.7 也有这个问题。
将来自 yosifki 的建议添加到我的容器定义中,一切正常。
一个新的 ext4 磁盘分区通常不是空的; 有一个 lost+found 目录,已知 mysql 会阻塞该目录。你 可以尝试将 --ignore-db-dir=lost+found 添加到 CMD 以了解 确定(来自mysql docs)
这是我的工作 YAML 定义的摘录:
name: mysql-master
image: mysql:5.7
args:
- "--ignore-db-dir=lost+found"
在这里,一个 docker-compose sn-p 可以更好地阐明:
version: '3'
services:
mysql-master:
image: mysql:5.7
command: [--ignore-db-dir=lost+found]
environment:
- MYSQL_ROOT_PASSWORD=root
【讨论】:
谢谢@Thiago,遇到了完全相同的问题 成功了!拯救我的一天!【参考方案4】:这通常意味着您的数据目录不为空。如果删除或重命名数据目录后问题仍然存在,请检查您的配置文件/etc/my.cnf
并在初始化步骤中删除validate_password_policy
变量。启动服务器后,您可以将此变量设置为您想要的任何东西。
【讨论】:
哪个目录是我的“数据目录”?如果 MySQL 输出它正在检入的目录给你一个帮助,那将会很有用。 你可以使用这个命令查看你的datadir路径:mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "datadir"'
另外,默认的 MySQL 数据目录是/var/lib/mysql
。您可以从/etc/my.cnf
中的变量或/etc/my.cnf.d/
中的文件中找到数据目录路径。【参考方案5】:
只需删除 /data 目录。这对我有用:
就这么简单:
image: mysql:5.7
volumes:
- ./db:/var/lib/mysql
并确保您的“./db”目录为空。
【讨论】:
【参考方案6】:如果您正在运行 Docker Desktop for Mac,这可能是因为 Docker.qcow2
已超出其最大大小。该文件的默认大小为 64GB。你可以调整它的大小,或者为了更彻底的解决方案,删除它:
rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
参考资料:
此解决方案的来源:No space left on device error 所以:What is Docker.qcow2 Github 问题:Docker.qcow2 never shrinks 博文:The Mystery of Docker and The Disk-Eating Cow【讨论】:
【参考方案7】:我有类似的问题,但/usr/local
中没有mysql
文件夹。
就我而言,mysql
位于 /usr/local/var
内
所以rm -rf /usr/local/var/mysql
解决了这个问题
【讨论】:
【参考方案8】:在我的情况下,解决方案是在我的docker-compose.yml
中编辑卷目录
来自:
image: mysql:5.6
volumes:
- ./db:/var/lib/mysql/data
到
image: mysql:5.6
volumes:
- ./db_data:/var/lib/mysql/data
然后再次运行
sudo docker-compose build
sudo docker-compose up
然后您可能需要为我的Rails app 运行 migrate sudo docker-compose run web rake db:create
。
【讨论】:
这会创建一个新的空卷。您不想使用现有的卷吗?【参考方案9】:通过以下方式修复它:
rm -rf /usr/local/Cellar/mysql
和rm -rf /usr/local/var/mysql
并重新安装mysql。
遇到另一个错误,已通过以下方式修复: Warning: The post-install step did not complete successfully, When trying to install mysql using brew in Mac OS High Sierra
【讨论】:
【参考方案10】:按照@Eugene Lisitsky 的回答中的建议进行操作,= 删除 /var/lib/mysql 目录,即 mysql 目录内容。但是不要在 /etc/my.cnf 配置文件中保留选项 innodb_force_recovery
(或者我想的其他一些替代配置,这会阻止初始化/安装由于自己的文件)。
【讨论】:
【参考方案11】:禁用 SElinux。
Setenforce 0
还在 /var/logs/ mysql 文件夹中创建日志目录 它必须是 mysql 用户所有者
cd /var/log/
mkdir mysql
chown -R mysql:mysql mysql/
然后更改 /etc/my.cnf 中的日志目录
【讨论】:
以上是关于初始化mysql目录错误的主要内容,如果未能解决你的问题,请参考以下文章