前提是大家已经安装好docker并调试好可用
1.首先建立一个通用网络
docker network create hm-net
2.使用命令来安装mysql
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
--network hm-net\
mysql
记录一个命令解读:-p 3306:3306 : 设置端口映射。
容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
这里注意端口号一定要正确
3.查看MySQL默认端口号
建议使用3306端口号 docker里MySQL默认端口号好像是3306,本地端口号不是3306的话,可能不会匹配。
cmd用管理员身份 登录MySQL:mysql -u root -p
查看端口号:show global variables like 'port';
修改端口号:我的配置文件是在my.ini里面 直接修改
[client]
port=3306
[mysqld]
port=3306
如果端口号被其他应用占用,任务管理器里停掉。
修改好后重启MySQL并检查是否修改完成。
4.通过命令查看mysql容器:docker ps
5.使用navicat测试连接
IP地址要与自己的linux中的IP一致 其他项正常填写
有的 navicat会报1251的错,出现这个问题的原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,所以使用Navicat连接MySQL会报错。
我是这样解决:
容器内部:docker exec -it mysql bash
打开mysql数据库:mysql -uroot -p
查看用户信息:select host,user,plugin,authentication_string from mysql.user;
更改加密方式:ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
更改密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
最后刷新:FLUSH PRIVILEGES;
这时候我们去navicat测试连接,就可以连接上了。
希望对大家有帮助,我也是第一次做,一堆不懂得问题卡了2个小时才搞好