ホームページ  >  記事  >  データベース  >  MySQL のバックアップおよび復元ライブラリのコマンド方法の分析 (長い記事)

MySQL のバックアップおよび復元ライブラリのコマンド方法の分析 (長い記事)

php是最好的语言
php是最好的语言オリジナル
2018-08-07 17:35:5617548ブラウズ

mysql データベースのバックアップと復元の方法については、まず mysqlhotcopy ツールについて説明します。次に、mysqlhotcopy ツールを使用してデータを復元し、最後に MySQL コマンドを使用して復元します。データベーステーブルをエクスポートします。詳細については、この記事を読む必要があります。

MySQL のバックアップおよび復元ライブラリのコマンド方法の分析 (長い記事)

1. データのバックアップ

予期せぬ事態が発生した場合の損失を最小限に抑えるために、データベースを定期的にバックアップします。

1. mysqldump コマンドを使用してバックアップします

mysqldump コマンドを実行すると、データベースがテキスト ファイルにバックアップされます。これらのステートメントはテーブルを再作成し、データを挿入します。

【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 パラメータを使用した後、少なくとも 1 つのデータベースの名前を指定し、複数のデータベースを区切るにはスペースを使用する必要があります

【システム内のすべてのデータベースをバックアップします】

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 タイプのテーブルのみをバックアップできます

1. MySQL コマンドを使用して復元します

mysql -u username -p [dbname] < filename.sql

.sql ファイルは mysqldump です。ツールによって作成されたファイルには、データベースを作成するためのステートメントが含まれています。実行時にデータベース名を指定する必要はありません。

MySQL サーバーにログインしている場合は、ソースを使用することもできます。 SQL ファイルをインポートするコマンド。

source filename

ヒント: ソース コマンドを実行する前に、use ステートメントを使用してデータベースを選択する必要があります。そうしないと、回復プロセス中にエラーが発生します。

2. データベース ディレクトリに直接コピーします。

データベース ファイルをコピーしてデータベースをバックアップした場合は、バックアップしたファイルを MySQL データ ディレクトリに直接コピーして復元できます。

この方法で復元する場合、バックアップデータベースと復元するデータベースサーバーのメジャーバージョン番号を同じにする必要があります。そして、この方法は MyISAM エンジンのテーブルにのみ有効であり、InnoDB エンジンのテーブルには使用できません。復元を実行する前に MySQL サービスを閉じ、バックアップ ファイルまたはディレクトリを MySQL データ ディレクトリで上書きしてから開始します。 MySQL サービス。

Linux/Unix オペレーティング システムの場合、ファイルをコピーした後、ファイルのユーザーまたはユーザー グループを、mysql が実行されているユーザーとグループに変更する必要があります。通常、ユーザーは mysql で、グループも mysql です。 3. Mysqlhotcopy クイック リカバリ

mysqlhotcopy MySQL サーバーの実行が停止した場合、バックアップされたデータベース ファイルを MySQL が保存されている場所 (MySQL データ フォルダー) にコピーし、データベースを再起動するために使用することもできます。 MySQL サービス。

この操作を root ユーザーとして実行する場合は、データベース ファイルの所有者を指定する必要があります

chown -R mysql.mysql /var/lib/mysql/dbname
cp -R /usr/backup/test usr/local/mysql/data

このステートメントを実行した後、サーバーを再起動すると、MySQL がバックアップ状態に復元されます

ヒント:復元するには、DROP を使用してください。さらに、MySQL の異なるバージョンに互換性がある必要があります。

データベースの移行は、1 つのシステムからデータを移動します。別のものに。データ移行は次の理由で発生します:

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:

) 」 CHAR や VERCHAR などが含まれます。

● --fields-escaped-by=value:

単一文字のみを使用できる特殊文字の書き込みまたは読み取り方法を制御し、変換を意味する文字を設定します。デフォルトはバックスラッシュです。 "";

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

●。 --ignore-lines=n

データ ファイルの最初の n 行を無視します

注: mysqlimport コマンド。インポートされたデータベースのテーブル名は指定できません。データ テーブルの名前はインポートされたファイルの名前によって決まります。つまり、ファイル名がテーブル名として使用されます。テーブルはデータをインポートする前に存在している必要があります。

関連する推奨事項:

mysql データベースのバックアップと復元コマンド

Mysql データベースのバックアップと復元コマンドのメモ

以上がMySQL のバックアップおよび復元ライブラリのコマンド方法の分析 (長い記事)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。