關於mysql資料庫備份與還原的方法,這裡首先講到備份的工具:mysqlhotcopy,使用mysqlhotcopy工具可進行快速備份,然後資料還原,使用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備份還原庫指令方法解析(長文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器