MySQL資料的備份恢復與匯出匯入

2021-09-12 20:34:47 字數 3916 閱讀 5632

資料的備份可以有兩種方式,邏輯備份和物理備份  

mysql中用mysqldump來完成

mysqldump -uroot -p  --all-database > all.sql          #所有庫

mysqldump -uroot -p  test > test.sql                        #test庫

mysqldump -uroot -p  test emp  dept> emp_dept.sql          #test庫中emp表和dept表

將test中的所有表儲存為以逗號分隔的文字,備份到/tmp下:

myslqdump  -uroot -p -t /tmp  test emp dept --fields-terminated-by ','

注意:一般在備份時加-l 和-f引數,-l為所有表加上讀鎖,在進行備份時,不能進行資料更新 ,-f 表示生成乙個新的日誌檔案,否則恢復資料可能不完整

mysqldump -uroot -p test

完全恢復:

場景如果9:00備份完,又插入了新的資料,但是10:00資料庫突然故障,按照以上的語法不能恢復新插入的資料,我們用musqlbinlog來恢復自mysqldump備份以來的binlog,也稱為完全恢復

mysqlbinlog mysql-log-000006 | mysql -uroot -p test

不完全恢復:

場景:如果誤刪除了一張表,採用上述語句也就是完全恢復,是不能恢復這張表的,因為binlog中還存在那條誤刪除的操作,所以我們要恢復這條誤刪除操作之前的語句,以達到我們的目的,這種恢復叫做不完全恢復,有基於時間和位置的恢復兩種,其原理都是通過關於時間和位置的引數,將這條誤刪除的操作語句從binlog中剔除出去

假設是10點發生的誤刪除操作

mysqlbinlog --stop-date="2019-03-03 9:59:59"  /data/mysql-log-12345 | mysql -uroot -p

mysqlbinlog --start-date="2019-03-03 10:01:00"  /data/mysql-log-12345 | mysql -uroot -p

基於位置:

先找出誤操作語句前後的位置號,並輸出到/tmp下的乙個小的文字檔案

mysqlbinlog --start-date="2019-03-03 9:55:00"  --stop-date="2019-03-03 10:05:00"  /data/mysql-log-12345  > /tmp/mysql_restore.sql

例如前後的位置號分別是366778和366780

然後根據前後的位置號,恢復在指定日誌中除了這個位置號之間的所有語句操作

mysqlbinlog --stop-position="366778"  /data/mysql-log-12345 | mysql -uroot -p

mysqlbinlog --start-position="366780"  /data/mysql-log-12345 | mysql -uroot -p

物理備份的優點是備份和恢復的速度更快,因為它是基於檔案的copy。物理備份又分為冷備份和熱備份

冷備份就是停掉資料庫服務,進行資料copy的方法,也是用到mysqlbinlog工具。但一般不會停掉資料庫服務

對於熱備份,不同的儲存引擎有不同的備份方式

myisam儲存引擎的熱備份,用mysqlhotcopy工具

innodb儲存引擎中常用的熱備工具有:ibbackup(收費)和xtrabackup(innobackupex)

工作中有時需要將資料庫中的資料匯出為某些符號分割的純資料的文字,而不是sql語句。在以下需求時用資料的匯入匯出

**用來以excel顯示

**為了節省備份空間

**為了快速的載入資料,(load data的載入速度比普通的sql載入速度要快20倍以上)

匯出有兩種方式:

格式:select * from tablename into outfile "target_file" [option]

option包括:

fields terminated by ","               #欄位分隔符

fields optionally enclosed by '"'     #欄位引用符 optionally表示只在字元型別的字段上加指定的字段引用符

fields escaped by 『char』      #轉義字元,預設是『\』

lines starting by 'string'         #指定每一行的最前 麵加的字串。預設為空

lines terminated by 『string』   #指定行結束符,預設為回車換行  '\n'

例:>select * from emp into outfile "/tmp/emp.text" fields terminated by ',' optionally encolsed by '"';

除了在/tmp下生成emp.text之外,還生成乙個emp.sql檔案,裡面記錄了emp表的建立指令碼

其實,mysqldump只是呼叫了select into file提供的介面而已,其語法很類似,mysqldump在mysql外部執行,into file在mysql內部執行

匯入也有兩種方式:

格式:load data infile  'filename' into table  tablename [option]

option 和select into file相同,又多加了兩個選項

ignore number lines (col_name1,col_name2,...)      #忽略匯入檔案中的前n行資料,括號表示按照指定的字段順序進行顯示,即可以調整字段順序,也可以指定顯示哪幾個字段

set col_name=...       #將某個欄位的那一列做一定的數值計算後再載入

例1:load data infile '/tmp/emp.txt'  into table emp fields terminated by ',' enclosed by '"';

例2:load data infile '/tmp/emp.txt' into table emp fields terminated by ',' enclosed by '"' ignore 2 lines (id,name);  #忽略表中的前2行資料,並按照id,name的順序顯示

例3:load data infile '/tmp/emp.txt' into table emp fields terminated by ',' enclosed by '"' set id=id+10;                #載入全部資料,並將id欄位那一列的所有資料都加10後再顯示。

語法、option和mysqldump幾乎相同

mysqlimport -uroot -p test /tmp/emp.txt --fields termonated-by=',' --fields-optionally-enclosed-by='"'

如有錯誤,敬請指正~~

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