準(zhǔn)備工具:
- mysql-utilities 下載地址
安裝命令
wget https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5.tar.gz
tar zxvf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
python ./setup.py build
python ./setup.py install
獲取表結(jié)構(gòu)
mysqlfrm --diagnostic xxxxx.frm

- docker
更新?lián)Q源
yum -y update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
查看可安裝版本
yum list docker-ce --showduplicates | sort -r
安裝需要的版本
yum -y install docker-ce-18.03.1.ce
運(yùn)行docker
systemctl start docker
設(shè)置開機(jī)自啟
systemctl enable docker
docker獲取相應(yīng)鏡像
docker獲取mysql鏡像應(yīng)盡量與需要恢復(fù)的版本一致,此處使用5.7.34 安裝mysql鏡像的命令為
docker pull mysql:5.7.34
運(yùn)行后查看安裝的鏡像

配置容器并啟動(dòng)MySQL,以下命令為配置mysql:5.7.34容器并將其命名為mysql,映射端口為3306,密碼為root,啟動(dòng)。
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.34
若需要將data文件或配置文件掛載則可使用-v參數(shù),命令如下
冒號(hào)前為宿主機(jī)的路徑。
docker run -p 3306:3306 --name sample-mysql -e MYSQL_ROOT_PASSWORD=root -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql -d mysql:5.7.34
使用docker ps查看容器是否順利運(yùn)行:

進(jìn)入mysql容器并恢復(fù)相應(yīng)數(shù)據(jù)庫
- 進(jìn)入MySQL容器
docker exec -it mysql /bin/bash
- 登陸mysql
mysql -u root -p

- 創(chuàng)建數(shù)據(jù)庫和表,表名需與即將恢復(fù)的表名一致。
創(chuàng)建后使用語句alter table tablename discard tablespace; 刪除相應(yīng)的idb文件
查看mysql文件儲(chǔ)存的目錄
show global variables like "%datadir%";

關(guān)閉mysql容器docker stop mysql
- 將需要恢復(fù)的數(shù)據(jù)庫的idb文件復(fù)制進(jìn)容器中
docker cp '/home/centos7/Desktop/tablename .ibd' mysql:/var/lib/mysql/test

- 重啟容器并授權(quán)文件
docker start mysql
為防止出現(xiàn)權(quán)限問題,可直接賦777權(quán)限
chown 777 tablename .ibd

- 進(jìn)入MySQL,導(dǎo)入表結(jié)構(gòu)
ALTER TABLE tablename IMPORT TABLESPACE;

- 導(dǎo)出.sql文件
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名> 導(dǎo)出的文件名

通過本地navicat遠(yuǎn)程連接mysql容器
- 嘗試授權(quán)
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
若mysql版本較高或navicat版本較低需執(zhí)行ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;更改加密規(guī)則。
隨后更新密碼
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
- 以上命令執(zhí)行后更新權(quán)限
FLUSH PRIVILEGES;
完成兩步后若連接失敗,可嘗試以下步驟:
- 查看user表中是否存在多個(gè)用戶權(quán)限,刪除多余用戶,僅保留%一項(xiàng)
use mysql;select host from user where user='root';
delete from user where user = 'root' and host <>'%';
- 打開虛擬機(jī)相應(yīng)端口權(quán)限并關(guān)閉防火墻
sudo firewall-cmd --add-port=3306/tcp sudo systemctl stop firewalld