首頁 > 資料庫 > mysql教程 > mysql備份還原庫指令方法解析(長文)

mysql備份還原庫指令方法解析(長文)

php是最好的语言
發布: 2020-09-04 17:07:19
原創
17608 人瀏覽過

關於mysql資料庫備份與還原的方法,這裡首先講到備份的工具:mysqlhotcopy,使用mysqlhotcopy工具可進行快速備份,然後資料還原,使用MySQL指令還原;最後需要匯出資料庫表。詳細的介紹還得閱讀本文。

mysql備份還原庫指令方法解析(長文)

1.資料備份

有定期的備份資料庫,使得在意外情況發生的時候,盡量減少的損失。

1.使用mysqldump命令備份

mysqldump是MySQL提供的一個資料庫備份工具,mysqldump命令執行的時候,將資料庫備份成一個文字文件,該文件中包含了多個CREATE和INSERT語句,使用這些語句可以重新建立表格和插入資料;

【使用mysqldump備份單一資料庫中】

mysqldump -u user -h host -p password dbname>filename.sql
登入後複製

【使用mysqldump備份資料庫中的指定表格】

mysqldump -u user -h host -p password dbname[tbname,[tbname…]]>filename.sql
登入後複製

【使用mysqldump備份多個資料庫】

mysqldump -u user -h host -p password --databases[dbname,[dbname…]]>filename.sql
登入後複製

使用--databases參數之後,必須指定至少一個資料庫的名稱,多個資料庫之間使用空格隔開;

【備份系統中所有的資料庫】

mysqldump -u user -h host -p password --all-databases>filename.sql
登入後複製

提示:如果在伺服器上進行備份,且表格均為MyISAM,應考慮使用mysqlhotcopy,因為可以更快的進行備份和還原;

# 2.直接複製整個資料庫目錄

因為MySQL表儲存為檔案方式,所以可以直接複製MySQL資料庫的儲存目錄以及檔案進行備份。

這是一種簡單、快速、有效的備份方式,要保持備份的一致性,備份前需要對相關表執行LOCK TABLES 操作,然後對錶執行FLUSH TABLES(確保開始備份前將所有啟動的索引頁寫入硬碟)。這樣當複製資料庫目錄的檔案時,允許其他的使用者繼續查詢表格。

這種方法對InnoDB儲存引擎的表格不適用。使用這種方法備份資料最好還原到相同版本的伺服器中,不同版本可能不相容;

3.使用mysqlhotcopy工具快速備份

mysqlhotcopy是一個Perl腳本。

只能運行在資料庫目錄所在的機器上,且只能備份MyISAM和ARCHIVE類型的表;

2.資料還原

1.使用MySQL指令還原

mysql -u username -p [dbname] < filename.sql
登入後複製

注意:如果filename.sql文件為mysqldump工具建立的包含建立資料庫語句的文件,執行的時候不需要指定資料庫名稱;

如果已經登入MySQL伺服器,還可以使用source指令匯入SQL檔案。

source filename
登入後複製

提示:執行source指令之前,必須使用use語句選擇資料庫。不然,復原過程中會出現錯誤;

2.直接複製到資料庫目錄

如果資料庫透過複製資料庫檔案備份,可以直接複製備份的檔案到MySQL資料目錄下實現還原。

透過該方式還原的時候,必須保持備份資料庫和待還原的資料庫伺服器的主版本號碼相同。而且這種方式只是對MyISAM引擎的表有效,對於InnoDB引擎的表不可用;

執行還原以前關閉MySQL服務,將備份的檔案或目錄覆蓋MySQL的data目錄,啟動MySQL服務。

對於Linux/Unix作業系統來講,複製完檔案需要將檔案的使用者或使用者群組變更為mysql運行的使用者和群組,通常使用者是mysql,群組也是mysql;

3.mysqlhotcopy快速恢復

mysqlhotcopy備份之後的檔案也可以用來還原資料庫,在MySQL伺服器停止運作的時候,將備份的資料庫檔案複製到MySQL存放的位置(MySQL的data資料夾),重新啟動MySQL服務即可。

如果以根用戶執行操作,必須指定資料庫檔案的擁有者

chown -R mysql.mysql /var/lib/mysql/dbname
cp -R /usr/backup/test usr/local/mysql/data
登入後複製

執行完該語句,重新啟動伺服器,MySQL將還原到備份狀態

提示:如果需要復原的資料庫已經存在,則在使用DROP語句刪除已經存在的資料庫之後,復原才可以成功,另外MySQL不同版本之間必須相容;

3.資料庫遷移

資料庫遷移就是把資料從一個系統移動到另一個系統。資料遷移有以下原因:

1.相同版本的MySQL数据库之间的迁移

