步骤一:docker安装MySQL8
下载mysql8镜像
docker pull mysql:8
创建mysql容器
mkdir /root mkdir /root/mysql mkdir /root/mysql/log/ mkdir /root/mysql/conf/ mkdir /root/mysql/data/ touch /root/mysql/my.cnf
my.cnf添加如下内容: [mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 [client] default-character-set=utf8 [mysql] default-character-set=utf8
docker 运行命令
docker run -di -p 3306:3306 --privileged=true -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf/:/etc/mysql -v /root/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8 --lower-case-table-names=1
命令解释
-e MYSQL_ROOT_PASSWORD=root //mysql数据库密码设置为root
--privileged=true //容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
--lower-case-table-names=1 //忽略大小写,docker mysql默认区分大小写的(这个必须要加上,不然会报错)
步骤二:解决问题
这时候使用会报错,初始化的密码并没有用
解决:
1:vi my.cnf文件,加入下面的内容
[mysqld] skip-grant-tables
重启mysql服务。即可以mysql -u用户名 -p 登录进去。(注:docker需进入docker容器)
进入docker容器命令:
docker exec -it 容器id /bin/bash
2:更新root密码
select user,authentication_string from user; update user set authentication_string='' where user='root';
3:注释掉my.cnf 文件中的 skip-grant-tables
重新启动MySQL,并进入MySQL执行如下命令
alter user'root'@'%' IDENTIFIED BY 'Mysql@123'; alter user'root'@'localhost' IDENTIFIED BY 'Mysql@123'; flush privileges;
至此就差不多了
如果发现用mysql客户端SQLyog连接,报 连不上。
MYSQL 8.0内新增加mysql_native_password函数,通过更改这个函数密码来进行远程连接。更改ROOT用户的native_password密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY'Mysql@123';
执行完成。既可以连接了。
查看变量值:
SHOW VARIABLES LIKE 'lower%';