【问题标题】:Initializing mysql directory error初始化mysql目录错误
【发布时间】: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?

我不知道如何解决第二个问题。

【问题讨论】:

    标签: php mysql


    【解决方案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
        

        参考资料:

        【讨论】:

          【解决方案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 中的日志目录

                【讨论】:

                  猜你喜欢
                  • 2016-01-11
                  • 2012-04-25
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-12-14
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-12-30
                  • 2017-04-05
                  相关资源
                  最近更新 更多