相同版本的MySQL数据库之间的迁移就是指在主版本号相同的MySQL数据库之间进行数据库移动。

举例:

将www.abc.com主机上的MySQL数据库全部迁移到www.bcd.com主机上:

mysqldump -h www.abc.com -u root -ppassword dbname | mysql -h www.bcd.com -uroot -ppassword
登入後複製

说明:

mysqldump导入的数据直接通过管道符|,传给mysql命令导入到主机www.bcd.com数据库中,dbname为需要迁移的数据库名称,如果需要迁移全部的数据库,可以使用参数 --all-databases

2.不同版本的MySQL数据库之间的迁移

MySQL服务器升级的时候,需要先停止服务,然后卸载旧版本,并安装新版本MySQL,这种更新方法很简单,如果想保留旧版本中的用户访问控制信息,需要备份MySQL中的mysql数据库,在新版本MySQL安装完成之后,重新读入mysql备份文件中的信息;

旧版本与新版本的字符集不同时,迁移过程需要对默认字符集进行修改,不然可能无法正常显示结果;

对于InnoDB引擎的表,一般只能使用mysqldump工具将数据导出,然后使用mysql命令导入到目标服务器上。

从新版本向旧版本迁移数据的时候,需要特别的小心,最好使用mysqldump命令导出,然后导入目标数据库中;

3.不同数据库之间的迁移

数据库迁移可以使用一些工具,例如在Windows系统下,可以使用MyODBC实现MySQL和SQL Server之间的迁移。

MySQL官方提供的工具MySQL Migration Toolkit也可以实现在不同数据库间进行数据迁移;

4.表的导出和导入

MySQL数据库中的数据可以导出成SQL文本文件、xml文件或者HTML文件。

1.使用SELECT…INTO OUTFILE导出文本文件

MySQL数据库导出数据的时候,允许使用包含导出定义的SELECT语句进行数据导出操作。该文件被创建到服务器主机上,因此必须拥有文件写入权限(FILE权限),才能使用此语法。

语法格式:

SELECT columnlist FORM table WHERE condition INTO OUTFILE ‘filename’ [OPTIONS]
登入後複製

[OPTIONS]选项:

● FIELDS TERMINATED BY ‘value’

● FIELDS [OPTIONALLY] ENCLOSED BY ‘value’

● FIELDS ESCAPED BY ‘value’

● LINES STARTING BY ‘value’

● LINES TERMINATED BY ‘value’

说明:filename不能是一个已经存在的文件;

OPTIONS部分语法包括FIELDS部分的语法和LINES子句,其可能的取值有:

FIELDS TERMINATED BY ‘value’:
登入後複製
登入後複製

设置字段之间的分隔字符,可以为单个或者多个字符,默认情况下为制表符‘\t’

FIELDS [OPTIONALLY] ENCLOSED BY ‘value’:
登入後複製
登入後複製

设置字段的包围字符,只能为单个字符,如果使用了OPTIONALLY,则只有CHAR和VERCHAR等字符数据字段被包括;

FIELDS ESCAPED BY ‘value’:
登入後複製
登入後複製

设置如何写入或者读取特殊字符,只能为单个字符,即设置转义字符,默认值为“\”

LINES STARTING BY ‘value’:
登入後複製
登入後複製

设置每行数据开始字符,可以为单个或者多个,默认不使用任何字符

LINES TERMINATED BY ‘value’:
登入後複製
登入後複製

设置每行数据结尾的字符 可以为单个或者多个字符,默认值为‘\n’;

注意:FIELDS和LINES两个子句是可选的,如果同时指定,FIELDS必须位于LINES的前面;

2.使用mysqldump命令导出文本文件

mysqldump工具不仅可以将数据导出为包含CREATE、INSERT的SQL文件,也可以导出为纯文本文件;

mysqldump -T path-u root -p dbname [tables] [OPTIONS]
登入後複製

--OPTIONS选项:

● --fields-terminated-by=value

● --fields-enclosed-by=value

● --fields-optionally-enclosed-by=value

● --fields-escaped-by=value

● --lines-terminated-end-by=value

说明:只有指定了T参数才可以导出为纯文本文件;path表示导出数据的目录;tables为指定要导出表的名称;如果不指定,将导出数据库dbname中的所有的表;

[options]取值:

● --fields-terminated-by=value:

设置字段之间的分隔字符,可以为单个或者多个字符,默认情况下为制表符‘\t’

● --fields-enclosed-by=value:

设置字段的包围字符;

● --fields-optionally-enclosed-by=value:

设置字段的包围字符,只能为单个字符,如果使用了OPTIONALLY,则只有CHAR和VERCHAR等字符数据字段被包括;

● --fields-escaped-by=value:

控制如何写入或者读取特殊字符,只能为单个字符,及设置转义字符,默认为反斜线“\”;

