Docker MySQL啟動(dòng)問(wèn)題及解決過(guò)程
問(wèn)題概述
Docker 環(huán)境中的 MySQL 容器啟動(dòng)失敗,主要表現(xiàn)為兩個(gè)核心錯(cuò)誤:
- 臨時(shí)文件權(quán)限問(wèn)題:
Can't create/write to file '/tmp/ibNysJx9' (Errcode: 13 - Permission denied)
- UNIX Socket 鎖文件問(wèn)題:
Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock Unable to setup unix socket lock file
根本原因
這些問(wèn)題的根本原因是 Docker 容器內(nèi)的權(quán)限限制。
容器中的 MySQL 進(jìn)程無(wú)法寫入特定目錄(/tmp 和 /var/run/mysqld),導(dǎo)致啟動(dòng)失敗。
解決方案
方案一:使用 tmpfs 和掛載卷(推薦)
# 創(chuàng)建必要的目錄 mkdir -p /path/to/mysql/data mkdir -p /path/to/mysql/run/mysqld # 設(shè)置正確的權(quán)限 chmod -R 777 /path/to/mysql/data chmod 777 /path/to/mysql/run/mysqld chown -R 999:999 /path/to/mysql/data # MySQL 在容器中通常使用 UID 999 # 啟動(dòng)容器 docker run --name mysql-5.7.30 \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --add-host=目標(biāo)服務(wù)器的IP:127.0.0.1 \ --tmpfs /tmp:rw,exec,mode=1777 \ -v /path/to/mysql/data:/var/lib/mysql \ -v /path/to/mysql/run/mysqld:/var/run/mysqld \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -d mysql:5.7.30
方案二:使用自定義配置文件
# 創(chuàng)建配置目錄 mkdir -p /path/to/mysql/conf # 創(chuàng)建自定義配置文件 cat > /path/to/mysql/conf/my.cnf << EOF [mysqld] pid-file=/var/lib/mysql/mysqld.pid socket=/var/lib/mysql/mysqld.sock datadir=/var/lib/mysql skip-host-cache skip-name-resolve EOF # 啟動(dòng)容器 docker run --name gwms-mysql \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --add-host=目標(biāo)服務(wù)器的IP:127.0.0.1 \ --tmpfs /tmp:rw,exec,mode=1777 \ -v /path/to/mysql/data:/var/lib/mysql \ -v /path/to/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -d mysql:5.7.30
方案三:使用特權(quán)模式(不推薦用于生產(chǎn)環(huán)境)
docker run --name gwms-mysql \ --privileged \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --add-host=目標(biāo)服務(wù)器的IP:127.0.0.1 \ -v /path/to/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -d mysql:5.7.30
其他可能需要考慮的因素
- SELinux:如果系統(tǒng)啟用了 SELinux,可能需要臨時(shí)禁用或設(shè)置適當(dāng)?shù)纳舷挛?/li>
setenforce 0 # 臨時(shí)禁用 # 或者 chcon -Rt svirt_sandbox_file_t /path/to/mysql/data
- 數(shù)據(jù)目錄權(quán)限:確保數(shù)據(jù)目錄具有正確的所有權(quán)
chown -R 999:999 /path/to/mysql/data
- Docker 網(wǎng)絡(luò)問(wèn)題:解決 DNS 解析問(wèn)題
# 添加到 /etc/hosts echo "目標(biāo)服務(wù)器的IP mysql-host" >> /etc/hosts
選擇適合您環(huán)境的方案,建議從方案一開(kāi)始嘗試,它既解決了權(quán)限問(wèn)題,又不會(huì)引入過(guò)多的安全風(fēng)險(xiǎn)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)備份詳解
本篇文章主要介紹了MySQL中的 數(shù)據(jù)庫(kù)備份詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-09-09
mysql decimal數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn)
這篇文章主要介紹了mysql decimal數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
SQL Server 完整備份遇到的一個(gè)不常見(jiàn)的錯(cuò)誤及解決方法
這篇文章給大家介紹了SQL Server 完整備份遇到的一個(gè)不常見(jiàn)的錯(cuò)誤及解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-05-05
windows 安裝解壓版 mysql5.7.28 winx64的詳細(xì)教程
這篇文章主要介紹了windows 安裝解壓版 mysql5.7.28 winx64的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12

