当前位置:   article > 正文

Docker 部署 MySQL 数据库_docker怎么部署mysql

docker怎么部署mysql

Docker 与 docker-compose 安装这里不做介绍。

MySQL 镜像

  • 根据需要选择版本
# 5.7 版本
docker pull mysql:5.7
# 8.2 版本
docker pull mysql:8.2
  • 1
  • 2
  • 3
  • 4

创建缩主机目录

cd home
# 创建目录
mkdir mysql && cd mysql
# 存放数据库文件
mkdir data
# 存放数据库日志
mkdir logs
# 存放数据库配置
mkdir conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

my.cnf 配置文件

在缩主机 /home/mysql/conf 目录下创建 my.cnf

[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# MySQL监听端口
port=3306
# MySQL绑定IP
# bind_address=127.0.0.1

# 生成日志
general_log=1
general_log_file=/var/log/mysql/mysql.log

# 无论是否超时,未被索引的记录也会记录下来
log_queries_not_using_indexes=1
# 全局开启慢查询功能
slow_query_log=1
# 慢查询阈值(秒),SQL 执行超过这个阈值将被记录在日志中
long_query_time=1
# 慢查询仅记录扫描行数大于此参数的 SQL
min_examined_row_limit=500
# 指定慢查询日志存储文件的地址和文件名
slow_query_log_file=/var/log/mysql/slow.log

# 错误日志
log_error=/var/log/mysql/error.log
log_error_verbosity = 3

# 取消 ONLY_FULL_GROUP_BY
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 开启定时事件
event_scheduler=1
# 表名大小写不敏感
lower_case_table_names=1
# 设置字符集
character_set_server=utf8mb4
collation_server=utf8mb4_bin

# 默认使用的存储引擎
default_storage_engine=InnoDB

[client]
socket=/var/run/mysqld/mysqld.sock

default_character_set=utf8mb4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

开启 binlog 文件

注: Docker 容器中 不带mysqlbinlog 的,可以从已安装 MySQL 的Linux服务器上获取。

[mysqld]
# binlog功能
log_bin=/var/lib/mysql/mysql-bin
# binlog 文件格式
binlog_format=ROW
# 表无论有没有主键约束或者唯一约束binlog都会记录所有前后镜像
binlog_row_image=FULL
# binlog 文件保留时间7天(默认0天)
expire_logs_days=7
# binlog 单个文件的最大值大小(默认1G)
max_binlog_size=512m
# 开启 binlog 后需要创建 function 或 procedure 时要开启
log_bin_trust_function_creators=1
# 服务id,以区分主库和备库
server-id=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
-- 显示是否开启 binlog
show variables like 'log_bin%';
-- 显示 binlog 文件格式
show variables like 'binlog_format%';
-- 显示 binlog 文件保留时间
show variables like 'expire_logs_days%';
-- 显示 binlog 单个文件的最大值大小
show variables like 'max_binlog_size%';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
-- 显示 binlog 事件
show binlog events;
-- 显示全部 binlog 文件列表
show binary logs;
show master logs;
-- 显示最新 binlog 文件编号以及最后一个操作事件结束点(Position)值
show master status;
-- 结束当前 binlog 文件并生成新的 binlog 文件
flush logs;
-- 重置 binlog 文件(清空全部 biglog 文件)
reset master;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

注: binlog 默认存放在容器内 /var/lib/mysql 数据库文件目录。

mysqlbinlog

  • 查看 Linux 环境下 mysqlbinlog 目录
# /usr/bin/mysqlbinlog
whereis mysqlbinlog
  • 1
  • 2
  • 将 mysqlbinlog 文件复制到容器内的 /usr/bin 目录
docker cp mysqlbinlog mysql:/usr/bin
# 进入容器内
docker exec -it mysql /bin/bash
# 在容器内为 mysqlbinlog 添加权限
chmod +x /usr/bin/mysqlbinlog
  • 1
  • 2
  • 3
  • 4
  • 5
  • 使用 mysqlbinlog 生成 sql 文件
# 进入容器内执行
mysqlbinlog --no-defaults \
--base64-output=DECODE-ROWS \
-v /var/lib/mysql/mysql-bin.000001 >/tmp/binlog_000001.sql
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

docker-compose.yml

services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      # root 账号密码
      MYSQL_ROOT_PASSWORD: '4NuMDwIzp05BdKp7Bdmf'
      MYSQL_USER: 'Test'
      MYSQL_PASSWORD: 'MySql123456'
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/mysql/data:/var/lib/mysql
      - /home/mysql/conf:/etc/mysql/conf.d
      - /home/mysql/logs:/var/log/mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
docker-compose up -d mysql
# 查询日志是否启动成功
docker logs -f mysql
  • 1
  • 2
  • 3

给 Test 账号添加权限

登录 root 账号操作。

-- 查询用户在数据库中拥有的所有权限,包括函数权限
SHOW GRANTS FOR 'Test'@'%';
-- 添加所有权限
GRANT ALL PRIVILEGES ON *.* TO 'Test'@'%' WITH GRANT OPTION;
  • 1
  • 2
  • 3
  • 4
-- 查询数据库版本
select version();
-- 查询数据库字符集
show variables like 'character%';
-- 查看事件计划是否开启
SHOW VARIABLES LIKE '%event_sche%';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1008558
推荐阅读
相关标签
  

闽ICP备14008679号