首頁 >資料庫 >mysql教程 >分析Macosx下使用docker/mysql的問題

分析Macosx下使用docker/mysql的問題

藏色散人
藏色散人轉載
2021-11-25 14:49:171968瀏覽

這篇文章跟大家介紹關於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.com。如有侵權,請聯絡admin@php.cn刪除