一度にTiDBデータベースにデータをインポートした例を記録する

5151 ワード

データのエクスポート
今日Mysqlのあるライブラリからテーブルをエクスポートするのに20分ぐらいかかりましたが、しばらく待ってやっとエクスポートに成功しました.ファイルのサイズを確認します.
[tidb@:vg_adn_CkhsTest ~]$du -h ./creative_output.sql 
41G    ./creative_output.sql

このファイルはかなり大きくて、41 Gぐらいあります.
エクスポートされたコマンドは簡単です:mysqldump-hhost-uname-ppwdテーブル名>xxx.sql
このように導き出して、私たちは結果を待つだけでいいです.
データベースをエクスポートするには、mysqldump-hhost-uname-ppwd--databaseライブラリ名>xxxを使用します.sql.つまり、パラメータを1つ追加しました.
 
データのインポート
mysqldumpでエクスポートしたデータを使用して、開くとテーブル構造が含まれていることがわかります.Csvのような純粋なテキストデータではないので、sourceコマンドを使用してインポートデータに行けばいいです.
本人がデータのバックアップとリカバリのコマンドをいくつか間違えたため、もともとすぐにできたことに数時間かかりました.多くの穴を踏んだが,やはり収穫があった.
注意:mysqldumpがエクスポートしたデータは、テーブル構造を含むデータであり、mysqlのステータスパラメータなども含まれています.純粋なテキストデータではありません.そこでここでは最初にload dataコマンドを使ってデータをインポートしましたが、いつもエラーが発生していることに気づきました.load dataコマンドのパラメータが多いのは言うまでもありません.
load dataパラメータを使用してデータをインポートする場合は、インポートしたファイルが純粋なテキストファイルであるかどうかを確認します.load dataはcsvタイプのようなテキストをインポートするのに適しています.このタイプのテキストはデータしかないので、まずデータベースを作成してからテーブルの構造を作成しなければなりません.私は今回、テーブル構造を作成してからデータをインポートしようとしました.この過程で、私の心の中では変な感じがしました.私も前にテーブルのバックアップをしたことがあるので、その時はテーブルを構築していませんが、直接テーブルをデータベースにインポートすればいいのですが、どのようにインポートしたのか思い出せません.後でネットで探してみるとload dataコマンドがインポートできるので、私はずっと穴を踏んでいます.ずっとload dataコマンドでエラーループ.
ここで訂正すると、mysqldumpがエクスポートしたデータはmysqlコマンド(クライアントがデータベースにログインしていない)またはsourceコマンド(クライアントがmysqlをリンクした後)を使用してデータをインポートします.
1、まずエラーが発生しました.
# mysqlimport -uabc -p'123' -h db1 -P 3306 DB a.txt
mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table:

mysqlがデータをインポートするディレクトリを制限しているので、修正すればいいです.
--secure-file-privパラメータを見てみましょう
> show global variables like 'secure_file_priv';
+------------------+-----------+
| Variable_name    | Value     |
+------------------+-----------+
| secure_file_priv | /dev/null |
+------------------+-----------| 

 
このパラメータは動的パラメータではありません.サービスを有効にするには、プロファイルを追加する必要があります.
1)インポートエクスポートを制限しない
# cat /etc/my.cnf
    [mysqld]
    secure_file_priv = ""

2)特定のディレクトリに制限
# cat /etc/my.cnf
    [mysqld]
    secure_file_priv    = /tmp

--/tmpディレクトリのデータファイルのみをインポートできます.他のディレクトリのファイルはインポートできません.
2、load dataの時、いくつかのエラーが発生しました:例えば:
>load  data .........................
error(2013):Lost connection to MySQL server during query

このようなエラーは、クライアントがmysqlデータベースに接続する遅延エラーです.さらに深く言えば、sql文の操作時間が長すぎて、クエリーやインポートされた文が大きすぎるためです.
私たちはこのようにすることができます.
まずmax_を表示しますallowed_packetの値はいくらですか.
show VARIABLES like '%max_allowed_packet%'; 

小さいと思うならmysqlクライアントでmax_allowed_packetなどいくつかの項目で大きな値を設定します.KB単位
例:
set global max_allowed_packet = 50000000

set global wait_timeout=2880000
set global interactive_timeout = 2880000

この3つの中で私たちはまず1つを設定して、まず1つ目の設定の値を少し大きくして、上のこの例は私がすでに設定したので、あなたの調査はこんなに大きくないかもしれませんが、私のファイルは40以上のGなので、私は50 Gのサイズに設定して、一般的にファイルのサイズによって設定します.
最初の設定後も同じ問題が発生した場合は、残りの2つの値も大きく設定します.注意:私の上は自分で設定したほうが大きいです.
最後に、設定が完了したらクライアントを終了して再接続すると有効になります(mysqlデータベースを再起動するわけではありません).再接続すると、この値が変更した値になります.ただしmysqlを再起動するとこの値は再復元されますので、永続的に有効にするには、プロファイルにこの3つのパラメータを追加したほうがいいです.
 
私にとって、本来インポートしたデータはload dataコマンドを使用してインポートすべきではなく、上記の状況が発生したため、パラメータを修正しても解決していません.また、私のシステムのエラーは非常に速く、あなたがload dataコマンドを実行した後、すぐにエラーに戻ることです.この点に注意してください.遅延時間を超えていないのにエラーを報告しているのは、それ自体が疑わしいことです.
今回の実験額は2人のブロガーを参考にした.
https://blog.csdn.net/lovemysea/article/details/79121154
https://www.aliyun.com/jiaocheng/1125866.html
リファレンス接続:http://blog.51cto.com/11580138/1931925
転載先:https://www.cnblogs.com/FengGeBlog/p/9965656.html