其實一直有些猶豫的是,這個是不是應該寫在docker下面。好吧,還是獨立出來,算是一記?

本來百度一下,也很沒有難度的。只是,其實好像也不用那麼。

也就一個就可以:

sudo docker run -d --name mysql-test -p 3306:3306 -v ~/mysql-test/data:/var/lib/mysql -v ~/mysql-test/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

不知道爲什麼所有的教程都要先docker pull一個鏡像,可能主要是選擇mysql的版本吧。沒有什麼版本需要的話,這一句就可以。是運行了一個叫mysql-test的容器,其中-v是把本地的路徑掛載進去,-e是設置密碼。本地路徑主要是數據持久化。-p是映射端口1

然後可以docker ps看容器是否在運行。然後就可以鏈接數據庫了。

或者,都可以:

sudo docker exec -it mysql-test bash

進入到容器內,並交互一個bash,然後就可以在裏面mysql -u root -p了。

所以,其實主要還是docker需要學習的內容多一些!


然後,話說進入mysql之後。可能需要的是從宿主拷貝到容器中,這需要的是docker cp,例如:

sudo docker cp ~/Downloads/mysql_scripts/ <容器id>:/home

mysql下面就可以source 123.sql咯。雖然在mariadb下執行好像稍有不同。

不過接下來應該就是sql的內容咯。

所以,更多地還是需要多學習一下docker!


另外,補充的是,在更換到fedora之後,運行上面的sudo docker run -d --name mysql-test -p 3306:3306 -v ~/mysql-test/data:/var/lib/mysql -v ~/mysql-test/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 mysq時候就推出,莫名感覺應該是掛載這個本地文件夾的緣故,然後把-v那些刪掉,果然就可以了。

只是,那是爲什麼呢?

這時候需要的是log吧:

	sudo docker logs id

果然,這個顯示的是:

[Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started. find: ‘/var/lib/mysql/’: Permission denied find: ‘/var/lib/mysql’: Permission denied chown: changing ownership of ‘/var/lib/mysql/’: Permission denied chown: changing ownership of ‘/var/lib/mysql’: Permission denied

到不是本地文件夾的緣故,應該是docker裏面的權限。只是外面的還好說,docker內部的怎麼辦?

搜索唄,自從不用百度之後,感覺解決問題都容易得多了:

安全Selinux禁止了一些安全权限,导致挂载信息时出现权限不足,网上查询资料之后给出了如下3种解决方案:

1.在docker run中加入 –privileged=true 给容器加上特定权限 2.关闭selinux 3.在selinux添加规则,修改挂载目录的特定权限

其實就簡便的還是加一個–privileged=true就可以。selinux的規則最好還是不動爲妙?——其實只是自己不是很懂……

然後應該就可以了。補充一句的是,docker logs很有用!

  1. 冒號”:”前是本地host的設置,後面是容器內的設置。