以mysql 5.7 为例:
1.下载镜像 docker pull mysql:5.7
2.创建mysql容器实例
docker run -d -p 3306:3306 --privileged=true -v E:\docker\mysql\log:/var/log/mysql -v E:\docker\mysql\data:/var/lib/mysql -v E:\docker\mysql\conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
docker run
-d 以后台运行方式创建容器实例
-p 3306:3306 端口
--privileged=true //扩大容器的权限,参考docker 容器数据卷
-v E:\docker\mysql\log:/var/log/mysql 日志映射到主机的mysql\log下面
-v E:\docker\mysql\data:/var/lib/mysql 数据映射到主机的mysql\data下面
-v E:\docker\mysql\conf:/etc/mysql/conf.d 配置文件映射到主机的mysql\conf下面
-e MYSQL_ROOT_PASSWORD=123456 设置root用户密码
--name mysql 取名
mysql:5.7 镜像版本
创建数据卷后出现问题容易恢复,相当于备份
3.修改默认字符集为utf8,容器实例中的mysql默认字符集是latinl
docker安装完mysql并创建容器实例后,建议先查看字符集,确认是utf8后再进行操作,要在容器实例上查看。
show variables like 'character%'; mysql查看字符集
在宿主机 E:\docker\mysql\conf 文件夹下新建文件 my.conf ,输入内容:
[client]
default_character_set=utf8
[mysqld]
character-set-server=utf8
collation_server=utf8_general_ci
character_set_server=utf8
保存后重启mysql容器:docker restart mysql
4.登录
docker exec -it mysql /bin/bash
mysql -u root -p
输入密码登录后有可能报错如下:
[Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.
忽略全局可写配置文件“/etc/mysql/conf.d/my.cnf”
这个警告出现的原因是 MySQL 发现挂载的配置文件 /etc/mysql/conf.d/my.cnf 具有全局可写权限,因此忽略了该文件。MySQL 引擎非常注重安全性和数据完整性。如果配置文件具有全局可写权限,任何用户都可以修改该文件,包括恶意用户。这可能导致潜在的安全风险和数据损坏。为了提高安全性,当 MySQL 检测到挂载的配置文件具有全局可写权限时,它会发出警告并忽略该文件。这样做是为了确保只有授权的用户能够修改配置文件并对 MySQL 进行更改。
windows系统下解决方案:
右键my.cnf文件,选择属性,修改属性为只读,然后重启登录即可
5.查看字符集
docker登录mysql终端,输入命令 show variables like 'character%';
6.若不小心删除了mysql容器实例,重新执行创建实例的操作,并映射之前的本机地址,数据自动恢复。
docker run -d -p 3306:3306 --privileged=true -v E:\docker\mysql\log:/var/log/mysql -v E:\docker\mysql\data:/var/lib/mysql -v E:\docker\mysql\conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
从上面的图片可以看出,删除mysql容器实例后,重新创建实例并映射至之前的主机地址,数据会自动恢复 。
。