部署环境准备
百度云服务器 centos 7.2
inux instance-5bf3tef2 3.10.0-1062.4.1.el7.x86_64 #1 SMP Fri Oct 18 17:15:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Docker 版本
Docker version 19.03.5, build 633a0ea
Mysql 5.7
环境安装
1. 拉取mysql 镜像
docker search mysql
docker pull centos/mysql-57-centos7
查看镜像
docker iamges
2. 创建挂载目录
mkdir -p /root/mysql57/conf /root/mysql57/data /root/mysql57/logs
conf目录用于挂载mysql容器的配置目录
data目录挂载mysql数据目录
logs目录挂载mysql日志目录
3. 复制配置文件
先运行一个没有挂载目录的mysql容器
docker run -p 3307:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
将该容器内的mysql配置目录copy到conf下
docker cp mysql57:/etc/mysql /root/mysql57/conf/
4. 重新运行容器,并加上挂载的目录
docker stop mysql57
docker rm mysql57
docker run -p 3306:3306 --name mysql57 --privileged=true -v /root/mysql57/conf/mysql:/etc/mysql -v /root/mysql57/data:/var/lib/mysql -v /root/mysql57/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1
-p 端口映射,宿主机端口:容器端口
–name 容器名称
–privileged 容器内root用户与宿主机root用户享用相同权限
-v 数据挂载 宿主机目录:容器目录
-e 添加参数 MYSQL_ROOT_PASSWORD 设定mysql root密码
-d 后台运行容器
5. 进入容器配置mysql
docker exec -it mysql57 bash
进入容器后,
mysql -uroot -p
执行, root用户远程登陆授权命令
grant all privileges on *.* to root@'%' identified by '123456';
flush privileges;
这样就可以通过主机地址访问mysql了
配置字符集:
在/root/mysql57/conf/mysql/conf.d下新建my.cnf文件(文件名不重要,重要得是以.cnf为后缀)
vim my.cnf
添加内容如下
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
[mysql]
default-character-set = utf8
[client]
default-character-set = utf8
重启mysql
docker restart mysql57
进入容器内,登陆mysql,用以下命令查看mysql的字符集是否修改
SHOW VARIABLES LIKE 'character%';
为什么要把配置文件放在/root/mysql57/conf/mysql/conf.d下呢?
我试过直接修改mysql下目录下的my.cnf,但是没起作用,于是就把它放在了/root/mysql57/conf/mysql/conf.d下,当然取其他名字也是可以的。原理就在于mysql 5.7.2下的conf.d中的cnf文件会覆盖默认配置
至此,docker 安装mysql完成!