1. mysql
拉取指定版本镜像
docker pull mysql:5.7;
构建容器运行
- 映射目录是为了防止数据丢失,也称为持久化
docker run -itd --name 自定义名字 -p 3306:3306 -v /windows盘符/指定的文件夹路径:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7;
# 实际测试最后加密码设置无效,都是root
- linux参考命令
docker run -itd --name dmysql -p 3306:3306 -v /DockerShare/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
- windows参考命令
docker run -itd --name dmysql -p 3306:3306 -v E:/DockerShare/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
2.配置对外访问
#进入容器
docker exec -it dmysql bash;
#开始验证权限
mysql -u root -p
#输入密码后回车(可能不要密码)
root
#设置本地访问密码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
#设置外网密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '999999' WITH GRANT OPTION;
# 刷新权限
flush privileges;
3.mysql配置sql mode(连接工具中使用即可)
- 不配置的话,使用group by 会有问题。。。。
查看sqlmode
(和普通sql查询语句使用方式一样)
# 查看sql mode
select @@GLOBAL.sql_mode;
# 能看到sql mode了
show variables like '%sql_mode';
修改sqlmode
#只影响后来创建的数据库操作和查询
set @@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
#在当前数据库使用,影响当前查询的数据库
SET sql_mode ="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";