初始化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/mysqlrm -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目录错误的主要内容,如果未能解决你的问题,请参考以下文章

MySQL安装常见错误整理

安装mysql数据库中的技巧错误排查以及实用命令(持续更新)

mysql5.7自解压的初始化和安装

为啥mysql安装不了

mysql安装忘记root密码,初始化密码

mysql数据库初始化(启动mysql时候报很多错误,初始化)