• 技术文章 >数据库 >mysql教程

    分析Macosx下使用docker/mysql的问题

    藏色散人藏色散人2021-11-25 14:49:40转载137
    本篇文章给大家介绍关于Macosx 下如何使用docker/mysql的问题,希望对大家有所帮助!

    问题描述

    在macosx下如果指定本地目录替换/var/lib/mysql,运行时会出现文件权限的错误,导致mysqld无法正常运行

    Creating mysql_test-mysql_1
    Attaching to mysql_test-mysql_1
    test-mysql_1 | Initializing database
    test-mysql_1 | 2016-03-23T04:32:37.437789Z 0 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
    test-mysql_1 | 2016-03-23T04:32:37.466955Z 0 [ERROR] InnoDB: Operating system error number 13 in a file operation.
    test-mysql_1 | 2016-03-23T04:32:37.467828Z 0 [ERROR] InnoDB: The error means mysqld does not have the access rights to the directory.
    test-mysql_1 | 2016-03-23T04:32:37.468824Z 0 [ERROR] InnoDB: Operating system error number 13 in a file operation.
    test-mysql_1 | 2016-03-23T04:32:37.468912Z 0 [ERROR] InnoDB: The error means mysqld does not have the access rights to the directory.
    test-mysql_1 | 2016-03-23T04:32:37.470280Z 0 [ERROR] InnoDB: Cannot open datafile './ibdata1'
    test-mysql_1 | 2016-03-23T04:32:37.470309Z 0 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
    test-mysql_1 | 2016-03-23T04:32:37.470317Z 0 [ERROR] InnoDB: InnoDB Database creation was aborted with error Cannot open a file. You may need to delete the ibdata1 file before trying to start up again.
    test-mysql_1 | 2016-03-23T04:32:38.073222Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
    test-mysql_1 | 2016-03-23T04:32:38.073268Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
    test-mysql_1 | 2016-03-23T04:32:38.073283Z 0 [ERROR] Failed to initialize plugins.
    test-mysql_1 | 2016-03-23T04:32:38.073289Z 0 [ERROR] Aborting
    test-mysql_1 | 
    mysql_test-mysql_1 exited with code 1

    解决方案

    • 创建在scripts目录下mysqld启动脚本

    #!/bin/bash
    # From https://github.com/docker-library/mysql/issues/99
    set -e # fail on any error
    
    echo '* Working around permission errors in Docker on Mac locally by making sure that "mysql" uses the same uid and gid as the host volume'
    TARGET_UID=$(stat -c "%u" /var/lib/mysql)
    echo '-- Setting mysql user to use uid '$TARGET_UID
    usermod -o -u $TARGET_UID mysql || true
    TARGET_GID=$(stat -c "%g" /var/lib/mysql)
    echo '-- Setting mysql group to use gid '$TARGET_GID
    groupmod -o -g $TARGET_GID mysql || true
    echo
    echo '* Starting MySQL'
    chown -R mysql:root /var/run/mysqld/
    /entrypoint.sh mysqld --user=mysql --console
    • 创建docker-compose.py,指定run-mysqld.sh脚本为容器入口

    test-mysql:
        image: mysql 
        ports:
            - "3306:3306"
        volumes:   
            - /localhost/mysql/data:/var/lib/mysql 
            - ./scripts/run-mysqld.sh:/run-mysqld.sh
        environment:
            - MYSQL_DATABASE=play
            - MYSQL_USER=play
            - MYSQL_PASSWORD=play
            - MYSQL_ROOT_PASSWORD=123456
        entrypoint: /run-mysqld.sh
    • 运行docker-compose up命令,启动容器

    推荐学习:《mysql视频教程

    以上就是分析Macosx下使用docker/mysql的问题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:docker macos mysql
    上一篇:聊聊mysql-connector-java怎么连接驱动 下一篇:mysql 怎么查询月份

    相关文章推荐

    • 聊聊关于Mac Laravel docker sail 搭建问题• 详解Mysql双机热备安装步骤• 一步步教你搭建Mysql单机多实例• 聊聊mysql-connector-java怎么连接驱动

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网