MariaDB PR

Windows11からデータをインポートできなく苦戦しFTPサーバーを立ち上げた

FTP
記事内に商品プロモーションを含む場合があります

 

さて、DBとテーブルが完成したので早速2年分のCSVデータをテーブルにインポートしようと試みました。チャチャっとSQL文を作ってインポートを終わらせる予定だったのですが……

 

が、ここで予期せぬ問題にぶつかってしまい、回答を見つけるまで余分な時間を使ってしまったのです。

 

そもそもファイルを見つけられないと言う問題が発生

CSVデータをテーブルにインポートするには、load data infileと言うSQL文を使えば良いことまで調べてありました。

 

従って、テータをテーブルにインポートするSQL文は下記の通りに作り、何回も間違っていないか確認し実行したんです。

MariaDB [numbers3]> load data local infile "C:\Users\****\Downloads\numbers3jnb.csv" into table result fields terminated by ',' OPTIONALLY enclosed
by '"';

でも結果は、エラー表示になるんです。しかも、SQL文法の間違いではなく、指定しているファイルが見つからないと言うエラー。

もう一度ファイルの有るパスを確認しましたが問題ありません。しかし、何回やってもfile not foundになってしまうんです。

ハテ?どうしてだろうか?

 

落とし穴は単純だった

まず最初に見つけたのは、Windowsの場合ディレクトリ記号が¥となっております。しかし、Linuxの場合には/になるんです。

従って、C:\Users\****\Downloads\numbers3jnb.csv"の部分が、正しくはC:/Users/****/Downloads/numbers3jnb.csv"になるんですね。

 

何だ、単純ミスじゃないかと思い書き換えを実施して実行しましたが、相変わらずファイルが見つからないと怒られました。

 

ずっとSQL文を眺めていて、ハタと気がついたんです。

そうか!SQL文でファイルをインポートする場合、ファイルはローカル側に無ければいけないのだと言う事を。

今、ラズパイ側のMariaDBを動かしており、そのテーブルにCSVファイルをインポートしようとしていて、ファイルの場所を指定しているのはWindows11の場所なんですね。

これではファイルが無いと怒るわけです。

 

解決策はCSVファイルをラズパイ側のユーザーディレクトリにコピーしてあげれば良いんです。

が、Windows11からラズパイにコピー&ペーストなんかできません。

そこで解決策はFTPでWindows11からラズパイに送り込めば良いと言う事をおもいつきました。

しかし、ここでも問題が!

ラズパイは標準でFTPサーバーは入っていないので、インストールする必要があります。

 

FTPサーバーをインストールする

それでは想定外の作業としてFTPサーバーをインストールしていきましょう。

ラズパイにインストールするのはvsftpdと言うパッケージになります。

まず最初に、システムのアップデートがあるか確認をして、アップデートがある場合はアップデートして最新の状態にします。

$ sudo apt update

アップデートがあった場合は最新状態にアップデートします。

$ sudo apt upgrade -y

これで最新状態にシステムがなります。次がいよいよFTPサーバーのインストールです。

$ sudo apt install vsftpd

このコマンドを実行すると以下のような表示がでてインストールが完了します。

パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
以下のパッケージが新たにインストールされます:
vsftpd
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
147 kB のアーカイブを取得する必要があります。
この操作後に追加で 357 kB のディスク容量が消費されます。
取得:1 http://deb.debian.org/debian bullseye/main arm64 vsftpd arm64 3.0.3-12 [147 kB]
147 kB を 0秒 で取得しました (485 kB/s)
パッケージを事前設定しています …
以前に未選択のパッケージ vsftpd を選択しています。
(データベースを読み込んでいます … 現在 98809 個のファイルとディレクトリがインストールされています。)
…/vsftpd_3.0.3-12_arm64.deb を展開する準備をしています …
vsftpd (3.0.3-12) を展開しています…
vsftpd (3.0.3-12) を設定しています …
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /lib/systemd/system/vsftpd.service.
man-db (2.9.4-2) のトリガを処理しています …

完了しましたので、動作環境の設定をします。

 

 

動作環境の設定

既にFTPサーバーは稼働していますので、一旦」設定のために停止させます。

$ sudo service vsftpd stop

これでサービスが停止しましたので、現状のオリジナルの設定ファイルをバックアップとしてコピーします。

それではvsftpd.confの設定を一部変更します。

変更するのは以下の3つの項目で、オリジナルでは#でコメントアウトされていますから、この#を取り除きコメントアウトを解除します。

  1. ユーザ権限設定
  2. ASCIIモードの設定
  3. ユーザ権限

それではviエディターを用いて修正をしていきましょう。

 

ユーザー権限設定

ユーザー権限設定をしているのは下記の3箇所の#を取り除きます。

#local_enable=YES -> local_enable=YES
#write_enable=YES -> write_enable=YES
#local_umask=022 -> local_umask=022

 

ASCIIモードの設定

ASCIIモードの設定は下記の2箇所を同じく#を外します。

#ascii_upload_enable=YES     -> ascii_upload_enable=YES
#ascii_download_enable=YES -> ascii_download_enable=YES

 

ユーザー権限

ユーザー権限の設定は下記2箇所を同じく#を外します。

#chroot_local_user=YES                       -> chroot_local_user=YES
#chroot_list_enable=YES                      -> chroot_list_enable=YES

 

以上の設定変更が完了したらファイルを書込終了させ、停止していたFTPサーバーを再起動させます。

 

 

FTPサーバーの再起動と接続確認

設定ファイルの書き換えのためFTPサーバーは停止させていましたので、再度起動をさせます。

$ sudo service vsftpd start

このコマンドでFTPサーバーは起動します。何かの拍子に電源を切ったりしたとき、電源再投入ではFTPサーバーは自動で立ち上がりませんので、電源投入で自動起動する設定も行っておきます。

$ sudo update-rc.d -f vsftpd defaults

 

これで電源投入後の自動起動するrc.dと言うファイルに修正が掛かり、電源投入後にFTPサーバーが自動で立ち上がるようになりました。

 

それでは実際にFTP接続ができるのか、Windows用のFTPアプリを使用してラズパイに接続してみます。

FTP

ちゃんと接続ができるようになりました。

後はCSVファイルを転送するだけです。しかし、ここまでで結構な時間を使ってしまいましたので、転送を行ってトラブルが出と対処できないので、転送は後日にします。

 

 

まとめ

簡単にデータをインポートできるト思っていましたが、ファイルのある環境がローカルで無ければいけないと言う事に気がつくまで、結構な時間を費やしました。

そこが分かってからも、FTPサーバーが稼働していないとFTP接続ができない等、付帯する小さなトラブルが続出です。

まあ素人なんで、トラブルは付きものですよね。

このトラブルを解決していくことで、経験という資産が増えていくと思います。

前向きに、トラブルを楽しんでいこうと思っております。

 

スポンサーリンク



 

スポンサーリンク
ナチュラム人気商品