MYSQL資料的備份與恢復

2021-09-20 17:18:57 字數 4133 閱讀 4488

mysql資料的備份與恢復

1 sql資料匯入匯出

實驗內容:

1.使用sql語句將/etc/passwd檔案匯入userdb庫userlist表,並給每條記錄新增自動編號。

2.將userdb庫userlist表中uid小於100的前10條記錄匯出,存為/dbak/ulist.txt檔案。

實驗實現:

1.將/etc/passwd檔案匯入mysql資料庫

匯入後的表結構取決於/etc/passwd配置檔案。若一時記不住各字段的含義,也可以檢視passwd配置檔案的man手冊頁,找到格式描述相關的說明,比如:

1)新建userdb庫、userlist表

以資料庫使用者root登入mysql服務:

新建userdb庫,切換到userdb庫:

mysql> create database userdb; query ok, 1 row affected (0.04 sec)  mysql> use userdb; database changed

mysql> create database userdb;

query ok, 1 row affected (0.04 sec)

mysql> use userdb;

database changed

新建userlist表,字段設定及相關操作參考如下:

mysql> create table userlist( -> username varchar(24) not null,

-> password varchar(48) default 'x',

-> uid int(5) not null,

-> gid int(5) not null,

-> fullname varchar(48),

-> homedir varchar(64) not null,

-> shell varchar(24) not null

-> );

query ok, 0 rows affected (0.17 sec)

2)執行匯入操作

讀取/etc/passwd檔案內容,以「:」為分隔,匯入到userlist表中:

→into table userlist

→fields terminated by ":"

→lines  terminated by "\n";

query ok

3)確認匯入結果

分別統計userlist、userlist2表內的記錄個數:

mysql> select count(*) from userlist;

mysql> select count(*) from userlist2;

2.為userlist表中的每條記錄新增自動編號

這個只要修改userlist表結構,新增乙個自增字段即可。

比如,新增乙個名為sn的序號列,作為userlist表的第乙個字段:

1)新增自增主鍵欄位sn

mysql> alter table userlist -> add sn int(4) auto_increment primary key first;  

2)驗證自動編號結果

檢視userlist表的前10條記錄,列出序號、使用者名稱、uid、gid、宿主目錄:

mysql> select sn,username,uid,gid,homedir -> from userlist limit 10;

3.從mysql資料庫中匯出查詢結果

以將userdb庫userlist表中uid小於100的前10條記錄匯出為/dbak/ulist.txt檔案為例,首先要確保目標資料夾存在,且msyql使用者有許可權寫入(否則匯出會失敗)。

1)確認存放匯出資料的資料夾

)匯出userlsit表中uid小於100的前10條記錄

如果以預設的'\n' 為行分隔,匯出操作同樣可不指定lines terminated by:

mysql> select * from userdb.userlist where uid<100   //執行匯出操作

-> into outfile '/dbbak/ulist.txt'

-> fields terminated by ':';

query ok, 26 rows affected (0.08 sec)

3)確認匯出結果

返回到shell命令列,檢視/dbbak/ulist.txt檔案的行數:

4)驗證兩種會匯出失敗的情況

目標資料夾不存在時:

mysql> select * from userdb.userlist

-> into outfile '/databackup/ulist.txt'

-> fields terminated by ':';

error 1 (hy000): can't create/write to file '/databackup/ulist.txt' (errcode: 2 - no such file or directory)

目標資料夾存在,但是mysql沒有寫入許可權時:

mysql> select * from userdb.userlist

-> into outfile '/opt/ulist.txt'

-> fields terminated by ':';

error 1 (hy000): can't create/write to file '/opt/ulist.txt' (errcode: 13 - permission denied)

解決辦法:1修改目錄的許可權 ,加入mysql組或者other+w許可權

2、mysql備份與恢復

1.使用mysqldump進行邏輯備份(完全備份)

1)備份mysql伺服器上的所有庫,將所有的庫備份為mysql-alldb.sql檔案:

2)只備份指定的某乙個庫

將userdb庫備份為userdb.sql檔案:

3)同時備份指定的多個庫

同時備份mysql、test、userdb庫,儲存為mysql+test+userdb.sql檔案:

4)備份指定庫下的指定表

2.使用mysql命令從備份中恢復資料庫、表

以恢復userdb庫為例,可參考下列操作。通常不建議直接覆蓋舊庫,而是採用建立新庫並匯入邏輯備份的方式執行恢復,待新庫正常後即可廢棄或刪除舊庫。

1)建立名為userdb2的新庫:

2)匯入備份檔案,在新庫中重建表及資料:

3)確認新庫正常,啟用新庫:

4)廢棄或刪除舊庫:

3 使用binlog日誌

1、啟用binlog日誌

1)調整/etc/my.cnf配置,並重啟服務

2)確認binlog日誌檔案

新啟用binlog後,每次啟動mysql服務都會新生成乙份日誌檔案:

重啟mysql服務程式,或者執行sql操作「flush logs;」,會生成乙份新的日誌:

心得總結:使用mysql命令從備份中恢復資料庫、表時通常不建議直接覆蓋舊庫,而是採用

建立新庫並匯入邏輯備份的方式執行恢復,待新庫正常後即可廢棄或刪除舊庫。

2.利用binlog日誌重做資料庫操作

1)執行資料庫表新增操作

確認插入的表記錄資料:

2)刪除前一步新增的3條表記錄

執行刪除所有表記錄操作:

mysql> delete from tb1; query ok, 3 rows affected (0.00 sec)

mysql> delete from tb1;

query ok, 3 rows affected (0.00 sec)

確認刪除結果:

3)通過binlog日誌恢復表記錄

binlog會記錄所有的資料庫、表更改操作,所以可在必要的時候重新執行以前做過的一

部分資料操作,但對於啟用binlog之前已經存在的庫、表資料將不適用。

根據上述「恢復被刪除的3條表記錄」的需求,應通過mysqlbinlog工具檢視相關日誌檔案

,找到刪除這些表記錄的時間點,只要恢復此前的sql操作(主要是插入那3條記錄的操作)即可。

根據上述日誌分析,只要恢復從2014.01.12 20:12:14到2014.01.12 20:13:50之間的操作即可。可通過mysqlbinlog指定時間範圍輸出,結合管道交給msyql命令執行匯入重做:

4)確認恢復結果

mysql 備份與恢復 MySQL 備份與恢復

1 檢視資料庫的資料儲存在哪個目錄下 shiyanlou mysql uroot e show variables like datadir variable name value datadir var lib mysql 2 備份資料的方法 select into outfile 檔名 或者 s...

mysql 備份與恢復 Mysql 備份與恢復

資料檔案一致性處理 在完全備份的情況下,檔案不是時間點一致的,因為進行快照的時間點不一樣。如果嘗 試在未prepare資料的情況下還原資料庫,雖然操作上支援恢復,但是在啟動的時候仍會 進行資料recovery。執行帶 prepare 選項的 mariabackup 命令會使資料檔案進行統一,達到資料...

MySQL資料備份與恢復

mysql命令列匯出資料庫 mysql命令列匯出資料庫 1,進入mysql目錄下的bin資料夾 cd mysql中到bin資料夾的目錄 如我輸入的命令列 cd c program files mysql mysql server 4.1 bin 或者直接將windows的環境變數path中新增該目錄...