![](/img/trans.png)
[英]How to change mysql version from 8.0 to 5.6 in docker-compose.yml of laravel 8 project?
[英]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 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
如何包含配置?
自定義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.