質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.33%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

395閲覧

SQLiteのデータをMariaDBのテーブルにインポートしたい

dendoushishi

総合スコア9

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

1クリップ

投稿2025/02/03 01:37

編集2025/02/03 08:06

実現したいこと

pi4:SQLite3データベースのデータをwin10PC:XAMMP:MariaDBのテーブルにインポートしたい!

発生している問題・分からないこと

1.pi4:Node-RED を STOPして、pi4:SQLite3 DB Write 停止
2.win10PC:WinSCP を使用して DBごと win10:PC にコピー
3.win10:PC DB browser(SQLite)で2項のDBを開く
4.win10:PC:XAMMP:MariaDB にインポートしたいテーブルデータを
csv フォーマットにてエクスポート
5.win10:XAMMP:phpMyAdmin にてインポート先のテーブル・カラムを作成(データは空状態)
6.win10:XAMMP:phpMyAdmin にて 4項:csvファイル をインポート
7.4項csvファイルをテキストで開いてみると1,775,010行 あるが、
XAMMP:phpMyAdmin にてデータ表示にて確認すると 69,495行 しか
インポートしていない(クエリの実行時間:0.0995秒)

イメージ説明

phpMyAdmin 設定内容を記します
・ファイルの文字セット:utf-8
・部分インポート:チェック外す
・その他のオプション:外部キーのチェック無効
・フォーマット:csv
・カラムの区切り記号:,
・カラム囲み記号:なし
・カラムのエスケープ記号:なし
・行の終端記号:auto
・次の行の数をインポートする:なし
・カラム名:なし

該当のソースコード

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

https://iifx.dev/ja/articles/44460450 の記事を参考に
php.iniファイルのupload_max_filesizeとpost_max_sizeの設定を、
インポートするファイルサイズ(84.2Mbyte)よりも大きく設定
upload_max_filesize = 200M
post_max_size = 200M
さらに念の為、以下も変更
default_socket_timeout=600

補足

pi4 から MQTT サブスクリプション → winPC:Node-RED:MariaDB への書込みはできています。
よって、テーブル作成ミスは無いと思います。
今まで蓄積してきた pi4:SQLite DB データを移植・Web表示したいのです。
以上。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsdfan

2025/02/03 06:07

元のsqliteのデータの行数も1,775,010なのでしょうか?改行を含むデータがあるとcsvの行数とは一致しなくなる場合があると思います。 あとは、csv の 69,495行目付近をエディタで確認して、変なことがおこりそうな値がないか確認してみてはどうでしょう。
dendoushishi

2025/02/03 07:56

コメントありがとうございます! ご指摘の通り、undefined を含む行が多数見つかりました。 ①DB browser にて undefined を含む行を削除 ②commit後に変更点書込み ③再度csvエクスポート、メモ帳にてundefined が含まれていない事を確認 ④phpMyAdminにてインポートするも同じような位置でインポート停止 ⑤停止位置データをメモ帳にて確認、異常が無いので停止位置以前のデータを削除し、再度インポート ⑥69,155行にてインポート停止 ⑦csvファイルを月毎に分割し、それぞれ個別にインポートしても同じような行数でインポート停止 バッファ容量設定か、タイムアウト設定のような気がします。 以上
dodox86

2025/02/04 03:06

あくまでMariaDBのテーブルにCSVファイルをインポートしたいのであれば、せっかくローカルマシン(localhost)で作業されているのですから、phpMyAdminを使わずコマンドラインからLOAD DATA LOCAL INFILEでCSVファイルを直接インポートしてみてはいかがでしょうか。phpMyAdmin(を経由してのPOSTの)問題か否か、切り分けることができると思います。 https://mariadb.com/kb/en/load-data-infile/
dendoushishi

2025/02/04 03:08

ご指摘ありがとうございます! 早速試してみます。 以上。
guest

回答1

0

自己解決

bsdfan様・dodox86様 やっとできました!!!アドバイスありがとうございました!
1.php.ini を変更する
①XAMPP Control Panelを起動
②ApacheーConfigーphp(php.ini) を選択し、php.ini を開く
③以下、私が変更した内容です。
なお、あちこちのネット情報を基に変更しましたので本当に正しいか分かりません。
また、変更箇所は変更した内容をコメントで残すか、変更前にオリジナルファイルを別名でコピーして下さい。
・post_max_size=800M
・upload_max_filesize=800M
・default_socket_timeout=6000
・mysqli.allow_local_infile = On (コメントアウトを外し有効化)
・mysqlnd.net_read_buffer_size = 32768 (コメントアウトを外し有効化)
・mysqlnd.net_read_timeout = 31536000 (コメントアウトを外し有効化)
④php.ini を閉じて、XAMPP Control Panel-Module のApache、MySQL を 再起動する 
2.https://laboratory.kazuuu.net/start-and-operate-mysql-started-with-xampp-from-the-command-prompt/
を参考に コマンドプロンプトを開き、mysql にログインします。
①Windows10のコマンドプロントを開く
②cd C:\xampp\mysql\bin と入力し enter を押すと ディレクトリが変更される  
③C:\xampp\mysql\bin>mysql -u root -p と入力し enter を押す
④Enter password: とパスワードを求められるので、設定したパスワードを入力しログインする
⑤MariaDB [(none)]> show databases; で インポートしたいデータベースが存在するか確認する

