拉取mysql镜像
docker pull mysql 默认拉取最新latest的镜像
使用docker images查看镜像
定义一个/opt/mysql/conf/my.cnf文件,内容如下
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
# 5,7及其版本之后默认设置了only_full_group_by参数,要求select的字段必须在group by后有出现,否则报错
# 所以自定义sql_model参数,去除only_full_group_by
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set = utf8
启动mysql的命令,自定义一个挂载mysql/data目录存放sql文件,将mysql配置文件映射到/etc/mysql/conf.d目录下
docker run --name mysql -itd -p 3306:3306 -v /opt/mysql/data:/opt/mysql/data -v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf --restart=always -e MYSQL_ROOT_PASSWORD=root mysql:latest
名词解释 -itd:交互模式,后台运行;–restart=always:重启服务器自动部署mysql容器.
进入容器内部
docker exec -it mysql /bin/bash
尝试连接mysql,用run时使用的root密码连接,即
mysql -uroot -proot
开启远程访问
- 切换到mysql数据库
use mysql;
(查询数据库show databases;查询表:show tables;) - 查询user表root用户访问权限(我这边已经设置过了)
select user,host,plugin from user;
- 设置root用户访问权限和密码加密类型
默认root用户的host为localhost(本地连接),远程连接我们需要修改为%
update user set host=‘%’ where user=‘root’;
修改密码插件,mysql8默认是caching_sha_password
alter user ‘root’@‘%’ identified with mysql_native_password by ‘root’;
设置为mysql_native_password后可以通过Navicat等工具连接 - 刷新 flush privileges;
- 退出exit;
云服务器公网开放3306
- 端口开放
我这使用的是tx轻量级服务器,其他公司产品思路大致相同,找到服务器的防火墙模块,添加规则,将3306端口开放出去即可
- 测试连接
使用telnet 公网ip 3306测试,例如telnet ip 3306
如果正常连接,那么Navicat等连接工具也是可以正常连接的
小知识:
退出容器命令:exit
查看容器运行日志:docker logs -f 容器名称 -f是实时监控