Docker安裝MySQL並使用Navicat連線

2022-09-19 06:02:11

MySQL簡單介紹:

  MySQL 是一個開放原始碼的關聯式資料庫管理系統,開發者為瑞典 MySQL AB 公司。目前 MySQL 被廣泛地應用在 Internet 上的大中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了 MySQL 作為網站資料庫。

檢視可用的MySQL版本:

存取DokcerHub中的MySQL映象庫地址:https://hub.docker.com/_/mysql/tags

可以通過 Sort by 檢視其他版本的MySQL,檢視最新版本MySQL映象(mysql:latest):https://hub.docker.com/_/mysql/tags?page=1&name=latest

 

此外,我們還可以用docker search mysql命令來檢視可用版本: 

拉取最新版本的MySQL映象:

docker pull mysql:latest

注意:tag是可選的,tag表示標籤,多為軟體的版本,預設是latest版本(最新版)

驗證MySQL映象是否成功拉取到本地:

使用以下命令來檢視mysql映象是否成功拉取到本地:

docker images

建立並執行一個MySQL容器:

docker run --name=mysql-test -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123456 -d mysql

引數說明:

  • --name:指定了容器的名稱,方便之後進入容器的命令列。
  • -itd:其中,i是互動式操作,t是一個終端,d指的是在後臺執行。
  • -p:指在本地生成一個隨機埠,用來對映mysql的3306埠。
  • -e:設定環境變數。
  • MYSQL_ROOT_PASSWORD=root123456:指定了MySQL的root密碼
  • -d mysql:指執行mysql映象,設定容器在在後臺一直執行。

驗證MySQL容器是否建立並執行成功:

docker ps

1、進入MySQL容器:

docker exec -it mysql-test /bin/bash

2、進入MySQL:

mysql -uroot -p

Enter password:root123456

MySQL開啟遠端存取許可權:

1、切換資料庫

注意:預設應該就是這個,不切換也行,保險起見還是切換一下

use mysql;

2、給root使用者分配遠端存取許可權

GRANT ALL PRIVILEGES ON *.* TO root@'%' WITH GRANT OPTION;

引數說明:

  • GRANT:賦權命令
  • ALL PRIVILEGES:當前使用者的所有許可權
  • ON:介詞
  • *.*:當前使用者對所有資料庫和表的相應操作許可權
  • TO:介詞
  • ‘root’@’%’:許可權賦給root使用者,所有ip都能連線
  • WITH GRANT OPTION:允許級聯賦權

3、強制重新整理許可權

FLUSH PRIVILEGES;

伺服器設定3306的開放埠:

Navicat 連線 MySQL8 報錯:2059 - Authentication plugin ‘caching_sha2_password’ cannot be loaded:xxxx;

 

 

錯誤問題原因:

  這是因為MySQL8之前密碼加密規則為mysql_native_password,而 MySQL8 之後的加密規則為caching_sha2_password,也就是說,如果要用Navicat連線MySQL,其實只需要將密碼規則改回 mysql_native_password 即可;

解決方法:

1.進入MySQL資料庫

docker exec -it mysql-test /bin/bash
mysql -uroot -p
Enter password:root123456

2.選擇資料庫

use mysql;

3.更改密碼加密方式

IDENTIFIED BY ‘root123456’:連線時輸入密碼,密碼為root123456

ALTER USER 'root'@'%' IDENTIFIED BY 'root123456' PASSWORD EXPIRE NEVER; 

4.更新使用者密碼

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123456'; 

5.重新整理許可權

FLUSH PRIVILEGES;

Navicat連線MySQL測試: