安装
下拉镜像
docker pull mysql:8.0.20
查看镜像
docker images
出现了就是下载成功
启动镜像
docker run -d -p 3306:3306 --restart=always \
-v /docker/mysql/logs:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql \
-v /docker/mysql/files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql mysql:8.0.20
-v /docker/mysql/files:/var/lib/mysql-files \
如果没有添加这行,启动会报错
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2023-12-16T06:41:05.834410Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
[root@maoslv conf.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fed5f6c226a mysql:8.0.20 "docker-entrypoint.s…" 25 minutes ago Up 10 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
这样就启动成功了
问题
连接数据库的时候出现错误
再三确认密码没有错,进入容器内部也是同样的错误
[root@maoslv conf.d]# docker exec -it mysql /bin/bash
root@4fed5f6c226a:/# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决办法
有映射的从宿主机改也可以,我这边直接在容器内部改
找到/etc/mysql/conf.d/my.cnf(没有的话自己创建一个)
在文件里面加上这一句话,跳过密码登录
skip-grant-tables
然后出去重启MySQL
docker restart mysql
重启完重新进入MySQL内部
root@4fed5f6c226a:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.20 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
这样就可以登录进来
修改密码前记得刷新一下权限,不然可能会提示修改密码错误
flush privileges; #刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; #修改密码
flush privileges; #修改完记得再刷新一下
记得设置运行root远程连接
use mysql #切换数据库
update user set host='%' where user='root'; #设置远程连接
flush privileges; #刷新一下权限
退出MySQL的时候记得去/etc/mysql/conf.d/my.cnf中skip-grant-tables删除!!!
退出MySQL的时候记得去/etc/mysql/conf.d/my.cnf中skip-grant-tables删除!!!
退出MySQL的时候记得去/etc/mysql/conf.d/my.cnf中skip-grant-tables删除!!!
重启MySQL
docker restart mysql