本地navicat连接本地docker容器中mysql
😄 @Auther by sizaif
📆 2021-06-24 17:54:18
[TOC]
修订历史
- 2021-06-24 17:54:31: 首次编辑
- 2021-06-24 22:28:18: update bug
具体步骤
如果已经有了mysql镜像, 直接跳过,到docker mysql容器中
docker 拉去 mysql 镜像
$ docker pull mysql
启动MySQL镜像
$ docker run --name=mysql -itd -p <宿主机映射端口>:3306 -e MYSQL_ROOT_PASSWORD=<密码> mysql
进入MySQL容器
$ docker exec -it mysql /bin/bash
进入MySQL
设置允许外部登录的mysql用户
$ mysql -uroot -p<密码>
# 设置允许外部登录的mysql用户: 'test' host监听地址:'%' 密码 test
$ mysql> CREATE USER If Not Exists 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'test';
# 赋予用户权限
$ mysql> GRANT all privileges ON test.* TO 'test'@'%' identified by 'test';
# 刷新
$ mysql>flush privileges;
修改mysql配置,允许任意主机访问
# 修改 mysqld.cnf中 bind-address监听地址loaclhst为0.0.0.0
$ sed -i 's/^bind-address.*$/bind-address=0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
# 重启mysql
$ service mysql restart
若嫌进入mysql太麻烦直接运行如下命令,替换掉<>
中内容
#修改mysql配置,允许任意主机访问
$ sed -i 's/^bind-address.*$/bind-address=0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
$ service mysql restart
# 新建允许外部登录的mysql用户:'<test>'@'%',密码<test>
USER=`cat /etc/mysql/debian.cnf |grep user|head -1|awk '{print $3}'`
PW=`cat /etc/mysql/debian.cnf |grep password|head -1|awk '{print $3}'`
mysql -u${USER} -p${PW} -e"CREATE USER If Not Exists '<test>'@'%' IDENTIFIED WITH mysql_native_password BY '<test>';"
mysql -u${USER} -p${PW} -e"GRANT all privileges ON <your mysql continer name>.* TO '<test>'@'%' identified by '<test>';flush privileges;"
navicat 远程连接
然后远程连接【宿主机ip:<宿主机映射端口>】,使用新建的用户登录mysql即可。
>$ docker run --name=mysql -itd -p <宿主机映射端口>:3306 -e MYSQL_ROOT_PASSWORD=<密码> mysql
问题发现整理
-
报2013错误
这个原因一般是由mysql中已经设定用户的远程host为’%',但是mysqld.cnf 或 my.cnf中
bind-address
监听地址为localhost
导致 -
报1045错误 Access defined
一般是由于密码不正确或用户不正确导致