文章目录
- 1.docker仓库找到需要的镜像版本
- 2.安装Mysql镜像
- 3.创建mysql配置文件
- 4.创建mysql容器并运行
- 5.建立软连接
- 6.开放3306端口
- 7.登录mysql
- 8.修改mysql密码
- 9.查看mysql日志
- 10.重启mysql
- 10.外部如何访问mysql
1.docker仓库找到需要的镜像版本
镜像仓库
2.安装Mysql镜像
找到所要安装的镜像版本,复制命令
输入命令,下载Mysql镜像
命令 | 作用 |
---|---|
docker pull mysql:latest | 拉取最新的mysql镜像 |
docker pull mysql:XXX | 拉取版本号为XXX的mysql镜像 |
镜像拉取成功后,输入 docker images 查看镜像是否存在
查看mysql latest最新版本,具体是哪个版本?
命令 | 作用 |
---|---|
docker image inspect 镜像ID | inspect 显示一个或多个图像的详细信息 |
3.创建mysql配置文件
- 进入mysql 配置文件目录
mkdir -p /usr/local/mysql/conf
cd /usr/local/mysql/conf
- 更改用户和组为polkitd input , 不增加以下命令,会出现以下错误
chown -R polkitd:input /usr/local/mysql/
- vim my.cnf 创建mysql配置,复制下面文件内容
[mysqld]
# MySQL 用户名,指定运行 MySQL 服务的系统用户为 "mysql"。
user=mysql
# 禁用 MySQL 的 DNS 反向解析功能,提高数据库连接性能
skip-name-resolve
# 允许最大连接数
max_connections=1024
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8mb4
character-set-server=utf8mb4
# 设置排序规则为 utf8mb4_general_ci,大小写不敏感的排序规则
collation-server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 使用“mysql_native_password”插件认证
authentication_policy=mysql_native_password
#是否对sql语句大小写敏感,1表示不敏感 注意此参数在8.0版本后必须在初始化数据库之前配置,即初始化后不允许修改此值
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭 ,导致数据库丢失
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 28800000
# MySQL 连接闲置超过一定时间后将会被强行关闭,避免数据库丢失。设置为 28800000 毫秒(8 小时)。
wait_timeout = 28800000
#导出
secure_file_priv=/var/lib/mysql-files
# 启用二进制日志功能,用于记录数据库更改, 默认存储在 /var/lib/mysql, 并指定前缀名 mysql-bin
log-bin = mysql-bin
# binlog 文件的过期时间
binlog_expire_logs_seconds=2592000
# SQL 模式配置,包含多个选项,用逗号分隔。
# - STRICT_TRANS_TABLES:严格模式,对于插入错误或警告的值,拒绝而不是警告,包括转换问题。
# - NO_ZERO_IN_DATE:禁止插入零日期,例如 '0000-00-00'。
# - NO_ZERO_DATE:禁止插入零日期,例如 '0000-00-00'。
# - ERROR_FOR_DIVISION_BY_ZERO:在发生除以零的操作时抛出错误,而不是产生 NULL 值。
# - NO_ENGINE_SUBSTITUTION:如果指定的存储引擎不可用,不要自动替换为其他可用的存储引擎。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#时区
default-time_zone = '+8:00'
#日志时区
log_timestamps=SYSTEM
# 指定允许的 TLS 版本,这里设置为 TLSv1.2 和 TLSv1.3
tls_version=TLSv1.2,TLSv1.3
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#任何给定 MySQL 用户帐户允许的最大同时连接数。值 0(默认值)表示 “没有限制。”
#max_user_connections=0
#SELECT语句 的执行超时 ,以毫秒为单位。如果值为 0,则不启用超时
#max_execution_time=5000
#查询返回数据行数最大值,超过此值则终止查询默认最大值18446744073709551615
#max_join_size=10000
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
#lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
#tmp_table_size = 64M
#max_heap_table_size = 64M
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
4.创建mysql容器并运行
docker run \
--restart=always \
--privileged=true \
--name mysql \
-p 3306:3306 \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /usr/local/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/mysql/mysqld:/var/run/mysqld \
-e MYSQL_ROOT_PASSWORD=abc*@*ABC \
-e TZ=Asia/Shanghai \
-d mysql
命令解析
命令 | 作用 |
---|---|
docker run | 创建并启动一个容器 |
–name mysql | 将容器取名为mysql |
–privileged=true \ | 开启目录挂载权限) |
-d | 设置后台运行 |
-p 3306:3306 | 映射端口(宿主机端口:容器端口) |
–restart=always \ | 自启动 |
-v /usr/local/mysql/log:/var/log/mysql | 将日志文件夹挂载到宿主机(宿主机路径:容器路径) |
-v /usr/local/mysql/data:/var/lib/mysql | 将mysql储存文件夹挂载到主机(宿主机路径:容器路径) |
-v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf | 将配置文件夹挂载到主机(宿主机路径:容器路径) |
-e TZ=Asia/Shanghai | 指定时区 |
-e MYSQL_ROOT_PASSWORD=123456 | 设置mysql密码 |
mysql:latest | 指定以哪个镜像创建容器(镜像名或镜像ID) |
查看mysql是否启动
docker ps -a
5.建立软连接
本地主机连接容器的mysql时,需要查到 /var/lib/mysql/mysql.sock。我们启动mysql容器后,在/usr/local/mysql/mysqld目录下有一个mysqld.sock。我们要把这个文件链接到本地主机的var/lib/myql目录中。
ln -s /usr/local/mysql/mysqld/mysqld.sock /var/lib/mysql/mysql.sock
6.开放3306端口
执行完以上操作,通过工具即可连接mysql了
7.登录mysql
docker exec -it mysql bash
输入用户名密码进入mysql
mysql -uroot -proot
8.修改mysql密码
查看密码加密规则
use mysql;
SELECT Host, User, plugin from user;
修改密码加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY` 'abc*@*ABC';
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'abc*@*ABC';
刷新权限,使修改的密码生效
FLUSH PRIVILEGES;
9.查看mysql日志
# mysql为镜像名称
docker logs mysql
10.重启mysql
修改完成配置文件后,重启mysql ,没有启动过,不需要执行下面的命令
docker restart mysql
10.外部如何访问mysql
可以看到root用户的Host是localhost,代表只能当前主机访问,外部是不可以访问的
- 创建用户
CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'abc*@*ABC';
- 授权
grant all privileges on *.* to 'root'@'%' ;
- 刷新权限
FLUSH PRIVILEGES;
- 重新查看用户表
SELECT Host, User, plugin from user;