docker 的mysql容器中没有mysqlbinlog

2024-03-30 09:44

本文主要是介绍docker 的mysql容器中没有mysqlbinlog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

docker 的mysql容器中没有mysqlbinlog

  • bug信息
  • 原因:阉割版mysql容器,构建者没有把mysqlbinlog当成必需工具,去掉了
  • 解决方法:
  • 验证成功
  • 删除无用的文件
  • 5.7开启binlog,(8 的默认开启了)
  • 5.7版本的mysqlbinlog复制后可能出现的bug
    • 原因:libatomic命令有问题,版本冲突或者没安装,环境变量设置之类的问题
    • 解决方法:
      • 一:降低mysqlbinlog版本(强烈推荐)
      • 二:安装libatomic(头铁是吧)

bug信息

没有 mysqlbinlog 命令

sh: mysqlbinlog: command not found

(tips: MySQL的工具在/usr/bin下)

ls -l /usr/bin/my*




原因:阉割版mysql容器,构建者没有把mysqlbinlog当成必需工具,去掉了

解决方法:

思路:

  1. 从官方版没有阉割的容器中将mysqlbinlog工具复制过来
  2. 利用docker的cp,将容器文件经过本机中转到其他容器

(可以省略第一步、第二步,直接下载我复制存储在gitee的mysqlbinlog文件,点击跳转)

tips:mysql一些容器版本有自带mysqlbinlog ,一些没有,随手测试了一些版本,如下:
mysql 5.7有的:mysql:5.7.10(强烈推荐),mysql:5.7.31,mysql:5.7.32没有的:mysql:5.7.38,mysql:5.7.40,mysql:5.7.42mysql 8 的好像要debian后缀的才有mysqlbinlog 
只测试了一个 mysql:8.0.32-debian(有的)
### 第一步
# 5.7版本 
docker run -d --name=del_mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.10
# 8.0版本
docker run d --name=del_mysql -e MYSQL_ROOT_PASSWORD=123 mysql:8.0.32-debian### 第二步
# 随便找个本机地址存放,这里写 / (linux)或者 C:\(windows)
docker cp del_mysql:/usr/bin/mysqlbinlog  C:\
# or
docker cp del_mysql:/usr/bin/mysqlbinlog  /### 第三步
#复制到你的mysql容器
docker cp c:\mysqlbinlog 你的mysql容器id或者名字:/usr/bin/
# or
docker cp /mysqlbinlog 你的mysql容器id或者名字:/usr/bin/

验证成功

# 进入你的容器
docker exec -it 你的容器名 /bin/bash
# 调用mysqlbinlog
mysqlbinlog#或者不进入,单纯验证
docker exec -it 你的容器名 mysqlbinlog

成功的显示信息:

mysqlbinlog  Ver 8.0.30 for Linux on x86_64 (MySQL Community Server - GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Dumps a MySQL binary log in a format usable for viewing or for piping to
the mysql command line client.Usage: mysqlbinlog [options] log-files-?, --help          Display this help and exit.
....(略)

删除无用的文件

# 删除没必要的容器
docker rm -f del_mysql
#删除没必要的镜像
docker rmi mysql:5.7.10
# or 
docker rmi mysql:8.0.32-debian#之后删除本机的文件即可
rm -f /mysqlbinlog
#或者windows(慎重,最好窗口手动删除,而不是命令行,可以两次ctrl c取消执行中的命令)
del C:\mysqlbinlog
# 坑!!! windows的del 
# del C:\mysqlbinlog 和del C:/mysqlbinlog完全不同!
#
# 坑1:del 找不到文件有一定可能会推荐你删除其他文件!!!不细看就会误删
#
# 神坑2:特别是正反斜杠!!!正确的是反斜杠(\)
# 正确:del C:\mysqlbinlog
# 错误,神坑: del C:/mysqlbinlog 只要是正斜杠(/),他直接识别为*,即是目录下全删除,这时会有个是否全删除的提示:
#				C:\*, 是否确认(Y/N)?




5.7开启binlog,(8 的默认开启了)

# 编辑配置文件
vim /etc/my.cnf
# 如果没有vim,直接docker cp出来改,再cp回去
# 添加下面几行,(我按照mysql 8的默认配置写的,开启binlog,路径,文件名,索引文件名)
server-id=1		# mysql集群分辨服务的id,必须集群内唯一
log-bin=/var/lib/mysql/binlog 	#如果你不是/var/lib/mysql/文件夹下的,你得确保你的文件夹是mysql群组,mysql用户具有必要的权限(chown chmod)# 重启mysql容器

验证是否开启

# sql语句
show variables like '%log_bin%';

在这里插入图片描述
log_bin=ON :打开binlog日志
log_bin_basename=/var/lib/mysql/binlog : binlog日志的文件名前缀
log_bin_index=/var/lib/mysql/binlog.index; binlog文件的索引文件

容器内查看文件

ls -l /var/lib/mysql/bin*

在这里插入图片描述

关于mysql 5.7的binlog自定义文件夹位置(即自定义log-bin=/var/lib/mysql/binlog ),可以参考下这篇博客:开启mysql 5.7的binlog




5.7版本的mysqlbinlog复制后可能出现的bug

mysqlbinlog: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory

原因:libatomic命令有问题,版本冲突或者没安装,环境变量设置之类的问题

!!!:但是,最大的可能是你找的mysqlbinlog版本过高!

解决方法:

一:降低mysqlbinlog版本(强烈推荐)

#选择更低版本的mysql容器:如 mysql:5.7.10,之前选择mysql:5.7.31,导致出现libatomic版本和后续的glibc问题
docker run -d --name=del_mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.10
# 降低版本后,cp ,运行mysqlbinlog,完全无问题

二:安装libatomic(头铁是吧)

yum install libautomic

在这里插入图片描述
你有一定几率获取 新bug: 容器的glibc版本过低

sh-4.2# mysqlbinlog       
mysqlbinlog: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by mysqlbinlog)
mysqlbinlog: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by mysqlbinlog)
mysqlbinlog: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by mysqlbinlog)

在这里插入图片描述
此时你可以尝试以下2种方案:

  1. 包管理器更新glibc(推荐,但基本无效)
  2. 手动更新glibc(慎重,有惨烈案列,更新了,但是有一定几率再也启动不了容器)

包管理器更新glibc

yum update glibc
#查看更新后的glibc版本,第一次使用会下载点东西(60M左右)
yum info glibc# 如果你发现版本没变,还是glibc 2.17,你可以再次挣扎下,更新yum的源缓存(基本无卵用),第一次使用会下载点东西(100M左右)
yum makecache#再次更新,查看(基本可以恭喜你浪费了生命,喜提 2.17 版本信息),如果你升级到2.28以上,那么你没白费功夫
yum update glibc
yum info glibc | grep Version

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



手动更新glibc(头铁圣体)
请查看这篇文章,祝你好运,尝试解决Linux提示:/lib64/libc.so.6: version GLIBC_2.XX’ not found
看之前先过眼下惨烈案列,慎重
在这里插入图片描述

这篇关于docker 的mysql容器中没有mysqlbinlog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861148

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】