3.https://qiita.com/Suntory_N_Water/items/4d3e602129642e22d6be を参考にインポートする
なお、2-⑤で確認したデータベースにはインポート先のテーブルを作成しておく事
①メモ帳等で以下コマンドを作成して置き、コピー&ペーストで 2-⑤の画面に貼り付け Enterを押す
(デスクトップ上の p_data3.csv を データベース名:patodb3 テーブル名:p_data にインポートする例)
load data local infile 'C:/Users/user/Desktop/p_data3.csv' into table patodb3.p_data fields terminated by ',';
②インポート終了まで待つ (エラー発生しなかったのでエラー処理は各自お願い致します。)
③インポートが終了したら、XAMMPコントロールパネルーMySQLーAdmin で phpMyAdmin を起動し
インポート先のテーブルを選択してデーターが全てインポートされているか確認する

補足
1.bsdfan様にご指摘頂いた通り、csvファイルにおかしなデーターが入っていないか確認が必要です
①DB browser で SQLiteデータを開き、不要データーが無いか確認
②SQLコマンドで削除・commit・変更書込み・csvエクスポート
エクスポート時は以下フォーマットにしました
フィールド区切り:,
引用符文字:無し
改行文字:Windows CR+LF
③メモ帳等で②ファイルを開き不要データが削除されているか再度確認後、インポート
2.SQLite→MariaDB(MySQL)への移行は色々記述を変えなければならず、試行錯誤が必要です
(私はかなり難儀しました・・・・)
複数データベースを扱う事が予想される場合、最初からMariaDBにする事をおすすめ致します。
Node-RED+MQTT でデータ蓄積していましたが 参考資料が SQLite を使用していたので
SQLiteを使用しました。
その後、Node-REDに MySQLノード を組込んで 本システムを立ち上げています
PHPプログラム変更でも結構難儀しました・・・・・・・
以上。

投稿2025/02/04 07:06

編集2025/02/04 07:13
dendoushishi

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2025/02/04 07:26

お疲れ様でした。解決できて何よりでした。PHPでの巨大ファイル、データのPOSTについてはteratailでも過去、いくつか質問や回答が挙がっていたように思います。 個人的な所感ですが、これはPHPのみならずTCP/IPやHTTP、WEBサーバー等の要素、様々な要因が重なってくるので、いったんハマると解決が難しくなるように感じています。(因みに私はPHPはほとんど使っていないので、偉そうなことは申せませんが) Raspberry Pi4、MQTT、Node-RED等、構成が面白そうで興味を持った為コメントしましたが、保守も頑張ってください。
dendoushishi

2025/02/04 08:05 編集

ありがとうございます!!! 現在 ESP32:80台+pi4:5台 で稼働率データ表示を行っています pi4だと表示に時間がかかる(私のプログラムがちゃちいのが原因ですが・・・)のと、 php稼働時にSQLiteデーター書込みが止まる(Node-RED経由による)ので PCに集約している最中です 頑張ります!
dodox86

2025/02/04 08:21

Node-RED経由でも、バッファーにいったん貯めてSQLite3に逐次書き込んでいく別の専用のプロセスを作るなどしてNode-REDからはそれに移譲する、などとすればRaspberry Pi4でも充分いけそうな気はしますけどね。CPUパワーの高いPCでDBSを運用するのも将来性が高くて良いかもしれませんね。面白そうなのでがんばってください。
dendoushishi

2025/02/04 14:50

未経験者への引き継ぎを考えてNODE-REDを使用しました。 データ蓄積だけなら余裕ですがphp+SQL+HTML+CSS での稼働率表示処理が非常に重いです。 会社では私だけDX担当となっております。 県の工業技術センターに聞くか 書籍やネット情報を漁るか こうして皆様に助けて頂くしかありません。 よってお亡くなりになった前任者の成果物と資料を解析、県の工業技術センターのキットを改造しながら拡張したのと私のプログラミング能力不足でpi4の能力超え気味になってしまいました。 約3年程度の経験しかないジジイなので 時間はかかりましたがかなり見やすい表示になっていると思います。 これから順次PCに移植予定です。 今後とも宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.33%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問