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中新增該目錄...