環境
- CentOS 7.5
- Docker 1.13.1
- MySQL 8.0.16
安裝
拉取鏡像
默認拉取最新版本的鏡像
$ docker pull mysql
如果要指定版本,使用下面的命令
$ docker pull mysql:8.0.16
創建數據目錄和配置文件
在宿主機創建放置mysql的配置文件的目錄和數據目錄,並且進行授權
$ mkdir -p /usr/mysql/conf /usr/mysql/data
$ chmod -R 755 /usr/mysql/
創建配置文件
在上面創建的配置文件目錄/usr/mysql/conf下創建MySQL的配置文件my.cnf
$ vim /usr/mysql/conf/my.cnf
添加以下內容到上述創建的配置文件中
[client]
#socket = /usr/mysql/mysqld.sock
default-character-set = utf8mb4
[mysqld]
#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
#datadir = /var/lib/mysql
#socket = /usr/mysql/mysqld.sock
#pid-file = /usr/mysql/mysqld.pid
datadir = /usr/mysql/data
character_set_server = utf8mb4
collation_server = utf8mb4_bin
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
啟動創建容器
$ docker run --restart=unless-stopped -d --name mysql -v /usr/mysql/conf/my.cnf:/etc/mysql/my.cnf -v
/usr/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
參數解釋:
-v : 掛載宿主機目錄和 docker容器中的目錄,前面是宿主機目錄,后面是容器內部目錄-d : 后台運行容器
-p 映射容器端口號和宿主機端口號
-e 環境參數,MYSQL_ROOT_PASSWORD設置root用戶的密碼
執行上述命令后,執行查詢容器的命令就可以看到創建的mysql容器
$ docker ps -a
結果如下所示:
問題
上述雖然安裝好了mysql,但是使用遠程的Navicat連接時提示錯誤,不能正確連接mysql,此時需要修改按照下面說的步驟修改一下mysql的密碼模式以及主機等內容才可以。
修改mysql密碼以及可訪問主機
- 進入容器內部
$ docker exec -it mysql /bin/bash
- 連接mysql
$ mysql -uroot -p
- 使用mysql庫
$ mysql> use mysql
- 修改訪問主機以及密碼等,設置為所有主機可訪問
$ mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密碼';
注意:
mysql_native_password,mysql8.x版本必須使用這種模式,否則navicate無法正確連接
- 刷新
$ mysql> flush privileges
經過以上步驟,再次遠程使用Navicat連接數據庫時就可以正常連接了。