Docker容器创建mysql实列

拉取mysql镜像

docker pull mysql:5.7

创建用于挂载的目录

mkdir -p /data/mysql/var /data/mysql/conf /data/mysql/data

使用镜像创建容器

#将容器中MySQL的3306端口映射到本地的3307端口,并设置登录密码为:123456
docker run --name mysql5.7 --restart=always  -p 3307:3306  -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

注意:时间要同步 -v /etc/localtime:/etc/localtime

命令解析

--name:容器名
--p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器

--restart=always 跟随docker启动
--privileged=true 容器root用户享有主机root用户权限
-v 映射主机路径到容器
-e MYSQL_ROOT_PASSWORD=root 设置root用户密码
-d 后台启动

进入容器

docker start 容器ID
docker exec -it 容器名字 /bin/bash

[root@dc01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96a49c6e7235 mysql:5.7 "docker-entrypoint.s…" 4 weeks ago Up 2 minutes 0.0.0.0:3306->3306/tcp mysql5.7
fa56f865bd26 nginx:latest "nginx -g 'daemon of…" 4 weeks ago Up 16 minutes 0.0.0.0:80->80/tcp vigilant_swirles

[root@dc01 ~]# docker exec -it 96a49c6e7235 /bin/bash

root@96a49c6e7235:/# mysql -uroot -p123456

在这里插入图片描述

常用命令

进入容器

$ docker exec -it mysql bash

查看日志

$ docker logs -f mysql

备份数据

$ docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"123456-abc"' > /some/path/on/your/host/all-databases.sql

恢复数据

$ docker exec -i mysql sh -c 'exec mysql -uroot -p"123456-abc"' < /some/path/on/your/host/all-datab

问题

首先按照上面安装完成否则目录无效

表名区分大小写

在宿主机上该目录下:/data/mysql/conf创建一个mysql.cnf
/data/mysql/conf/mysql.cnf添加如下内容

[mysqld]
lower_case_table_names=1

重启mysql

docker restart mysql5.7

解决dockerMYSQL5.7版本sql_mode=only_full_group_by问题

# 进入docker配置文件的挂载目录
cd /data/mysql/conf
# 修改mysql.cnf文件
vim mysql.cnf
# 添加以下内容
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

附录

配置文件

[mysqld]
# 表名不区分大小写
lower_case_table_names=1 
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

你可能感兴趣的:(虚拟机,docker,docker,mysql)