はじめに
ここではMySQLの環境構築の内容をまとめておく。環境はWindows、MySQLのバージョンは8.0を想定している。
MySQLのインストールをダウンロード
"MySQL Community Downloads"からインストーラーをダウンロードする。
左下の「No thank, just start my download」をクリックすると、ダウンロードが始まる。
インストールのダウンロードが終わったら、インストーラーをクリックし、インストールを進める。ポップアップで色々聞かれるので、「はい」を選択。
「Choosing a Setup Type」は「Developer Default」を選択する。
「Check Requirment」は「Next」を選択すると、ポップアップで要件がうんたらと言われるので「Yes」を選択。
「Installation」は「Excute」を選択する。ライセンスの同意を求めるポップアップがでてくるので、同意しておく。これで必要な関連ソフトがインストールされる。
インストールが完了すると、「Next」が押せるようになるので、押す。
「Product Configuration」は「Next」を押す。
ここではレプリケーションは必要ないので「High Availabilty」も「Next」を押す。
「Type and Networking」はPortが3306かどうか確認しておく。「Next」を押す。
「Authentication Method」は「Use Strong Password ****」にチェックを入れ、「Next」を押す。
「Accounts and Roles」でMySQLのrootユーザーのパスワードを設定する。ユーザーも必要であらば、作成しておく。
「Windows Service」もそのままで、「Next」を押す。
「Apply Configuration」もそのままで、「Execute」を押す。
終わったら「Finish」を押す。
「Product Configuration」もそのままで、「Next」を押す。
「MySQL Router Configuration」もそのままで、「Next」を押す。
「Product Configuration」もそのままで、「Next」を押す。
「Connect To Server」では、先ほどの設定したrootユーザーのパスワードを入力し、テスト接続する。
「Apply Configuration」もそのままで、「Execute」を押す。
終わったら「Finish」を押す。
「Product Configuration」もそのままで、「Next」を押す。
「Installation Complete」では、このままMySQL Workbenchで再度アクセスできるかどうかを確認するために上のチェックは付けておく。
「MySQL WorkBench」が起動したら、rootでアクセスできるかどうか、先ほどのパスワードで試しておく。
コマンドプロンプトからMySQLを起動
コマンドプロンプトからMySQLを起動させるためには、PATHを設定する必要がある。左下Windosボタン右クリック >> システム >> システムの詳細設定 >> 環境変数
で「新規」を選択し、下記を入力して保存して、PCを再起動。
コマンドプロンプトを起動し、下記を入力。Welcome hogeがでれば問題なくMySQLにはいれている。
>mysql -u root -p >Enter password: **************** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18 Server version: 8.0.18 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
LOAD DATA INFILE
するために
まずはデータベースとテーブルを作る
mysql> create database ec; mysql> use ec; mysql> CREATE TABLE orders ( order_id INT NOT NULL, order_datetime DATETIME NOT NULL, user_id INT NOT NULL, branch_num INT NOT NULL, price INT NOT NULL, product_id INT NOT NULL, INDEX ind_id(user_id), INDEX ind_ord(order_id) ); mysql> CREATE TABLE users ( user_id INT, gender VARCHAR(255), area VARCHAR(255), age INT, INDEX id_index (user_id) );
--secure-file-priv option
を外す
C:\ProgramData\MySQL\MySQL Server 8.0
に移動する。my.ini
を開き、修正する。213行目あたりにある# Secure File Priv.
を修正して保存。
# Secure File Priv. secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads" ↓ # Secure File Priv. secure-file-priv=""
local_infile
の設定を修正
--local-infile
のデフォルトが0になっているので1を指定する。
mysql> SELECT @@local_infile; +----------------+ | @@local_infile | +----------------+ | 0 | +----------------+ 1 row in set (0.00 sec) mysql> SET PERSIST local_infile= 1; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@local_infile; +----------------+ | @@local_infile | +----------------+ | 1 | +----------------+ 1 row in set (0.00 sec)
そして、MySQLに--local_infile=1
オプションをつけてログインする。
>mysql -u root -p --local_infile=1 Enter password: ****************
これで行けるはずなんだが、なぜかファイルが見つからないエラーが返ってくるので、stackoverflowにあったように、ファイルを\
から\\
に変更したらいけた。
mysql> LOAD DATA LOCAL INFILE 'C:\\Users\\akisu\\Desktop\\cust_mst_1m.csv' INTO TABLE ec.users FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES; Query OK, 959676 rows affected (1 min 22.92 sec) Records: 959676 Deleted: 0 Skipped: 0 Warnings: 0 mysql> LOAD DATA LOCAL INFILE 'C:\\Users\\akisu\\Desktop\\orders_30m.csv' INTO TABLE ec.orders FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES; Query OK, 32434489 rows affected (1 hour 21 min 13.46 sec) Records: 32434489 Deleted: 0 Skipped: 0 Warnings: 0
内容を確認しておく。
mysql> select count(1) from users; +----------+ | count(1) | +----------+ | 959676 | +----------+ 1 row in set (1.49 sec) mysql> select * from users limit 5; +---------+--------+--------+------+ | user_id | gender | area | age | +---------+--------+--------+------+ | 53605 | Male | area_A | 39 | | 561254 | Female | area_G | 40 | | 971141 | Female | area_C | 24 | | 431258 | Female | area_B | 34 | | 826277 | Male | area_D | 45 | +---------+--------+--------+------+ 5 rows in set (0.00 sec) mysql> select count(1) from orders; +----------+ | count(1) | +----------+ | 32434489 | +----------+ 1 row in set (42.01 sec) mysql> select * from orders limit 5; +----------+---------------------+---------+------------+-------+------------+ | order_id | order_datetime | user_id | branch_num | price | product_id | +----------+---------------------+---------+------------+-------+------------+ | 2 | 2003-12-20 09:10:59 | 53605 | 1 | 200 | 33120 | | 2 | 2003-12-20 09:10:59 | 53605 | 2 | 110 | 28985 | | 2 | 2003-12-20 09:10:59 | 53605 | 3 | 410 | 9327 | | 2 | 2003-12-20 09:10:59 | 53605 | 4 | 230 | 45918 | | 2 | 2003-12-20 09:10:59 | 53605 | 5 | 330 | 30035 | +----------+---------------------+---------+------------+-------+------------+ 5 rows in set (0.01 sec)