Docker(二)| 创建MySQL容器并持久化
- 下载
mysql
镜像,5.7版本即可。命令:
docker pull mysql:5.7
- 创建
mysql
容器并设置挂载持久化和密码root
,命令:
docker run -d \
-p 3306:3306 \
--name mysql \
-v /dfdt/data/mysql:/data/mysql \
-v /dfdt/data/mysql/conf:/etc/mysql/conf.d \
-v /dfdt/data/mysql/logs:/logs \
-v /dfdt/data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
- \:斜杠表示换行
- -d:守护进程
- -p 3306:3306:映射主机和容器之间的端口
- –name mysql:容器别名
- -v /data/mysql:/data/mysql:挂载/共享主机上的
/data/mysql
,方便持久化,不至于每次停止mysql
容器都丢失数据 - -e MYSQL_ROOT_PASSWORD=root:设置数据库的密码为:
root
- 进入
mysql
容器,命令
docker exec -it mysql bash
- 设置
utf8
编码格式
登录mysql
,命令:
mysql -uroot -p
再输入密码(由于前面初始化设置了,密码就是:root
)
查看mysql字符集
,命令:
show variables like 'character_set_%';
如果是latin1
编码格式则需要设置编码格式:
如果是以下的utf8
则不需要设置编码格式:(不设置编码格式则跳过下面步骤,直接看第8步)
退出mysql
,命令:exit
设置编码格式有两种方式:
- 1.使用
echo
命令直接写入/etc/mysql/my.cnf
文件(前提是确保文件存在且里面的参数不冲突,msyql5.7
的版本一般都是空的,直接用就行)
echo -e '[client]\ndefault-character-set=utf8\n[mysqld]\ncharacter-set-server=utf8\ncollation-server=utf8_general_ci' > /etc/mysql/my.cnf
- 2.vim写入方式
设置utf8
编码,执行命令:
vi /etc/mysql/my.cnf
然后找到 /etc/mysql/my.cnf
文件,进入编辑,加入下面的配置,如果没有和下面一样的则加上,有则修改
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
如果vim命令不能用,提示:bash: vim: command not found
参考:Docker 问题 | 编辑文件出现 bash: vi: command not found.
- 重启
mysql
,输入下面命令:
service mysql restart
如果一直出现点点点的情况,则Ctrl+C
,再Ctrl+D
退出容器,如果想退出容器但又不想让容器停止,使用Ctrl+P+Q
即可
- 这时我们已经回到宿主机上,我们需要再重启
mysql
容器:
docker stop mysql
docker start mysql
或者
docker restart mysql
- 再进入
mysql
容器,并登录mysql
查看编码是否改变,参考第4步即可 - 导入
sql 脚本
,在外面我有个smart_remmend.sql 的脚本
,里面包含创建表结果和导入数据。
sql脚本创建:通过Navicat,选中数据库—>右键—>选择转储SQL文件—>结构和数据
通过Xftp
软件放入上面第二步的主机挂载/共享
的目录/data/mysql
下,然后切换到挂载/目录/data/mysql
下
执行命令:
docker cp smart_recommend.sql mysql:/data/mysql
意思是将主机上的smart_recommend.sql文件复制到mysql容器下的/data/mysql目录,因为是挂载/共享目录
导入如果出现这个:data too long for column ‘address’ at row 1
就需要设置编码,这个是因为字段中的值包含中文,重新查看第4步
- 登录
mysql
,命令:
mysql -uroot -p
再输入密码(由于前面初始化设置了,密码就是:root
)
- 执行sql脚本(需要先指定数据库才能执行脚本)
首先创建名字为smart_recommend
的数据库,如果脚本中已经有创建数据库名称的sql命令,直接运行sql脚本即可命令:
create database smart_recommend;
指定smart_recommend
数据库,命令:
use smart_recommend;
执行sql脚本
,命令:(后面是sql脚本在容器中的路径)
source /data/mysql/smart_recommend.sql
- 在Windows上用Navicat登录 mysql 容器
查看虚拟机ip命令:ip a
端口号:3306
得到ip和端口,再使用用户名:root
,密码:root
登录即可
登录成功后如果看到数据库中的字段里的中文值出现乱码,参考第4步
注意:
如果测试是否持久化,将上面步骤走完后,将mysql容器停止:docker stop mysql
,再启动mysql容器:docker start mysql
,查看上面导入的数据是否存在即可