Docker安装MySQL

Docker安装MySQL_第1张图片

MySQL 8.0

# docker 中下载 mysql (8.3.0)
可以尝试拉取:docker pull mysql:5.7.44

docker pull mysql (会拉取最新稳定版)

#启动并初始化密码
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456! -d mysql

#进入容器
docker exec -it mysql bash

#登录mysql
mysql -u root -p
录入密码:123456!

#进入到mysql内部,修改原密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456!';

#添加远程登录用户
CREATE USER 'humx'@'%' IDENTIFIED WITH mysql_native_password BY '123456!';

GRANT ALL PRIVILEGES ON *.* TO 'humx'@'%';

至此MySQL安装完成,但是本地直接使用mysql命令连接是不行的,应该mysql是安装在容器中,需要通过
navicat等工具远程连接即可;其他版本的安装,指定具体的mysql的镜像版本号就行;

也可以搜索其他版本:docker search mysql

迁移数据的错误记录

安装完后,想从MySQL5.7 迁移数据 到MySQL8.0 ,会报如下格式错误;

1、 Invalid default value for ‘created_at’

解决方案:这个错误通常出现于数据库表迁移或创建的过程中,是因为 ‘created_at’ 字段的默认值不符合数据库引擎的规定。在 MySQL 5.7 之后,数据库默认配置的 sql_mode 中包含了 NO_ZERO_IN_DATE 和 NO_ZERO_DATE 模式,这会导致对于日期字段的默认值要求更为严格。

select VERSION();
5.7.42-log

# (1)修改sql_mode
show variables like 'sql_mode' ;

test-data:STRICT_TRANS_TABLES


set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
#(2)修改出错的表的值对应的默认值

a.针对 created_at,修改后如下:
- `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '日志生成时间',
b.或者 deleted_at,login_time,默认值需要为空的情况,如下:
- `login_time` timestamp NULL DEFAULT NULL COMMENT '登录时间',
c.或者datetime和date类型的
- `expiration_date` date NOT NULL COMMENT '数据有效截止日期',
- `deleted_time` datetime DEFAULT NULL COMMENT '逻辑删除时间',

操作示例:

ALTER TABLE `gkb_admin_log`  MODIFY created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  NOT NULL COMMENT '日志生成时间';
ALTER TABLE `gkb_partner`  MODIFY service_starttime datetime DEFAULT NULL COMMENT '合同开始时间';


参考

  • https://hub.docker.com/_/mysql/tags

你可能感兴趣的:(MySQL,Docker,docker,mysql,容器)