簡體   English   中英

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

[英]How to add mysql config in Laravel Sail docker-compose.yml?

我有一個全新的 Laravel 8 安裝以及 mysql:8.0 圖像。

我想給 MySql 添加一些配置。

這是我在 docker-compose.yml 中的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 downsail 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

如何包含配置?

自定義my.cnf正在覆蓋導致 mysql 服務失敗的設置(pid-file、socke 和 datadir)。 為了不覆蓋它們,需要保留原始的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

因為我遇到了同樣的問題,所以偶然發現了你的問題。 我將 Laravel 與當前的 mysql docker 容器一起使用。

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

基礎my.cnf文件位於此處:

/etc/my.cnf

(還有一個文件夾/etc/my.cnf.d/ ,但是將 custom.cnf 文件放在那里沒有用,因為它不包含在/etc/my.cnf中)

從 docker 容器復制/etc/my.cnf的原始內容后,我在docker-compose.yml文件中所做的是:

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

您可以通過登錄到正在運行的容器來檢查 mysql docker 配置(請參閱https://hub.docker.com/_/mysql ):

$ docker exec -it nameOfMysqlContainer bash

登錄后列出etc文件夾中的文件:

$ ls -la /etc/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM