Docker ( 三 ) 安装 MySQL

该篇博客详细介绍了如何使用Docker安装和配置MySQL,包括拉取镜像、启动容器、异常处理、配置文件创建及修改、容器交互与测试,以及外部连接测试。在启动容器时,特别注意了数据持久化和端口映射,并处理了可能出现的日志错误。最后,还展示了如何设置远程访问权限和字符集。
摘要由CSDN通过智能技术生成

6.2.安装 MySQL

6.2.1.拉取镜像

6.2.1.1.搜索查看可用的mysql镜像
docker search mysql
6.2.1.2.拉取最新版本的mysql镜像
 docker pull mysql:latest
6.2.1.3.查看镜像是否已经有mysql
docker images|grep mysql

6.2.2.启动容器

6.2.2.1.启动容器实例

启动同时设置名字以及root密码,端口号等

docker run -d -p 3306:3306 --name mysql  \
-v /mydata/mysql/log:/var/log/mysql  \
-v /mydata/mysql/data:/var/lib/mysql  \
-v /mydata/mysql/mysql-files:/var/lib/mysql-files  \
-v /mydata/mysql/conf:/etc/mysql  \
-e MYSQL_ROOT_PASSWORD=root  \
mysql:latest

-d : 以后台方式运行并且返回ID,启动守护进程式容器
-p 3306:3306 : 容器与主机映射端口为, 3306(主机端口,即外部连接mysql使用的端口号): 3306(容器端口)
–name mysql : 容器运行后的名称
-v /mydata/mysql/log:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /mydata/mysql/log目录下
-v /mydata/mysql/data:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /mydata/mysql/data目录下 -v /mydata/mysql/mysql-files:/var/lib/mysql-files:将容器/var/lib/mysql-files目录下的数据,备份到主机的 /mydata/mysql/mysql-files目录下
-v /mydata/mysql/conf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 /mydata/mysql/conf目录下
-e MYSQL_ROOT_PASSWORD=root 设置当前mysql实例的密码为root
mysql:latest 需要运行的容器名称以及版本号(根据 images 对应版本)

通过此处-v 命令备份后,就算当前mysql容器实例被删除,那么再次重启mysql容器后,数据将会自动从主机加载到容器当中

6.2.2.2.测试容器是否启动
docker ps | grep mysql

如果 没有查询结果, 可能是没有启动成功, 改为下面的指令

docker ps -a

可以列出全部的容器

如果 容器的状态为 Up 表示容器成功启动, 而如果是 Exited表示出现异常

6.2.2.3.异常情况

出现启动异常, 可以通过下列指令查看日志

docker logs 容器ID 
异常 1 :
2022-12-21 16:08:19+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
2022-12-21 16:08:19+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.LMAMSBlxII
        mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 2 - No such file or directory)
mysqld: [ERROR] Stopped processing the 'includedir' directive in file /etc/my.cnf at line 36.
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

可能原因 : 版本不对导致文件结构不对( 有可能是 docker 没有使用关联加速镜像站原因)

解决办法 :

先将原容器删除

docker rm 容器ID 

再将 启动指令修改成下面方式 , 重新启动容器

docker run -d -p 3306:3306 --name mysql  \
-v /mydata/mysql/log:/var/log/mysql  \
-v /mydata/mysql/data:/var/lib/mysql  \
-v /mydata/mysql/mysql-files:/var/lib/mysql-files  \
-v /mydata/mysql/conf:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=root  \
mysql:latest
异常 2 :
2022-12-21 15:59:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2022-12-21 15:59:24+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-12-21 15:59:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2022-12-21T15:59:24.998195Z 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
2022-12-21T15:59:24.998226Z 0 [ERROR] [MY-010119] [Server] Aborting

如果 启动 指令 没有 -v /mydata/mysql/mysql-files:/var/lib/mysql-files 就会报上面的异常

6.2.3.添加配置文件

切换到上述命令配置的主机/mysqldata/mysql/conf目录下

 cd /mydata/mysql/conf

创建 my.cnf文件

touch my.cnf

使用vi命令对 my.cnf文件添加如下内容,在docker中安装的mysql默认字符集是latin1,需要改成utf8

[mysqld]
collation_server=UTF8MB4_general_ci
character-set-server=UTF8MB4
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=UTF8MB4

[mysql]
default-character-set=UTF8MB4

按esc, 输入 :wq,保存退出

重启mysql容器实例,让刚才的配置文件生效

docker restart  mysql

6.2.4.查看运行的容器

6.2.4.1.进入交互模式
docker exec -it mysql /bin/bash
6.2.4.2.配置mysql

以下操作可以不是必要的

在交互模式下输入, 启动 mysql

mysql -h localhost -u root 

进入mysql 模式 , 设置 root 账号密码

alter user 'root'@'localhost' identified with mysql_native_password by 'root';

退出 , 密码登录 , 输入 新设置的密码 root

exit
mysql -u root -p

再设置可以远程可以访问的账号密码

create user 'yuancheng'@'%' identified with mysql_native_password by 'yuancheng';
grant all privileges on *.* to 'yuancheng'@'%';

退出

6.2.5.外部测试

使用外部工具连接
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值