MySQL備份與還原操作

MySQL備份與還原操作

備份原理:使用mysql的mysqldump命令直接備份數據庫
mysqldump原理:執行查詢SQL select * form table 來獲取數據,同時獲取表名
備份範圍:會備份數據庫中的 table、視圖、存儲過程、函數
文件格式:默認格式是inset批量插入語句,表存在會先刪除表,然後創建表

工具準備

MySQL客戶端的安裝

備份數據庫

我這裏只做了單個數據庫備份
首先需要創建備份的文件夾,在該文件夾下執行 可以不用寫備份的絕對路徑

mysqldump -h192.168.0.20 -P端口 -uroot -p密碼 數據庫 > bak.sql;
mysqldump -h192.168.0.20 -P6306 -uroot -p密碼 mydb > bak.sql;

備份完成別忘了壓縮存儲

tar -acf  bak.sql.tar.gz  bak.sql

還原數據庫

建議將庫先提前創建好
如果還原的數據庫與備份數據庫名不同,可以通過參數指定數據庫名。

mysql -h192.168.0.50 -uroot -p密碼  -P端口 還原到的數據庫< bak.sql
mysql -h192.168.0.50 -uroot -p密碼  -P3306 mytest_20190411< bak.sql

踩坑

視圖備份

視圖有定義者(definer)這個概念
MySQL中視圖定義者的作用

函數和存儲過程之類的,本身調用是不存在權限這個概念的。

definer這個值並不會限制函數和存儲過程被調用的權限,但會限制函數和存儲過程訪問數據庫的權限。

函數和存儲過程在訪問數據庫時,會獲取definer用戶對應的數據庫訪問權限。

因爲在遷庫後,definer值沒有修改,原數據庫的用戶在新庫中不存在,所以報錯,修改一下definer值就可以了

由於 我操作的庫是從庫,有一部分視圖是主庫同步過來的,但是 從庫的賬戶和主庫是獨立的,導致主庫創建視圖的用戶在從庫中不存在,在做備份時會報以下錯誤

mysqldump: Got error: 1449: "The user specified as a definer ('vill***sale'@'%') does not exist" when using LOCK TABLES

在從庫中villaale這個用戶是不存在的,導致視圖無法備份,要解決這個問題有兩個方法。
方法1:創建 'villa
ale’@’%’ 這個用戶,並給與他 備份數據庫的權限
方法2:修改 視圖 定義者的信息,改爲從庫中的用戶,這個我沒有采用,主要擔心修改後導致主從數據不一致

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章