我們可以下拉別人的Mysql鏡像也可以通過Dockerfile自己構建Mysql鏡像,方便起見,我是下拉的docker官方的Mysql鏡像
1.使用如下命令查看dockerhub中的所有mysql鏡像
docker search mysql
2.官方的mysql鏡像的名稱爲mysql,所以我們輸入以下命令進行下拉
docker pull mysql
3.運行一個mysql容器
docker run --name first-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
--name 後面是這個鏡像的名稱
-p 3306:3306 暴露3306端口,表示在這個容器中使用3306端口(第二個)映射到本機的端口號也爲3306(第一個)
-e MYSQL_ROOT_PASSWORD=123456 設置root用戶密碼
-d 表示使用守護進程運行,即服務掛在後臺
4.登錄容器的mysql,設置訪問權限,以及導入一些數據庫文件
我們的docker容器中的mysql一般都是需要允許遠程連接的,所以我們進行如下設置
docker exec -it first-mysql bash
exec命令 在容器first-mysql中開啓一個交互模式的終端
-i 即使沒有附加也保持STDIN 打開
-t 分配一個僞終端
連接到容器mysq
mysql -hlocalhost -uroot -p123456
添加一個root用戶,主機爲%(意爲任何主機)
create user 'root'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
//創建一個用戶,mysql 8 之後要求先創建用戶,再授權,而不能在授權時創建用戶
create user 'root'@'%' identified by '123456';
//授權用戶爲超級管理用戶
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
//刷新權限
FLUSH PRIVILEGES;
5.暴露centos服務器的3306端口
開啓系統防火牆:
systemctl start firewall.service
開啓端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
--zone #作用域
--add-port=3306/tcp #添加端口,格式爲:端口/通訊協議
--permanent #永久生效,沒有此參數重啓後失效
需要重啓服務器
firewall-cmd --reload
查看開放的端口:
firewall-cmd --list-ports
到此爲止,我們的mysql服務器就創建成功了,我們可以在本地使用 Navicat for MySQL等mysql圖形化界面進行連接啦。注意:
1.連接的主機名爲centos服務器的ip地址
2.如果mysql的版本爲8.0以上,則連接時可能會報1251的錯誤,這是因爲:mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password。解決方法如下:
//更改用戶密碼驗證方式
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
//刷新更改密碼驗證方式之後的密碼
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新權限
FLUSH PRIVILEGES;