docker-mysql的部署

2023-07-25 11:05:24 浏览数 (1)

下载对应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] 查看相关信息 发现如下错误
代码语言:shell复制
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

代码语言:txt复制
[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';

创建新用户

  1. 交互式进入mysql(输入新设置的密码) docker exec -it mysql mysql -uroot -p
  2. 创建新用户 CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
  3. 授予新用户对特定数据库的读写权限: GRANT ALL PRIVILEGES ON your_database.* TO 'new_user'@'localhost';
  4. 刷新权限以使更改生效: FLUSH PRIVILEGES;
  5. 退出MySQL交互式终端: EXIT;

远程链接测试

curl ifconfig.me 获取本机外网地址

防火墙打开3306端口

使用mysql工具访问对应ip使用root用户或新建用户账户密码远程链接即可

参考地址

docker 安装 mysql

0 人点赞