MySQLは1億のテストデータを素早く挿入します

MySQLは1億のテストデータを素早く挿入します

1. テーブルを作成する

1.1 テストテーブルt_userを作成する

テーブル `t_user` を作成します (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c_user_id` varchar(36) NOT NULL DEFAULT '' COMMENT 'ユーザーID',
  `c_name` varchar(22) NOT NULL DEFAULT '' COMMENT 'ユーザー名',
  `c_province_id` int(11) NOT NULL COMMENT '州ID',
  `c_city_id` int(11) NOT NULL COMMENT '都市ID',
  `create_time` datetime NOT NULL COMMENT '作成時刻',
  主キー (`id`)、
  キー `idx_user_id` (`c_user_id`)
)ENGINE=InnoDB デフォルト文字セット=utf8mb4;

1.2 一時テーブルの作成

テーブル `tmp_table` を作成します (
  `id` int(11) NULLではない、
  主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8; 

2. データを生成する

2.1 Pythonを使用して[1億]レコードのデータファイルを生成する(これには少し時間がかかります)

python -c "i が範囲 (1, 1+100000000) 内にある場合: print(i)" > base.txt 

2.2 生成されたファイルを一時テーブルtmp_tableにインポートする

対応するデータベースを探す

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
 
mysql> テストを使用します。
データベースが変更されました
mysql> テーブルを表示します。
+----------------+
| テスト中のテーブル |
+----------------+
| 学生 |
| t_ユーザー |
| tmp_テーブル |
+----------------+
セット内の 3 行 (0.00 秒)

インポートコマンドを実行する

mysql> 'E:/base.txt' のデータをロードし、テーブル tmp_table に置き換えます。
エラー 1290 (HY000): MySQL サーバーは --secure-file-priv オプションで実行されています 
したがって、この文は実行できません
マイSQL>

MySQL では secure_file_priv がデフォルトで有効になっていないため、データのインポート時にエラーが発生する可能性があります (このパラメータは、LOAD DATA、SELECT ... INTO OUTFILE ステートメント、および LOAD_FILE() 関数の実行など、データのインポートおよびエクスポート操作の影響を制限するために使用されます。これらの操作を行うには、ユーザーに FILE 権限が必要です)。

解決策: MySQL 構成ファイル (my.ini または my.conf) にsecure_file_priv = 文件所在的路徑を追加し、MySQL を再起動します。独自のファイルを配置するパスを追加するだけです。

「%secure%」のような表示変数を使用できます。まず、設定を確認します。

mysql> '%secure%' のような変数を表示します。
+--------------------------+-------+
| 変数名 | 値 |
+--------------------------+-------+
| require_secure_transport | オフ |
| secure_auth | オン |
| secure_file_priv | NULL |
+--------------------------+-------+
セットに 3 行、警告 1 件 (0.00 秒)

例:

secure_file_prive=null mysqldのインポートとエクスポートを制限 secure_file_priv=/var/lib/mysql-files/ mysqldの/var/lib/mysql-files/ディレクトリへのインポートとエクスポートを制限 secure_file_priv=' ' mysqldのインポートとエクスポートを制限しない

注意: 設定は [mysqld] ノードの下に追加する必要があります。パスを引用符で囲むかどうかについては、次を試してください。

まず MySQL を再起動して設定を確認します。

mysql> テストを使用します。
データベースが変更されました
mysql> '%secure%' のような変数を表示します。
+--------------------------+-------+
| 変数名 | 値 |
+--------------------------+-------+
| require_secure_transport | オフ |
| secure_auth | オン |
| secure_file_priv | E:\ |
+--------------------------+-------+
セットに 3 行、警告 1 件 (0.00 秒)

そして再インポートします:

mysql> 'E:/base.txt' のデータをロードし、テーブル tmp_table に置き換えます。
クエリは正常、100000000 行が影響を受けました (3 分 53.42 秒)
レコード: 100000000 削除: 0 スキップ: 0 警告: 0
 
マイSQL>

数十億のデータ、233.42秒。他の人のデータを見ると、ほぼ同じです。

3. 一時テーブルを基本データとして使用し、t_userにデータを挿入します。

1 億のデータ ポイントには約 30 分かかります。 。 。 (おそらくコマンドラインから直接実行する方が速いでしょう...)

挿入されたデータの作成時刻をよりランダムにするには、作成時刻フィールドを更新します。

mysql> UPDATE t_user SET create_time=date_add(create_time, 間隔 FLOOR(1 + (RAND() * 7)) 年);
クエリは正常、100000000 行が影響を受けました (7 分 24.17 秒)
一致した行: 100000000 変更: 100000000 警告: 0
 
mysql> UPDATE t_user SET create_time=date_add(create_time, 間隔 FLOOR(1 + (RAND() * 7)) 年);
クエリは正常、100000000 行が影響を受けました (8 分 2.49 秒)
一致した行: 100000000 変更: 100000000 警告: 0

この時点で1億件のデータの挿入が完了します。

4. 参考

MySQLで数千万のテストデータを素早く作成する方法

MySQLサーバーは--secure-file-privオプションで実行されています

これで、MySQL に 1 億個のテスト データをすばやく挿入する方法についての記事は終了です。MySQL に 1 億個のデータを挿入する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL に大量のデータを挿入する 4 つの方法の例
  • MySQLに何百万ものテストデータを素早く挿入する方法
  • MySql で 1 つのテーブルから別のテーブルにデータを挿入するための実装コード
  • 1 つの MySQL ステートメントで複数のレコードを挿入する
  • MYSQL バッチ挿入データ実装コード
  • MySQLのヒント: データの挿入(レコードの追加)の速度を上げる
  • MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法
  • MySQL データベースにデータを挿入するときに疑問符 (?) が表示される問題の解決方法

<<:  IDEA で Docker を WSL2 にデプロイする詳細なプロセス

>>:  CSS3は、ズームと回転を実現するためにscale()とrotate()を使用します。

推薦する

Hadoop 2.x と 3.x の 22 ポイントの比較、Hadoop 3.x の 2.x に対する改善点

質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...

MySQL 8の新機能ウィンドウ関数の役割

MySQL 8.0 の新機能は次のとおりです。 Unicode 9.0 をすぐに完全にサポートウィン...

中国語と英語のフォント名の比較表(FounderとArphicを含む)

CSS ファイルでは、フォント名が文字化けしていることがよくあります。これは、作成者が中国語フォン...

簡単な手順で純粋な CSS3 で 3D 反転効果を実現

フロントエンド開発者の必須科目であるCSS3は、多くの基本的なアニメーション効果を実現するのに役立ち...

Redo ログと Undo ログに基づく MySQL クラッシュ回復の分析

目次MySQLクラッシュ回復プロセス1. ブラックボックス下のデータフローを更新する2. やり直しロ...

Linuxで大きなファイルを素早くコピーする方法

データをコピーリモートでデータをコピーする場合、通常は rsync コマンドを使用しますが、小さなフ...

Firefox で Flash を再生するためのオブジェクトとパラメータの書き方

コードをコピーコードは次のとおりです。 <object classid="clsid...

HTML DOM入門_PowerNode Javaアカデミー

DOMとは何ですか? JavaScript を使用すると、HTML ドキュメント全体を再構築できます...

MySql 範囲内の検索時にインデックスが有効にならない理由の分析

1 問題の説明この記事では、確立された複合インデックスをソートし、レコード内の非インデックス フィー...

html2canvas で破線境界線を実装する例

html2canvas は、HTML 要素からキャンバスを生成するライブラリです。描画されるキャンバ...

Ubuntu Dockerのインストールと使い方

目次1. 公式インストールスクリプトを使用した自動インストール手動インストール古いバージョンをアンイ...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

MySQLソースコマンドの使い方の紹介

目次ネット上の質問から生まれた思考MySQL ソースコマンドネット上の質問から生まれた思考今日仕事中...

LinuxでIPを表示する方法の例

ネットワークの問題のトラブルシューティング、新しい接続のセットアップ、ファイアウォールの構成を行うと...

ユーザー名が使用可能かどうかを確認するVueメソッド

この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...