前言
就在昨天我误删了docker映射出来的mysql中performance_schema,当我发觉不对劲时已为时已晚,好在ibd文件都在,这个时候就能拿来做文章了,下面就是具体步骤了:
一、mysql容器重新创建
- 如果docker中还存在mysql容器先清除
docker rm mysql(或者容器id) - 创建新的文件夹
- 这里我是在根目录创建了data文件,在这里面存mysql配置和数据库等文件
mkdir -p /data/mysql/{db,conf,log}
- 这里我是在根目录创建了data文件,在这里面存mysql配置和数据库等文件
- 初始化容器映射conf
- 先初始化一个mysql容器,为了把配置文件映射出来,否则一气呵成的时候会报错
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql - 映射conf文件
docker cp 容器id:/etc/mysql(容器路径) /data/mysql/conf(外部路径)
- 先初始化一个mysql容器,为了把配置文件映射出来,否则一气呵成的时候会报错
- 删除mysql容器并重新启动
- 删除mysql容器
docker stop mysql docker rm mysql - 启动mysql容器
docker run -p 3306:3306 --name mysql -v /data/mysql/conf:/etc/mysql -v /data/mysql/log:/var/log/mysql -v /data/mysql/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql()
- 删除mysql容器
二、mysql容器内操作
- 进入mysql容器中
输入密码操作若是不成功,总是显示密码错误时,退出进入docker exec -it mysql /bin/bash # 进入后操作 mysql -uroot -p # 输入密码 123456/data/mysql/conf/中,打开my.cnf文件最后一行添加skip-grant-tables,暂时不使用密码登录vim /data/mysql/conf/my.cnf - 再次登录后,修改root密码(root登录成功可跳过)
- 把root用户密码修改为空(此行为不安全,但是为了可以登录后创建新的用户暂且这样设置)
update user set authentication_string='' where user='root'; flush privileges; (清除缓存) - 退出修改
my.cnf文件,注释skip-grant-tables,重启mysql容器,进入容器中免密登录,就可以新建用户了# 重启mysql容器 docker restart mysql # 进入容器 docker exec -it mysql /bin/bash # 进入后直接回车进入sql mysql -uroot -p
- 把root用户密码修改为空(此行为不安全,但是为了可以登录后创建新的用户暂且这样设置)
- 新建用户并赋权限
- 创建用户admin
CREATE USER 'admin'@'%' IDENTIFIED BY '123456'; - 赋所有权限
grant all on*.* to 'admin'; flush privileges;
- 创建用户admin
三、进入navicat操作
- 进入界面点击 “连接” 数据库,输入ip、端口号、用户 admin、密码123456测试连接,完成后即可进入新建数据库
- 新建数据库名test,字符集选择 utf8,排序规则可不选
- 然后新建一张表,这里我是使用代码新建
新建完成之后可以在服务器create table if not exists ctrl_record ( id varchar(36) not null primary key, ctrl_type varchar(36) null, ctrl_time datetime null, point_group_id varchar(36) null );/data/mysql/db/test文件夹中看到该文件其中-rw-r----- 1 systemd-coredump input 114688 Mar 3 15:06 ctrl_record.ibdsystemd-coredump和input分别为用户和用户组 - 再执行删除ibd文件操作
alter table ctrl_record discard tablespace; - 将原来的对应表名称ibd文件移入
/data/mysql/db/test,这个时候因为用户和用户组与我们之前新建的ibd不用,所有需要修改ibd所属用户和用户组chown -R systemd-coredump:input /data/mysql/db/test/*.ibd - 再进入navicat执行导入
显示ok则说明成功了alter table ctrl_record IMPORT TABLESPACE;