A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一、查看可用的 MySQL 版本
方式一:网页端访问 MySQL 镜像库地址:
https://hub.docker.com/_/mysql
方式二:我们还可以用命令来查看可用版本。
docker search mysql
看看效果图:
二、官网获取 MySQL 镜像
以下版本供您选择
# 拉取 mysql 5.7
docker pull mysql:5.7

# 拉取最新版mysql镜像,如果不写后面的版本号则会自动拉取最新版
docker pull mysql
这里以5.7版本为例。
docker pull mysql:5.7
第一次拉去,会比较久一点,需要去下载对应的镜像。
三、查看本地镜像
使用以下命令来查看是否已安装了 mysql
docker images
四、运行Mysql容器
安装完成后,我们可以使用以下命令来运行 mysql 容器:
  • 1、创建挂载目录
创建挂载目录,主要是方便修改配置文件达到方便控制的目的。
mkdir -p $HOME/docker/mysql57
是为了方便管理建的目录,主要是表示docker项目下放置的一些配置文件。mysql57表示应用名字
cd $HOME/docker/mysql57
  • 2、运行Mysql容器
方式一:不需要挂载目录(不推荐)
docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
方式二:需要挂载目录(推荐)
docker run -p 3306:3306 --name mysql57 \
-v $PWD/conf:/etc/mysql \
-v $PWD/logs:/var/log/mysql \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数说明
  • –name:容器名,此处命名为mysql57
  • -v :挂载目录
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:源镜像名,此处为 mysql:5.7并后台运行 后面为设置mysql的默认编码
3、选项执行,如果不需要mysql56,可以不需要执行。
创建目录
mkdir -p $HOME/docker/mysql56
进去该目录
cd $HOME/docker/mysql56
拉取镜像
docker pull mysql:5.6
mysql5.6 安装
docker run -p 3307:3306 --name mysql56 \
-v $PWD/conf:/etc/mysql \
-v $PWD/logs:/var/log/mysql \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.6 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
可能会遇到的问题,如果一开始没有执行拉取镜像的命令,会自动拉取镜像,然后默认已经创建了一个镜像mysql56,我们通过命令查找回来,然后启动即可。
查看所有容器
docker ps -a
删除容器
docker rm 容器id
启动容器
docker start 容器id
额外提供俩个快速命令
# 停止所有容器
docker stop $(docker ps -a -q)
# remove删除所有容器
$ docker rm $(docker ps -a -q)
五、安装成功
通过 docker ps 命令查看是否安装成功。
docker ps -a
容器状态的Up状态,表示容器正在运行,并且可以看到主机和容器的端口映射关系。
重启mysql容器
docker restart mysql57
查看mysql日志
docker logs -f mysql57
六、Mysql 测试
进入到mysql容器
docker exec -ti mysql57 /bin/bash
参数说明
  • -t 在容器里生产一个伪终端
  • -i 对容器内的标准输入 (STDIN) 进行交互
登陆到mysql服务器
方式一
mysql -h 127.0.0.1 -u root -p
方式二
mysql -u root -p123456
查询测试语句
use mysql;
SELECT VERSION(), CURRENT_DATE;
如果需要远程登录的,需要执行授权命令 1、直接让root也可以远程登陆(不建议)
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;
2、创建一个用户admin远程登陆(建议)
GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;
3、刷新权限
FLUSH PRIVILEGES;
4、查看用户
select host,user from user;
5、备份数据
$ docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /some/path/on/your/host/all-databases.sql
6、恢复数据
$ docker exec -i mysql57 sh -c 'exec mysql -uroot -p"123456"' < /some/path/on/your/host/all-databases.sql
七、其他配置
  • 1、only_full_group_by 问题
如果安装的版本是 5.7版本, 查询数据时出现如下错误
this is incompatible with sql_mode=only_full_group_by
可以使用使用下列方式解决
  • 2、查询 sql_mode
select @@sql_mode
结果如下
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 3、重置
删除其中的 ONLY_FULL_GROUP_BY配置,重新设置到 config-file.cnf中
[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

1 个回复

正序浏览
欢迎添加小优微信
DKA-2018
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马