一、拉取MySQL鏡像
1样傍、拉取命令
docker pull mysql
2邮丰、查看鏡像,檢查是否拉取成功
docker images
二铭乾、創(chuàng)建MySQL容器
1、建立目錄映射
mkdir /opt
mkdir /opt/mysql
mkdir /opt/mysql/conf/
mkdir /opt/mysql/logs/
mkdir /opt/mysql/data/
2娃循、創(chuàng)建my.cnf配置文件
touch /opt/mysql/my.cnf
my.cnf添加以下內(nèi)容:
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
3炕檩、創(chuàng)建容器,并后臺(tái)啟動(dòng)
docker run --restart=always --privileged=true \
-v /opt/mysql/data/:/var/lib/mysql \
-v /opt/mysql/logs/:/var/log/mysql \
-v /opt/mysql/conf/:/etc/mysql \
-v /opt/mysql/my.cnf:/etc/mysql/my.cnf \
-p 3306:3306 --name my-mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
- -v:主機(jī)和容器的目錄映射關(guān)系捌斧,":"前為主機(jī)目錄笛质,之后為容器目錄
- --restart=always: 當(dāng)Docker 重啟時(shí),容器會(huì)自動(dòng)啟動(dòng)捞蚂。
- --privileged=true:容器內(nèi)的root擁有真正root權(quán)限妇押,否則容器內(nèi)root只是外部普通用戶權(quán)限
??注意:?jiǎn)?dòng)mysql報(bào)如下錯(cuò)誤,那是因?yàn)镸YSQL新特性secure_file_priv對(duì)讀寫文件的影響姓迅。
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2019-09-14T09:52:51.015937Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
2019-09-14T09:52:51.018328Z 0 [ERROR] [MY-010119] [Server] Aborting
解決問(wèn)題:
windows下:修改my.ini 在[mysqld]內(nèi)加入secure_file_priv=/var/lib/mysql
linux下:修改my.cnf 在[mysqld]內(nèi)加入secure_file_priv=/var/lib/mysql
三敲霍、連接MySQL
1俊马、進(jìn)入mysql容器
docker exec -it my_mysql /bin/bash
2、登陸mysql
mysql -u root -p
3肩杈、mysql 8 設(shè)置允許遠(yuǎn)程用戶訪問(wèn)
update user set host = '%' where user = 'root' and host='localhost';
# 更新root - localhost 為 root - %
GRANT ALL ON *.* TO 'root'@'%';
# 設(shè)置允許遠(yuǎn)程用戶訪問(wèn)
flush privileges;
# 刷新權(quán)限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
#更新用戶加密方式柴我,mysql8默認(rèn)的加密方式為caching_sha2_password 與mysql5的加密方式mysql_native_password 不同
4、使用Navicat 或者 MySQL Workbench 遠(yuǎn)程連接mysql
我們?cè)趧?chuàng)建容器的時(shí)候已經(jīng)將容器的3306端口和主機(jī)的3306端口映射到一起扩然,所以我們應(yīng)該訪問(wèn):
host: 127.0.0.1
port: 3306
user: root
password: 123456
看這里艘儒,加關(guān)注:
簡(jiǎn)書:一手文實(shí)時(shí)更新~~
博客:都是干貨!7蚺肌界睁!
Github:開(kāi)源代碼,僅供參考~~