● --lines-terminated-end-by=value:

设置每行数据结尾的字符,可以为单个或者多个字符,默认值为‘\n’

3.使用MySQL命令导出文本文件

mysql是一个功能丰富的工具命令,使用MySQL还可以在命令行模式下执行SQL指令将查询结果导入到文本文件中。相比mysqldump,MySQL工具导出的结果可读性更强。

如果MySQL服务器是一个单独的机器,用户是在一个client上进行操作,用户要把数据导入到client机器上,可以使用mysql -e语句;

使用MySQL导出数据文本文件语句的基本格式如下:

mysql -u root -p --execute=”SELECT语句” dbname > filename.txt
登入後複製

使用MySQL命令还可以指定查询结果的显示格式:

如果某行记录字段很多,可能一行不能完全显示,可以使用--vartical参数,将每条记录分为多行显示;

【将查询结果导出到HTML文件中】

mysql -u root -p --html --execute=”SELECT语句” dbname > filename.html
登入後複製

【将查询结果导出到xml文件中】

mysql -u root -p --xml --execute=”SELECT语句” dbname > filename.xml
登入後複製

4.使用LOAD DATA INFILE方式导入文本文件

LOAD DATA INFILE 语句用于高速的从一个文本文件中读取行,并装入一个表中。文件名称必须为文字字符串。

LOAD DATA INFILE ‘路径+文件名.txt’ INTO TABLE tablename [OPTIONS] [IGNORE number LINES]
登入後複製

注意:如果导出的.txt文件中指定了一些特殊的字符,因此还原语句中也要指定这些字符,以确保还原之后数据的完整性和正确性;

--OPTIONS选项

● FIELDS TERMINATED BY ‘value’

● FIELDS [OPTIONALLY] ENCLOSED BY ‘value’

● FIELDS ESCAPED BY ‘value’

● LINES STARTING BY ‘value’

● LINES TERMINATED BY ‘value’

可以看到LOAD DATA 语句中,关键字INFILE后面的filename文件为导入数据的来源;

tablename表示待导入的数据表名称;

OPTIONS部分语法包括FIELDS部分的语法和LINES子句,其可能的取值有:

FIELDS TERMINATED BY ‘value’:
登入後複製
登入後複製

设置字段之间的分隔字符,可以为单个或者多个字符,默认情况下为制表符‘\t’

FIELDS [OPTIONALLY] ENCLOSED BY ‘value’:
登入後複製
登入後複製

设置字段的包围字符,只能为单个字符,如果使用了OPTIONALLY,则只有CHAR和VERCHAR等字符数据字段被包括;

FIELDS ESCAPED BY ‘value’:
登入後複製
登入後複製

设置如何写入或者读取特殊字符,只能为单个字符,即设置转义字符,默认值为“\”

LINES STARTING BY ‘value’:
登入後複製
登入後複製

设置每行数据开始字符,可以为单个或者多个,默认不使用任何字符

LINES TERMINATED BY ‘value’:
登入後複製
登入後複製

设置每行数据结尾的字符 可以为单个或者多个字符,默认值为‘\n’;

[IGNORE number LINES]
登入後複製

选项表示忽略文件开始处的行数,number表示忽略的行数。执行LOAD DATA语句需要FILE权限;

5.使用mysqlimport命令导入文本文件

使用mysqlimport命令可以导入文本文件,并且不需要登录MySQL客户端。

使用mysqlimport语句需要指定所需的选项、导入的数据库名称以及导入的数据文件的路径和名称。

mysqlimport命令的基本语法如下:

mysqlimport -u root -p dbname filename.txt [OPTIONS]
登入後複製

[options]取值:

● --fields-terminated-by=value:

         设置字段之间的分隔字符,可以为单个或者多个字符,默认情况下为制表符‘\t’

● --fields-enclosed-by=value:

         設定欄位的包圍字元;

● --fields-optionally-enclosed-by=value:

##」 #         設定欄位的包圍字符,只能為單個字符,如果使用了OPTIONALLY,則只有CHAR和VERCHAR等字符資料欄位被包括;

##● --fields-escaped-by=value:

         控制如何寫入或讀取特殊字符,只能為單個字符,並設定轉義字符,預設為反斜線「\」;

● --lines-terminated-end-by =value:

        設定每行資料結尾的字符,可為單一或多個字符,預設值為'\n'

● --ignore-lines=n

        忽略資料檔案的前n行;

注意:mysqlimport指令無法指定匯入資料庫的資料表名稱,資料表的名稱由匯入檔案名稱決定,即檔案名稱為表名,匯入資料之前該表必須存在。

相關建議:


mysql 資料庫 備份還原指令

 Mysql資料庫備份與還原指令備忘

#

以上是mysql備份還原庫指令方法解析(長文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板