下载对应mysql版本的docker镜像包
docker pull mysql:5.7
当然为了安全也可以切换在非root用户下操作 su www
启动镜像容器
代码语言:shell复制docker run -p 3306:3306 --name mysql
-v /mydata/mysql/log:/var/log/mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7
报错
- 而后发现无法启动容器,一直是Exited 状态 无法
docker start
- 通过
docker logs [容器id]
查看相关信息 发现如下错误
2023-07-24 08:48:18 00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.42-1.el7 started.
2023-07-24 08:48:18 00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.r6ee7F88rL
mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
其实就是映射目录下的/etc/mysql/conf.d/
不存在
此时在宿主机对应位置创建对应目录即可 mkdir -p /mydata/mysql/conf/conf.d/
再次尝试启动 仍然有错误这里就不一一展示错误了,直接把对应目录和文件都建好
mkdir -p /mydata/mysql/conf/mysql.conf.d
初始配置文件
vi /mydata/mysql/conf/conf.d/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
再次运行docker容器的启动命令 便可以正常启动容器了
修改密码
根据 -e MYSQL_ROOT_PASSWORD=root
可知 初始的mysql账户密码就是 root/root
交互式进入mysql
docker exec -it mysql mysql -uroot -proot
替换为新密码new_password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
创建新用户
- 交互式进入mysql(输入新设置的密码)
docker exec -it mysql mysql -uroot -p
- 创建新用户
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
- 授予新用户对特定数据库的读写权限:
GRANT ALL PRIVILEGES ON your_database.* TO 'new_user'@'localhost';
- 刷新权限以使更改生效:
FLUSH PRIVILEGES;
- 退出MySQL交互式终端:
EXIT;
远程链接测试
curl ifconfig.me
获取本机外网地址
防火墙打开3306端口
使用mysql工具访问对应ip使用root用户或新建用户账户密码远程链接即可
参考地址
docker 安装 mysql