Docker 部署 MySQL 数据库

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

MySQL 镜像

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

创建缩主机目录

cd home
# 创建目录
mkdir mysql && cd mysql
# 存放数据库文件
mkdir data
# 存放数据库日志
mkdir logs
# 存放数据库配置
mkdir conf

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

开启 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
-- 显示是否开启 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%';
-- 显示 binlog 事件
show binlog events;
-- 显示全部 binlog 文件列表
show binary logs;
show master logs;
-- 显示最新 binlog 文件编号以及最后一个操作事件结束点(Position)值
show master status;
-- 结束当前 binlog 文件并生成新的 binlog 文件
flush logs;
-- 重置 binlog 文件(清空全部 biglog 文件)
reset master;

在这里插入图片描述

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

mysqlbinlog

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

在这里插入图片描述

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
docker-compose up -d mysql
# 查询日志是否启动成功
docker logs -f mysql

给 Test 账号添加权限

登录 root 账号操作。

-- 查询用户在数据库中拥有的所有权限,包括函数权限
SHOW GRANTS FOR 'Test'@'%';
-- 添加所有权限
GRANT ALL PRIVILEGES ON *.* TO 'Test'@'%' WITH GRANT OPTION;
-- 查询数据库版本
select version();
-- 查询数据库字符集
show variables like 'character%';
-- 查看事件计划是否开启
SHOW VARIABLES LIKE '%event_sche%';
  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
宝塔面板的MySQL数据库Docker中的MySQL数据库有以下区别: 1. 部署方式:宝塔面板是一个集成的服务器管理面板,它提供了一键安装和管理MySQL数据库的功能。你可以通过在宝塔面板中选择MySQL数据库,并进行相关配置来快速部署和管理数据库。而Docker是一个容器化平台,你可以使用Docker来创建和管理MySQL容器,通过定义Docker镜像、容器等配置来部署和管理MySQL数据库。 2. 环境隔离:Docker提供了容器化的环境隔离,每个MySQL容器都是独立运行的,具有自己的文件系统、网络等资源,可以避免不同应用之间的相互影响。而宝塔面板中的MySQL数据库是直接安装在服务器上的,与其他应用共享服务器的资源。 3. 灵活性和可移植性:使用Docker部署MySQL数据库可以提供更大的灵活性和可移植性。你可以在不同的环境中使用相同的Docker镜像来快速部署和迁移数据库,而无需关注底层操作系统和服务器配置的差异。而宝塔面板中的MySQL数据库通常是与特定服务器绑定的,迁移需要手动配置和迁移数据库文件。 4. 扩展性:使用Docker可以更容易地扩展MySQL数据库。你可以通过调整Docker容器的配置、添加新的容器等方式来实现负载均衡或高可用性。而宝塔面板中的MySQL数据库通常是以单实例形式运行,如果需要扩展,可能需要手动配置和管理多个实例。 需要注意的是,宝塔面板中的MySQL数据库Docker中的MySQL数据库并不是相互排斥的选择,而是根据具体需求和使用场景选择合适的部署方式。对于简单的应用场景,宝塔面板提供了方便的一键部署和管理;而对于复杂的、需要灵活性和可移植性的场景,使用Docker部署MySQL数据库可能更合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值