代码之家  ›  专栏  ›  技术社区  ›  Adam

如何在Laravel Sail docker-compose.yml中添加mysql-config?

  •  0
  • Adam  · 技术社区  · 4 年前

    我有一个新的Laravel 8安装与mysql:8.0图像。

    我想向MySql添加一些配置。

    这是我在中的mysql服务 docker-compose.yml :

      mysql:
            image: 'mysql:8.0'
            ports:
                - '${FORWARD_DB_PORT:-3306}:3306'
            environment:
                MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
                MYSQL_DATABASE: '${DB_DATABASE}'
                MYSQL_USER: '${DB_USERNAME}'
                MYSQL_PASSWORD: '${DB_PASSWORD}'
                MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
            volumes:
                - 'sailmysql:/var/lib/mysql'
            networks:
                - sail
            healthcheck:
                test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
                retries: 3
                timeout: 5s
    

    这很好用。如果我现在尝试添加 my.cnf 到这样的卷:

    volumes:
        - 'sailmysql:/var/lib/mysql'
        - './docker/8.0/my.cnf:/etc/mysql/my.cnf'
    

    并使用重新启动容器 sail down sail up ,然后它突然失败:

    mysql_1         | 2021-11-06T13:26:52.465786Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
    mysql_1         | 2021-11-06T13:26:52.465813Z 0 [ERROR] [MY-010119] [Server] Aborting
    

    如何包含配置?

    0 回复  |  直到 4 年前
        1
  •  1
  •   lsblsb    3 年前

    我刚刚偶然发现了你的问题,因为我也有同样的问题。 我将Laravel与Sail一起使用当前的mysql docker容器。

    我检查了docker容器,mysql配置保存如下:

    基地 my.cnf 文件位于此处:

    /etc/my.cnf
    

    (还有一个文件夹 /etc/my.cnf.d/ ,但将自定义的.cnf文件放在那里不起作用,因为它不包含在里面 /etc/my.cnf )

    我在我的 docker-compose.yml 文件 在我复制了原始内容之后 属于 /etc/my.cnf 来自docker容器的是:

    volumes:
        - 'sail-mysql:/var/lib/mysql'
        - './docker/8.2/my.cnf:/etc/my.cnf'
    

    我需要它,因为我得到 MySQL: Error Code: 1118 Row size too large (> 8126). 可以这样固定:

    innodb_strict_mode = OFF
    

    您可以通过将loggin记录到这样的运行容器中来检查mysql-doker配置(请参阅 https://hub.docker.com/_/mysql ):

    $ docker exec -it nameOfMysqlContainer bash
    

    要在登录时列出etc文件夹中的文件,请执行以下操作:

    $ ls -la /etc/
    
        2
  •  0
  •   Adam    4 年前

    习俗 my.cnf 正在覆盖设置(pid文件、socke和datadir),这会导致mysql服务失败。为了不覆盖它们,需要保留原件 my.cnf 文件,该文件为:

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    

    因此,在您的情况下,您必须添加:

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    innodb_io_capacity = 2000
    innodb_read_io_threads = 64
    innodb_thread_concurrency = 64
    innodb_write_io_threads = 64