mysql學習筆記之十六(數據庫維護)
數據備份
數據損失原因:存儲介質鼓掌,用戶操作錯誤(誤刪除整個數據庫),服務器徹底癱瘓
1、文件復制
需要先停止服務器服務,在停止之前,執行flushtables將所有數據寫入到數據文件,停止之後,將數據文件拷貝到其他地方
只適合MyISAM存儲引擎,對其他引擎並不合適
2、mysqldump
mysqldump將包含數據的表結構和數據內容保存在相應的文本文件。具體執行時,首先檢查備份數據的表結構,在相應的文本文件中生成create語句。然後檢查數據內容,在相應的文本文件中生成insert into 語句。將來需要進行還原時,只需要執行文本文件中的create和insert into
三種形式:
備份一個數據庫
mysqldump -u username -p dname table1,table2,... >backupname.sql
不指定table則會備份整個數據庫
">"兩邊要有空格。
例:
C:\Users\208-1>mysqldump -u root -p123456 leetcode t_scores t_employee > D:\AppServ\MySQL\backupleetcode.sql
C:\Users\208-1>mysqldump -u root -p123456 leetcode > D:\AppServ\MySQL\backupleetcode1.sql
mysqldump不能再mysql>後面輸入,直接在dos窗口執行
備份多個數據庫
mysqldump -u username -p --databases dbname1 dbname2 ... > backupname.sql
各個數據庫之間不能加逗號直接用空格隔開就行
備份所有數據庫
mysqldump -u username -p --all-databases > backupname.sql
all-databases是連在一起的。
數據還原
1、復制備份文件還原數據庫
這種方式必須保證兩個mysql數據庫的主版本號一致,因為只有主版本號相同時,才能保證兩個mysql數據庫的文件類型是相同的
僅對MyISAM類型的表有效
主版本號,MySQL 5.5.21和MySQL 5.5.01主版本號是相同的,第一個數字是主版本號
2、mysql
mysql -u username -p [dbname]<backup.sql
指定dbname,則還原該數據庫下的表,不指定,則還原備份文件中所有的數據庫
導出
通過數據庫中表的導入和導出操作,可以在mysql數據庫服務器與其他數據庫服務器間(sql server 、Oracle)輕松移動數據
導出:
將數據從mysql數據表裡復制到文本文件
導入
將數據從文本文件加載到mysql數據庫表裡
1、select...into outfile
select [filename] from table_name [where condition] into outfile 'filename' [option]
兩部分:普通查詢語句(查詢要導出的數據)和導出位置
option的取值:
fileds terminated by "string" 用來設置字段的分隔符字符串對象(string),默認為制表符
fields enclosed by "char" 用來設置括上字段值的字符符號,默認不使用任何符號
fields optionally enclosed by 'char' 用來括上char,varchar和text等字段的字符符號,默認不使用任何符號
fieles escaped by 'char' 設置轉義字符的字符符號,默認情況下使用"\"字符
lines starting by 'char' 設置每行開頭的字符符號,默認不使用任何符號
lines terminated by 'string' 設置每行結束的字符串符號,默認使用'\n'
2、mysqldump
mysqldump -u root -p -T file_directory dbname tablename[option]
option的取值:
--fileds-terminated-by=string
--fileds-enclosed-by=char
--fileds-optionally-enclosed-by=char
--lines-terminated-by=string
導入
1、load data infile
load data[local] infile filename into table table_name[option]
local:指定在本地計算機中查找文本文件;
filename:用來指定文本文件的路徑和名稱;
tablename:用來指定表的名稱
oprion的取值
fileds terminated by "string" 用來設置字段的分隔符字符串對象(string),默認為制表符
fields enclosed by "char" 用來設置括上字段值的字符符號,默認不使用任何符號
fields optionally enclosed by 'char' 用來括上char,varchar和text等字段的字符符號,默認不使用任何符號
fieles escaped by 'char' 設置轉義字符的字符符號,默認情況下使用"\"字符
lines starting by 'char' 設置每行開頭的字符符號,默認不使用任何符號
lines terminated by 'string' 設置每行結束的字符串符號,默認使用'\n'
ignore n lines 實現忽略文件的前n行記錄
(字段列表) 實現根據字段列表中的字段和順序來加載記錄
set column=expr 用來設置列的轉換條件,即所指定的列經過相應的轉換後會被加載
2、mysqlimport
mysqlimport -u root -p [--local] dbname file_name[oiption]
option的取值:
--fileds-terminated-by=string
--fileds-enclosed-by=char
--fileds-optionally-enclosed-by=char
--lines-terminated-by=string
--ignrs-lines=n
注意:命令裡沒有指定導入到哪個表裡。按照書上的意思,按照文件名尋找表,然後導入進去。
數據庫遷移
1、相同版本間的mysql數據庫之間的遷移
mysqldump -h hostname -u root -password=password1 --all-databases
|mysql -h hostname2 -u root -password=password2
備份和還原同時操作。
對於相同版本間的mysql數據庫之間的遷移,先使用mysqldump進行備份,然後使用mysql命令將備份文件還原到新的mysql數據庫。
2、不同版本間的mysql數據庫之間的遷移
低版本->高版本最是容易實現,因為高版本兼容低版本
對於MyISAM的表
使用文件直接復制的方式或者mysqlhotcopy
對於InnoDB的表
使用mysqldump備份,使用mysql命令還原
3、不同數據庫間的遷移
mysql->sql server :通過MyODBC實現遷移
mysql->oracle:先通過mysqldump命令導出sql文件,手動修改
sql中的create語句