本次介绍如何在阿里云ECS云服务器中使用docker安装最新mysql 8 并且进行远程访问。
前言,安装docker:阿里云ECS云服务器安装docker并配置阿里云镜像仓库。
1 拉取mysql镜像
该命令直接拉取最新mysql镜像。
docker pull mysql
如果想要指定版本,那么在官网可以找到mysql镜像所有版本:https://hub.docker.com/_/centos,latest就表示最新版本,使用“:”分隔,在后面加上版本号即可,比如:
docker pull mysql:5.7
2 查看镜像
docker images
3 创建mysql容器实例并运行
随后创建一个mysql容器实例,即可开始使用:
docker run -it --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
-it :分配一个伪tty,一般与 -i 连用。可以省去。
–name mymysql :设置当前mysql容器实例名为“mymysql” ,可以自己指定。
-e MYSQL_ROOT_PASSWORD=123456 :设置当前mysql容器实例密码为“123456” ,可以自己指定。
-p 3306:3306 :设置当前mysql容器实例端口映射,前一个是远程访问时的端口,后一个是默认端口。
-d mysql : 表示以后台形式mysql镜像标签
4 查看容器实例
查看正在运行的容器实例
docker ps -a
到此,实际上一个mysql容器实例就创建好了并且运行起来了,相对于传统的安装mysql,是不是很简单啊?
这个mysql实例已经被保存下来了,后续直接使用 docker start CONTAINER_ID 即可启动, docker restart CONTAINER_ID即可重启, docker stop CONTAINER_ID。
6 进入mysql容器并登陆
如何进入mysql容器(这一步不是必须要做的)?
docker exec -it 013392c286a4 bash
这里的“013392c286a4 ”,表示当前容器id,可通过 docker ps -a 命令查看。
此时已经进入了容器,随后可以进行登陆。
mysql -uroot -p
随后再输入密码,即可进入mysql服务中!
5 远程连接navicat
第四步完成之后即可开始连接。注意,远程连接之前需要在安全组开放访问的端口,在上一篇文章已经讲了。这里的端口是前一个指映射的端口!
随后直接使用navicat连接即可,这里的ip使用我们的服务器远程ip,端口使用映射的端口,用户名root(也可以自己创建用户),密码就是启动实例是指定的密码!
至于代码连接,则同样非常简单,普通设置都是一样的!
5.1 mysql 8 远程连接
mysql 8以上默认使用的是caching_sha2_password身份验证机制,之前用的是mysql_native_password,所以远程连接可能会抛出1521、2059 等错误(大多是因为navicat不是最新版,而是老的盗版,最新版支持mysql 8加密方式),需要修改用户的密码加密校验方式!
进入mysql容器并登陆mysql,执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
这里的password是自己指定的密码,‘root’@’%'表示任何ip都可以连接。随后刷新,即可正常远程连接!
flush privileges;
至于远程访问权限,默认都是授予的,因此不必设置。
7 修改时区
mysql默认存储时间类型的数据的时间值与系统时间总是不对应,相差8个小时。如果使用简单的设置,那么docker中每一次启动mysql实例,设置信息还是会被还原,因此我们这里需要修改配置文件,达到永久设置系统时区的功能!
首先进入mysql容器(不需要登陆),第6点已经讲了。随后进入my.cnf的目录:
cd /etc/mysql
添加一行:default-time_zone = ‘+8:00’ 配置到my.cnf末尾即可实现永久更改。
echo "default-time-zone = '+08:00'">>my.cnf
在代码的url中也可以添加serverTimezone=Asia/Shanghai参数来临时设置时区。