通過docker恢復(fù)mysql數(shù)據(jù)庫

準(zhǔn)備工具:

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

圖片.png
  1. 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)行后查看安裝的鏡像

圖片.png

配置容器并啟動(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)行:

圖片.png

進(jìn)入mysql容器并恢復(fù)相應(yīng)數(shù)據(jù)庫

  1. 進(jìn)入MySQL容器

docker exec -it mysql /bin/bash

  1. 登陸mysql

mysql -u root -p

圖片.png
  1. 創(chuàng)建數(shù)據(jù)庫和表,表名需與即將恢復(fù)的表名一致。

創(chuàng)建后使用語句alter table tablename discard tablespace; 刪除相應(yīng)的idb文件

查看mysql文件儲(chǔ)存的目錄

show global variables like "%datadir%";

圖片.png

關(guān)閉mysql容器docker stop mysql

  1. 將需要恢復(fù)的數(shù)據(jù)庫的idb文件復(fù)制進(jìn)容器中

docker cp '/home/centos7/Desktop/tablename .ibd' mysql:/var/lib/mysql/test

圖片.png
  1. 重啟容器并授權(quán)文件

docker start mysql

為防止出現(xiàn)權(quán)限問題,可直接賦777權(quán)限

chown 777 tablename .ibd

圖片.png
  1. 進(jìn)入MySQL,導(dǎo)入表結(jié)構(gòu)

ALTER TABLE tablename IMPORT TABLESPACE;

圖片.png
  1. 導(dǎo)出.sql文件

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

圖片.png

通過本地navicat遠(yuǎn)程連接mysql容器

  1. 嘗試授權(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';

  1. 以上命令執(zhí)行后更新權(quán)限

FLUSH PRIVILEGES;

完成兩步后若連接失敗,可嘗試以下步驟:

  1. 查看user表中是否存在多個(gè)用戶權(quán)限,刪除多余用戶,僅保留%一項(xiàng)

use mysql;select host from user where user='root';

delete from user where user = 'root' and host <>'%';

  1. 打開虛擬機(jī)相應(yīng)端口權(quán)限并關(guān)閉防火墻

sudo firewall-cmd --add-port=3306/tcp sudo systemctl stop firewalld

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容