Docker安装Mysql 8.0(解决无法远程访问问题)

1、拉取mysql:8.0镜像

docker pull mysql:8.0

2、启动容器

docker run -itd -p 3306:3306 --privileged=true --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

3、进入容器

docker exec -it <数据库容器Id> /bin/bash

4、登录

mysql -u root -p123456 -h localhost

5、切换数据库

use mysql

6、设置远程访问

查看:select host,user,plugin from user;
删除多余的行:delete from user where user ='root' and host='%';
设置所有host可以访问:update user set host='%' where user ='root';
修改密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷一下,使之生效:FLUSH PRIVILEGES;
退出:exit
### Docker安装并配置MySQL 8.0以允许所有IP访问 #### 安装MySQL 8.0 可以通过Docker官方镜像来快速部署MySQL 8.0环境。以下是具体的命令: ```bash docker pull mysql:8.0 docker run --name=mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 ``` 上述命令会拉取最新的MySQL 8.0镜像,并创建一个名为`mysql8`的容器,同时设置root用户的初始密码为`123456`。 为了验证容器是否正常运行,可执行以下命令: ```bash docker ps ``` 如果未正常启动,则可通过日志排查问题: ```bash docker logs mysql8 ``` --- #### 配置MySQL允许所有IP访问 ##### 修改绑定地址(bind-address) 默认情况下,MySQL只监听本地回环接口(127.0.0.1),需要将其改为监听所有网络接口(`0.0.0.0`)。 进入MySQL容器内部: ```bash docker exec -it mysql8 /bin/bash ``` 编辑MySQL配置文件 `/etc/mysql/my.cnf` 或者 `/etc/mysql/mysql.conf.d/mysqld.cnf` 文件中的 `bind-address` 参数[^3]: ```ini [mysqld] bind-address = 0.0.0.0 ``` 保存退出后重启MySQL服务使更改生效: ```bash service mysql restart ``` 注意:如果不挂载外部卷,默认的配置文件路径位于容器内的`/etc/mysql/`目录下。 --- ##### 设置用户权限支持远程访问 登录到MySQL数据库实例: ```bash mysql -u root -p ``` 执行SQL语句更新root用户的主机字段(host)为`%`(表示任意IP均可访问)[^1]: ```sql USE mysql; UPDATE user SET host='%' WHERE user='root'; FLUSH PRIVILEGES; ``` 此时,root账户可以从任何IP地址连接至该MySQL服务器。 --- #### 测试连接 在宿主机或其他机器上测试连接: ```bash mysql -h [容器IP] -P 3306 -u root -p ``` 其中 `[容器IP]` 是指Docker容器的实际IP地址,可以通过以下命令获取: ```bash docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql8 ``` 如果能够成功连接,则说明配置完成。 --- #### 安全注意事项 1. **禁用不必要的功能**:确保关闭了防火墙或者仅开放必要的端口。 ```bash systemctl stop firewalld systemctl disable firewalld ``` 2. **限制访问范围**:虽然设置了`host=%`,但在生产环境中应尽量限定特定IP或子网访问[^5]。例如: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'[指定IP]' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 3. **启用SSL加密通信**:对于敏感数据传输场景,建议强制使用SSL连接。 4. **定期审计日志**:监控错误日志(error_log)和查询日志(general_log),及时发现潜在威胁。 --- ### 总结 通过调整`bind-address`参数以及赋予适当用户权限,可以在Docker环境下实现MySQL对所有IP地址的开放访问。然而,在实际应用过程中需特别关注安全性,防止因过度宽松策略引发的数据泄露风险。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱吃零食的北鼻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值