創新實訓——006

接下來介紹在編寫代碼中遇到的各種問題及解決思路。

使用docker搭一個mysql服務

爲了成員間均可以使用共同的mysql服務,打算利用docker開一個mysql服務
關於在centos7上如何下載安裝docker可以去看第一篇文章,這裏假設docker已經安裝好了
docker版本
在這裏我要使用docker的鏡像加速,不然根據之前的使用經驗,速度會比較慢。因爲我使用的是阿里雲的服務器,所以也使用阿里雲的鏡像加速,網址:阿里雲docker鏡像加速
按照上面的操作就好:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["填自己的"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

下面開始搭建mysql服務,首先需要下載鏡像

docker search mysql
docker pull mysql //下的是最新版的,還可以類似mysql:1.1這種來選擇具體某一版本

mysql鏡像
爲了讓該mysql真正能夠使用,既需要存儲數據,也需要對外開放端口,需要進行如下操作:

創建數據存放目錄mkdir -p /opt/data/mysql
查看本地3306端口是否被其他進程佔用lsof -i:3306
創建容器docker run -d -v /opt/data/mysql/:/var/lib/mysql -p 3306:3306 --name test-mysql -e MYSQL_ROOT_PASSWORD=password mysql
-v /opt/data/mysql:/var/lib/mysql->把宿主機/opt/data/mysql/目錄映射到容器的/var/lib/mysql目錄
-p 3306:3306->把容器的mysql端口3306映射到宿主機的3306端口,這樣想訪問mysql就可以直接訪問宿主機的3306端口,如果3306被佔用了可以使用別的端口

此時在其他機器上使用navicat還是無法訪問,報2059錯誤,這是由於新版本的MySQL使用的是caching_sha2_password驗證方式,但此時的navicat還沒有支持這種驗證方式。
需要進行如下操作:

進入容器docker exec -it test-mysql /bin/bash
也可以使用run命令,不過run命令一般用在創建的時候,然後以命令行交互;exec是在運行的容器中執行命令
這裏有一個問題需要注意“這裏-t給容器綁上了一個僞終端並綁定到容器的標準輸入上, -i則讓容器的標準輸入保持打開”,還可以docker exec test-mysql ls,/bin/bash是打開容器內的一個終端近程,又因爲it的等待 所以就會一直以終端連接的方式停留在容器內部
進入數據庫mysql -u root -p;選擇數據庫use mysql;;查看用戶加密規則select user,plugin from user where user='root';

加密規則修改前

更改加密方式alter user 'root'@'%' identified by 'password' password expire never;和alter user 'root'@'%' identified with mysql_native_password by 'password';;再次查看用戶加密規則select user,plugin from user where user='root';;刷新權限flush privileges;
注意遠程連接爲‘root’@’%’,本地連接爲‘root’@’localhost’

加密規則修改後
然後就可以使用了,如果報2003錯誤,檢查一下阿里雲的安全組中3306端口是否打開
有關docker的其他一些操作:

退出容器輸入exit
查看容器日誌可輸入docker logs test-mysql
停止容器docker stop test-mysql;啓動被停止的容器docker start tets-mysql;重啓是restart
docker ps列出正在運行的容器,-a :顯示所有的容器,包括未運行的。
docker create :創建一個新的容器但不啓動它,用法同run
docker rm 容器id和docker rmi 鏡像id -f 強制刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章