mysql學習筆記之十六(數(shù)據(jù)庫維護)
來源:程序員人生 發(fā)布時間:2015-06-01 08:28:41 閱讀次數(shù):3025次
數(shù)據(jù)備份
數(shù)據(jù)損失緣由:存儲介質(zhì)鼓掌,用戶操作毛病(誤刪除全部數(shù)據(jù)庫),服務器完全癱瘓
1、文件復制
需要先停止服務器服務,在停止之前,履行flushtables將所有數(shù)據(jù)寫入到數(shù)據(jù)文件,停止以后,將數(shù)據(jù)文件拷貝到其他地方
只合適MyISAM存儲引擎,對其他引擎其實不適合
2、mysqldump
mysqldump將包括數(shù)據(jù)的表結(jié)構(gòu)和數(shù)據(jù)內(nèi)容保存在相應的文本文件。具體履行時,首先檢查備份數(shù)據(jù)的表結(jié)構(gòu),在相應的文本文件中生成create語句。然后檢查數(shù)據(jù)內(nèi)容,在相應的文本文件中生成insert into 語句。將來需要進行還原時,只需要履行文本文件中的create和insert into
3種情勢:
備份1個數(shù)據(jù)庫
mysqldump -u username -p dname table1,table2,... >backupname.sql
不指定table則會備份全部數(shù)據(jù)庫
">"兩邊要有空格。
例:
C:Users208⑴>mysqldump -u root -p123456 leetcode t_scores t_employee > D:AppServMySQLackupleetcode.sql
C:Users208⑴>mysqldump -u root -p123456 leetcode > D:AppServMySQLackupleetcode1.sql
mysqldump不能再mysql>后面輸入,直接在dos窗口履行
備份多個數(shù)據(jù)庫
mysqldump -u username -p --databases dbname1 dbname2 ... > backupname.sql
各個數(shù)據(jù)庫之間不能加逗號直接用空格隔開就行
備份所有數(shù)據(jù)庫
mysqldump -u username -p --all-databases > backupname.sql
all-databases是連在1起的。
數(shù)據(jù)還原
1、復制備份文件還原數(shù)據(jù)庫
這類方式必須保證兩個mysql數(shù)據(jù)庫的主版本號1致,由于只有主版本號相同時,才能保證兩個mysql數(shù)據(jù)庫的文件類型是相同的
僅對MyISAM類型的表有效
主版本號,MySQL 5.5.21和MySQL 5.5.01主版本號是相同的,第1個數(shù)字是主版本號
2、mysql
mysql -u username -p [dbname]<backup.sql
指定dbname,則還原該數(shù)據(jù)庫下的表,不指定,則還原備份文件中所有的數(shù)據(jù)庫
導出
通過數(shù)據(jù)庫中表的導入和導出操作,可以在mysql數(shù)據(jù)庫服務器與其他數(shù)據(jù)庫服務器間(sql server 、Oracle)輕松移動數(shù)據(jù)
導出:
將數(shù)據(jù)從mysql數(shù)據(jù)表里復制到文本文件
導入
將數(shù)據(jù)從文本文件加載到mysql數(shù)據(jù)庫表里
1、select...into outfile
select [filename] from table_name [where condition] into outfile 'filename' [option]
兩部份:普通查詢語句(查詢要導出的數(shù)據(jù))和導出位置
option的取值:
fileds terminated by "string" 用來設置字段的分隔符字符串對象(string),默許為制表符
fields enclosed by "char" 用來設置括上字段值的字符符號,默許不使用任何符號
fields optionally enclosed by 'char' 用來括上char,varchar和text等字段的字符符號,默許不使用任何符號
fieles escaped by 'char' 設置轉(zhuǎn)義字符的字符符號,默許情況下使用""字符
lines starting by 'char' 設置每行開頭的字符符號,默許不使用任何符號
lines terminated by 'string' 設置每行結(jié)束的字符串符號,默許使用'
'
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' 設置轉(zhuǎn)義字符的字符符號,默許情況下使用""字符
lines starting by 'char' 設置每行開頭的字符符號,默許不使用任何符號
lines terminated by 'string' 設置每行結(jié)束的字符串符號,默許使用'
'
ignore n lines 實現(xiàn)疏忽文件的前n行記錄
(字段列表) 實現(xiàn)根據(jù)字段列表中的字段溫柔序來加載記錄
set column=expr 用來設置列的轉(zhuǎn)換條件,即所指定的列經(jīng)過相應的轉(zhuǎn)換后會被加載
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
注意:命令里沒有指定導入到哪一個表里。依照書上的意思,依照文件名尋覓表,然后導入進去。
數(shù)據(jù)庫遷移
1、相同版本間的mysql數(shù)據(jù)庫之間的遷移
mysqldump -h hostname -u root -password=password1 --all-databases
|mysql -h hostname2 -u root -password=password2
備份和還原同時操作。
對相同版本間的mysql數(shù)據(jù)庫之間的遷移,先使用mysqldump進行備份,然后使用mysql命令將備份文件還原到新的mysql數(shù)據(jù)庫。
2、不同版本間的mysql數(shù)據(jù)庫之間的遷移
低版本->高版本最是容易實現(xiàn),由于高版本兼容低版本
對MyISAM的表
使用文件直接復制的方式或mysqlhotcopy
對InnoDB的表
使用mysqldump備份,使用mysql命令還原
3、不同數(shù)據(jù)庫間的遷移
mysql->sql server :通過MyODBC實現(xiàn)遷移
mysql->oracle:先通過mysqldump命令導出sql文件,手動修改
sql中的create語句
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