大家好, 后面的就不是关于 Mac 专有的内容, 基本是跟 Java 环境, 基础技术方面有关. 所以这个教程对于在 Linux 系统还是 macOS 都是通用的, 不用担心.
上一篇, 我们安装好对应的 Docker 之后, 感受到了它的便利. 接下来我们来安装 MySQL 吧, 它在开发中经常需要用到.
MySQL 是世界上最受欢迎的开源数据库. 凭借其可靠性, 易用性和性能, MySQL 已成为 web 应用程序的数据库优先选择.
说个痛点, 如果是在 Windows, 不可想像, 你要安装不同版本的 MySQL 进行测试, 而且不想让他们版本之间有什么交集. 比如说, 公司用着稳定版本的 5.6, 但是目前市面上比较新的课程都采用 mysql5.7 进行教学, 想尝尝鲜. 这安装简直是一个噩梦, 有了 docker, 轻松就能解决这个问题, 端口和配置也不会冲突.
如果是 CentOS 安装还好点, 如果是通过源码编译安装还是得折腾一会的. 所以接下来, 我们一起通过 docker 来安装 MySQL.
一, 查看可用的 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
涉及比较深的部分, 如果有机会更新 MySQL 方面的教程, 再讲讲.
总结
1, 一句命令即可完成 MySQL 的安装, 方便快捷.
2, 多实例, 不同端口相互之间不影响.
来源: https://www.cnblogs.com/liuhongfeng/p/12515290.html