一、場景需求
在開發環境中,一般使用 windows 系統進行開發,但需要在 linux 系統中創建運行 mysql8.0 的 docker 容器中進行測試(win10特定版本或win11才能安裝 docker),為了方便還需要在?windows 系統中通過 SQLyog 工具查詢 docker 容器中的數據庫。
實際場景中未必遇到這種情況,這里僅記錄自己實現的過程,以及踩過的坑!
?實現效果:
?二、實現思路
1、由于 linux 系統能更好的支持?docker 容器,所以在windows 安裝?virtualBox 虛擬機,virtualBox 安裝 linux(centos7版)系統,然后在 centos7 中創建 docker 容器,運行 mysql。
2、在window 上運行 SQLyog 客戶端,查詢 docker 容器中的數據庫?
三、相關步驟及配置
1、安裝 VirtualBox 及centos7 系統(略去具體安裝方法)
centos7鏡像可到阿里云鏡像站獲取:centos-7-isos-x86_64安裝包下載_開源鏡像站-阿里云
注意:
①最好使用DVD及Everything版本,否則可能會導致安裝虛擬機增強功能失敗。我最開始使用MInimal版本,增強功能始終安裝不上,折騰了我一下午+一晚上。
②Centos7 安裝完成后,將網絡的連接方式改為【橋接網卡】,以便宿主機和虛擬機能相互ping通
2、Centos7 中安裝 docker(略去具體安裝方法)
可參考:Install Docker Engine on CentOS | Docker Docs
注意:官網給出的鏡像路徑是國外網址,拉取鏡像經常超時,所以添加鏡像倉庫時,最好使用阿里云的鏡像倉庫路徑
//docker 官網的鏡像倉庫路徑
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo//國內用戶需要添加阿里云的鏡像倉庫路徑
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、Centos7 中安裝運行 Mysql8 的 docker 容器
以數據卷的形式創建及啟動,以便保存 docker 容器中的數據。
docker run --name m1 -e MYSQL_ROOT_PASSWORD=1 -v /root/mysqlData:/var/lib/mysql --privileged=true -d -p 3306:3306 mysql//--name test 為容器指定一個名稱(可替換test為自己喜歡的名稱)。
//-e MYSQL_ROOT_PASSWORD=1 設置MySQL的root密碼。你應該替換1為你的實際密碼。
//-d 使容器在后臺運行。
//mysql:latest 是要運行的MySQL鏡像和標簽(在這里是最新版本)
//以數據卷的形式,創建并啟動mysql容器,容器內的mysql數據不會因為容器的刪除而被刪除
//-v /root/mysqlData:/var/lib/mysql:將數據卷/root/mysqlData映射到容器的/var/lib/mysql目錄
//-p 3306:3306:將容器的3306端口映射到主機的3306端口
//--privileged=true: 使容器內的root擁有真正的root權限,解決掛載目錄沒有權限的問題
?4、在 docker 容器中新增數據test及表user
5、在 Windows 系統中運行 SQLyog 客戶端,連接 docker 容器中的數據庫
注意:如果遇到以下錯誤,則是 SQLyog 版本和docker容器中的mysql版本不匹配的原因。
報錯原因:客戶端不支持服務器要求的認證協議。這可能是因為客戶端版本太舊,不支持服務器所使用的新認證協議。
解決方法:升級客戶端版本或創建用戶時指定使用舊的認證協議
alter USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';-- 將 username 改為 root
-- 將 hostname 改為 % 和 localhost
-- 將 password 改為數據庫密碼-- 具體sql語句如下:
alter USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1';
alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1';-- 刷新權限
FLUSH PRIVILEGES;