docker 的mysql容器中没有mysqlbinlog

这篇具有很好参考价值的文章主要介绍了docker 的mysql容器中没有mysqlbinlog。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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.42

mysql 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%';

docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器
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*

docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器

关于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

docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器
你有一定几率获取 新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)

docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器
此时你可以尝试以下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

docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器

docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器
docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器
docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器



手动更新glibc(头铁圣体)
请查看这篇文章,祝你好运,尝试解决Linux提示:/lib64/libc.so.6: version GLIBC_2.XX’ not found
看之前先过眼下惨烈案列,慎重
docker 安装的mysql 没有mysqlbinlog,mysql,docker,docker,mysql,容器文章来源地址https://www.toymoban.com/news/detail-846111.html

到了这里,关于docker 的mysql容器中没有mysqlbinlog的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 逸学Docker【java工程师基础】2.Docker镜像容器基本操作+安装MySQL镜像运行

    在这里我们的应用程序比如redis需要构建成镜像, 它作为一个Docker文件就可以进行 构建 ,构建完以后他是在 本地的 ,我们可以 推送 到镜像服务器,逆向可以 拉取 到上传的镜像,或者说我们可以保存为 压缩包 进行 相互传递 。 在本地的镜像可以传来传去,本身也可以查看

    2024年02月01日
    浏览(54)
  • Docker安装常用的容器,包括MySQL,Redis,RabbitMQ,MongoDB,FDFS等

    首先安装docker 依赖库 添加docker ce的软件源信息,自行选择,可添加可不添加,如果不是阿里云或者腾讯云的,请还是添加一下吧 安装docker docker -v --查看docker版本 docker images --查看当前docker运行 sudo systemctl start docker --启动docker 在虚拟机里边 docker images --有时候权限不足 我们

    2024年02月11日
    浏览(63)
  • 解决Docker容器没有yum命令

    有时候在docker容器里面不仅没有你期望的那些常用的命令,甚至没有 yum 命令让你去安装那些常用的命令。 无 yum 原因 一些 docker 容器内是没有这些应用的,需要我们自己安装的 这个容器的系统很可能不是 Centos 系而是 Ubuntu 或者其他操作系统,你可以通过命令 cat /proc/versio

    2024年01月18日
    浏览(55)
  • docker 安装的mysql修改配置文件 一、先看一下容器绑定的配置文件目录在哪

    如图,mysql容器的配置文件映射在服务器  /opt/mysql_docker/conf目录下。所以想修改容器的配置文件内容,只需要修改 /opt/mysql_docker/conf中的配置文件。  二、发现 /opt/mysql_docker/conf 目录下没有文件。 三、进入mysql容器,复制mysql的配置文件内容 复制内容如下: 四、在服务器/op

    2024年02月11日
    浏览(47)
  • 【docker】通过docker ps 查看容器运行状态发现没有端口号,解决PORTS没有端口号问题

    目录 1、遇到问题  2、添加端口号  3、杀掉正在运行的容器

    2024年02月13日
    浏览(54)
  • mysql备份恢复(mysqldump备份 mysqlbinlog恢复)

    物理备份 ​物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等) 冷备份(脱机备份) :是在关闭数据库的时候进行的 热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作 逻辑备份 逻辑

    2024年02月14日
    浏览(43)
  • 解决docker删除镜像和容器之后,硬盘空间没有释放

    如果是下边这种,状态为Running,就需要执行第二步,终止运行。否则,直接从第三步开始

    2024年02月16日
    浏览(46)
  • mysql根据mysqlbinlog恢复找回被删除的数据库

    年初和朋友一起做了个项目,到现在还没收到钱呢,今天中午时候突然听说之前的数据库被攻击了,业务数据库全部被删除。看有没有什么办法恢复,要是恢复不了,肯定也别想拿钱了吧? 勒索表 README FOR RECOVERY DATA 内容如下 README FOR RECOVERY DATA All your databases was backed up. You

    2024年02月15日
    浏览(53)
  • 尝试添加服务器中正在运行的docker容器时报错:当前用户没有运行“docker”的权限

    环境 1,通过vscode ssh到服务器的 2,服务器端有一个contianer,但是无法通过vscode的Dev contianer组件将服务器中正在运行的contianer添加过来 3,值得注意的一点是,我没有把当前用户添加到docker用户组中,这也是报错的原因 报错内容 解决办法 当前用户添加到docker用户组中 然后一

    2024年01月19日
    浏览(53)
  • 【MySQL | 进阶篇】09、MySQL 管理及常用工具(mysqladmin、mysqlbinlog、mysqldump 等)的使用

    目录 一、系统数据库 二、常用工具  2.1 mysql 示例 2.2 mysqladmin  示例  2.3 mysqlbinlog 示例 2.4 mysqlshow 示例 2.5 mysqldump(数据备份) 示例 2.6 mysqlimport/source(数据恢复) 2.6.1 mysqlimport 2.6.2 source Mysql 数据库安装完成后,自带了以下四个数据库,具体作用如下: 该 mysql 不是指 my

    2023年04月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包