步骤一: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默认区分大小写的(这个必须要加上,不然会报错)
步骤二:解决问题
这时候使用会报错,初始化的密码并没有用
docker 安装报错 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES)解决方法
解决:
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%';