这两年 Docker 比较火,很多大厂都在使用。这里记录一下 Cent OS 中使用 Docker 安装 mysql 并启动、连接的过程。
建议切换 root 用户进行以下操作
¶一、安装 mysql
¶1、查找镜像
在 Docker Hub 官网查找自己需要的版本 https://hub.docker.com/_/mysql?tab=tags
¶2、下载镜像
我选择的是 5.7 版本:
1 | docker pull mysql:5.7 |
¶3、创建项目文件夹并进入
仅限服务器端
本地创建一个文件夹用来存放 mysql 的配置文件、日志以及数据等(也就是挂载目录,作用是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)
1 | mkdir -p /mnt/docker/mysql |
¶二、运行 mysql
¶1、使用镜像创建容器并运行
1 | docker run -p 6033:3306 -d --name mysql-5.7 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 |
指令解释:
-p
表示端口映射,-p 宿主机 port:容器 port
-d
表示后台运行并返回容器 id,只有在父进程即 docker 进程退出的时候才会去把容器退出,除非你使用了--rm
选项。如果你在运行容器时将-d
和--rm
两个选项一起使用,那么容器会在退出或者后台进程停止的的时候自动移除掉(只要一个情况便会自动移除镜像)--name
表示给容器指定的名称-v $PWD/conf:/etc/mysql/conf.d
表示将主机上当前目录下的 conf/my.cnf 文件挂载到容器的 /etc/mysql/my.cnf-v $PWD/logs:/logs
表示将主机上当前目录下的 logs 目录挂载到容器的 /logs-v $PWD/data:/var/lib/mysql
表示将主机上当前目录下的 data 目录挂载到容器的 /var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456
表示初始化 root 用户的密码
注意
本地 Docker 安装 mysql 时可以不使用 -v 挂载文件夹,如下:
1 | docker run -p 3306:3306 -d --name mysql-5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 |
¶2、进入容器
1 | docker exec -it mysql-5.7 bash |
¶3、进入 mysql
1 | mysql -uroot -p |
¶4、可能用到的命令
1 | mysql_upgrade -u root -p --force |
¶5、mysql 修改密码
需要先进入 mysql 再执行:
1 | update mysql.user set authentication_string=password('newPassword') where user='root'; |
¶三、Linux 修改时间及时区
¶1、查看本机时间
1 | date |
在 Linux 中与时间相关的文件有:/etc/localtime
、/etc/timezone
¶2、修改本机时间
1 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
在/usr/share/zoneinfo
下存放着不同时区格式的时间文件,执行以上命令,可以将本机时间调整至目标时区的时间格式。但是调整了时间格式,本机所属的时区是保持不变的!
¶3、修改本机时区
在 Linux 中,有一些程序会自己计算时间,不会直接采用带有时区的本机时间格式,会根据 UTC 时间和本机所属的时区等计算出当前的时间,new 出来的时间还是 UTC 时间,所以必须得修正本机的时区。
1 | echo 'Asia/Shanghai' >/etc/timezone |
¶四、mysql 修改时间
1 | select now(); |
vim /etc/my.cnf
然后在 [mysqld]
区域中加上 default-time_zone = '+8:00'
1 | docker stop mysql-5.7 |
¶五、egg 中连接 mysql 的 docker 容器报错
egg 连接 mysql 的 docker 容器,报错:Client does not support authentication protocol requested by server; consider upgrading MySQL client
¶解决办法
mysql 中执行如下语句:
1 | ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; |
% 表示允许来自任何 ip 的连接
localhost 表示允许本机的连接