一、简单版安装MySQL
1、安装MySQL 5.7
docker pull mysql:5.7
2、使用mysql镜像创建容器实例
- 查看宿主机是否安装了mysql占用了3306端口
ps -ef | grep mysql
可知宿主机没有安装mysql,3306端口未被占用
- 运行实例
# 使用-e配置环境变量 MYSQL_ROOT_PASSWORD(mysql中root用户的密码)
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- 查看是否启动成功
docker ps
- 进入容器实例
docker exec -it de2d23d8d9c9 /bin/bash
- 进入数据库测试
mysql -uroot -p
show databases;
建数据库、建表、插入数据
# 创建db01数据库
create database db01;
# 进入db01数据库
use db01;
# 创建表t1
create table t1(id int, name varchar(20));
# 插入英文正常插入
insert into t1 values(1,'zhangsan');
# 查看数据表
select * from t1;
SQLyog连接数据库,插入数据
查看
3、插入中文报错
启动docker容器后,可以正常的连接、创建数据库,创建表,插入数据。但是插入中文则会报错。
# 插入中文报错
insert into t1 values(3, '王五');
原因
docker上默认字符集编码问题
查看字符集编码
在mysql中使用以下命令查看数据库字符集
show variables like 'character%';
可知一些字符集是latin1
字符集,所以会报错。
4、没有容器卷映射,数据易丢失
启动容器时没有配置容器卷映射,当容器被删,数据无法找回。危险危险危险。
二、实战版安装MySQL
1、启动 Mysql 容器,并配置容器卷映射
docker run -d -p 3306:3306 \
--privileged=true \
-v /fanhe/mysql/log:/var/log/mysql \
-v /fanhe/mysql/data:/var/lib/mysql \
-v /fanhe/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql:5.7
-d:后台运行
-p 3306:3306 端口映射
--privileged=true 容器数据卷权限开启
-v /fanhe/mysql/log:/var/log/mysql \ 宿主机:mysql容器 日志映射
-v /fanhe/mysql/data:/var/lib/mysql \ 宿主机:mysql容器 数据映射
-v /fanhemysql/conf:/etc/mysql/conf.d \ 宿主机:mysql容器 配置映射
-e MYSQL_ROOT_PASSWORD=123456 \ Mysql数据库密码
--name mysql \ 数据库名字
mysql:5.7 数据库版本
2、新建my.cnf
通过容器卷同步给mysql实例,解决中文乱码问题
进入配置文件/fanhe/mysql/conf目录,新建my.cnf并写入
cd /fanhe/mysql/conf
vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
Character_set_server = utf8
3、重启mysql容器
- 重启Mysql容器实例使得容器重新加载配置文件
docker restart mysql
- 查看数据库字符集
docker exec -it mysql /bin/bash
4、测试
# 创建db01数据库
create database db01;
# 进入db01数据库
use db01;
# 创建表t1
create table t1(id int, name varchar(20));
# 插入英文
insert into t1 values(1,'zhangsan');
# 查看数据表
select * from t1;
# 插入中文
insert into t1 values(2, '王五');
中文正常插入
5、删除Mysql容器,新建容器,数据依旧同步
- 删除Mysql容器实例
docker ps
docker rm -f Mysql容器ID
- 新建Mysql容器实例
docker run -d -p 3306:3306 \
--privileged=true \
-v /fanhe/mysql/log:/var/log/mysql \
-v /fanhe/mysql/data:/var/lib/mysql \
-v /fanhe/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql:5.7
命令和前面新建时一模一样
- 进入Mysql容器查看数据是否存在
docker exec -it mysql /bin/bash
mysql -uroot -p
use db01;
select * from t1;
新建Mysql容器实例数据依旧存在
6、结论
- docker安装完Mysql并创建容器实例后,先修改字符集编码后再新建mysql数据库等一系列数据库操作。
- 使用容器卷映射之后,即便容器删除,因为在宿主机保存有数据,新建容器后,数据依旧存能够同步,保证了数据不丢失。