docker安装mysql以及数据库恢复/找回数据

 环境准备

docker的安装

docker命令安装mysql

安装步骤

这里默认安装是mysql8,如果并发高可以换成5.7

首先执行docker pull mysql:8.0.18                                                                                                                        

Shell
docker run --name mysql-dev -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/logs:/logs -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3306:3306 mysql:8.0.18

安装成功后,查看容器

docker sp | grep mysql

docker-compose 安装

执行附件的mysql-compose.yaml文件,内容如下:

version: "2.2"
services:
  mysql:
    image: mysql:8.0.18
    container_name: mysql-dev
    volumes:
      - ./conf:/etc/mysql/conf.d
      - ./logs:/logs
      - ./data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    restart: always
    command:
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --lower_case_table_names=1

可以这里直接下载mysql-compose.yaml

 执行命令如下:

docker-compose -f mysql-compose.yaml up

后续如果手动启动,命令如下

 docker-compose -f mysql-compose.yaml start

 后续如果手动停止,命令如下

 docker-compose -f mysql-compose.yaml stop

数据库安装完成后

开启大小写敏感

首先停止容器,并删除挂载的data,

Docker stop 《容器id》

然后把容器内的my.cnf拷贝出来(容器内没有vi命令,不方便编辑),添加lower_case_table_names=1

命令如下:

Shell
docker cp 《容器id》:/etc/mysql/my.cnf my.cnf

Shell
Vi my.cnf

Shell
docker cp my.cnf 《容器id》:/etc/mysql/my.cnf

执行完成后启动容器

docker start 《容器id》

docker

开启远程连接

接下来需要开启远程连接和大小写敏感。

首先进入容器

执行命令

docker exec -it 《容器id》 bash

然后执行命令

mysql -uroot -p123456

连接上mysql

然后执行

Shell
use mysql;
select host,user from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

就可以通过数据库连接工具尝试连接

数据恢复

不到万不得已,不得使用,binlog数据可能不完整(binlog默认会定期删除)。

首先进入存储地址,如果docker安装的进入挂载地址,不知道挂载地址的可以进入容器

docker exec -it 《容器id》 /bin/bash

进入数据库数据存储地址,先执行sql

sql:  SHOW VARIABLES LIKE '%log_bin%'

获取到binlog存储地址后,进入

如果知道挂载地址,直接进入挂载地址即可。

执行下面命令

Plain Text
mysqlbinlog --start_datetime="2023-02-02 00:00:00" --stop_datetime="2023-04-23 12:45:00" binlog.000017 > tmp.sql

参数说明

--start_datetime 恢复数据的开始时间

--stop_datetime 恢复数据的截止时间

--binlog.000017 为当前mysql的binlog文件

生成后如果在容器中,拷贝出来,查看里面内容是否是需要的

docker cp 40b529ef92f5:/var/lib/mysql/tmp.sql tmp.sql

40b529ef92f5 是容器id,tmp.sql是之前通过binlog导出来的sql文件

导出来后检查是否是需要的sql,确认无误后执行

mysql -uroot -p -s -N -f -D techx < tmp.sql

这命令会忽略错误,一直执行完所有binlog日志

执行结束后,再把剩余的binlog文件全部按上面步骤执行完即可。

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值