下载MySQL
docker pull mysql:5.7.32
版本查询: https://hub.docker.com/_/mysql?tab=tags&page=1
创建映射目录
创建目录,用于宿主机与容器的映射,以便将数据保存在宿主机,而不是容器中。
- /usr/local/docker/mysql/conf,配置文件
- /usr/local/docker/mysql/logs,日志文件
- /usr/local/docker/mysql/data,数据文件
自定义MySQL配置文件
在/usr/local/docker/mysql/conf目录下创建文件:my.cnf。添加内容
[mysql]
# 客户端默认字符集
default-character-set=utf8mb4
[mysqld]
#服务端使用的字符集
character-set-server=utf8mb4
init_connect='SET NAMES utf8mb4'
# 允许的最大连接数
max-connections=200
sql_mode ='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 每个数据表使用一个文件
innodb_file_per_table=1
配置根据自己实际情况设置
启动&进入容器
启动容器
docker run -itd \
--name mysql \
-p 3306:3306 \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7.32
记得写mysql镜像的tag(这里的版本是5.7.32),不然docker会自动下载最新的mysql:(
进入容器&登录mysql
docker exec -it mysql /bin/bash
进入容器后,使用设置的密码(123456)登录MySQL并操作
mysql -uroot -p
测试配置是否生效
# 创建数据库
create database onlinecourse default charset utf8mb4;
use onlinecourse;
# 创建测试表
create table t_user (
`id` char(32) not null,
`cn_name` varchar(100) default null,
primary key (`id`))
engine innodb;
可在/usr/local/docker/mysql/data/onlinecourse目录看到新建表对应的文件:t_user.frm, t_user.ibd
宿主机登录mysql
前提是宿主机可执行mysql命令。
mysql -uroot -p -h172.17.0.1
-h:指定MySQL容器的ip地址,这个172.17.0.1是docker虚拟网卡的IP。
通常不需要设置就可以在宿主机使用root账号登录容器中的MySQL
常见问题
- 现象:宿主机无法登录
- 解决方案:登录MySQL容器后,登录mysql,添加可远程访问的账户
grant all privileges on *.* to 'akio'@'%' identified by '123321';
flush privileges;
- 重新在宿主机登录
mysql -uakio -p -h172.17.0.1