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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1451閲覧

SQLの2003や2013というエラーを回避しつつ,4GB以上のデータベースを管理したい

fujicho_100

総合スコア1

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/02 09:50

編集2021/06/02 10:33

前提・実現したいこと

はじめまして.
MySQLを利用して1年分のデータを読み込んでSQL上で管理したいです.
このデータは2016年6月分だけで2.7GBあり,2016年7月分をPythonを用いて同様に追加で読み込んだ際に4GBを超えるためエラーが出ました.
なお,データはHDDに保存したCSVファイル(例:E:/1-2/OUT1-2_20160601/data.csv)であり,6月1日,2日…30日と1日分で1ファイルとなっています.
Python上では以下のようなプログラムで読み込みを行いました.

Python

1conn = MySQLdb.connect( 2 db="database_spd", 3 user="root", 4 passwd='root', 5 host='localhost', 6 local_infile=True, 7 charset="utf8" 8) 9 10# カーソルを作る 11#月によって日数が違うことに注意(28から31の間:特にうるう年に注意) 12cursor = conn.cursor() 13days = ['01','02','03','04','05','06','07','08','09','10', 14'11','12','13','14','15','16','17','18','19','20', 15'21','22','23','24','25','26','27','28','29','30','31'] 16#SQL読み込み 17for i in days: 18 sql = ''' 19 use database_spd; 20 select @@sql_mode; 21 set autocommit=0; 22 start transaction; 23 load data infile 'E:/1-2/OUT1-2_201606''' + i + '''/data.csv' into table data_1_2 24 fields 25 terminated by ',' 26 enclosed by '"' 27 lines 28 terminated by '\r\n' 29 ( data_a, data_b, data_c, data_d, data_e, @data_v, @height, data_f, @data_1, @data_2, 30 @ver, data_g, @in, @out, @distance, data_h, @no, @direction, @whois, data_i ) 31 set 32 data_v = case @data_v when '' then null else @data_v end, 33 height = case @height when '' then Null else @height end, 34 data_1 = case @data_1 when '' then Null else @data_1 end, 35 data_2 = case @data_2 when '' then Null else @data_2 end, 36 ver = case @ver when '' then Null else @ver end, 37 in = case @in when '' then Null else @in end, 38 out = case @out when '' then Null else @out end, 39 distance = case @distance when '' then Null else @distance end, 40 no = case @no when '' then Null else @no end, 41 direction = case @direction when '' then Null else @direction end, 42 whois = case @whois when '' then Null else @whois end; 43 ''' 44 cursor.execute(sql) 45 46 47users = cursor.fetchall() 48for user in users: 49 print(user) 50 51cursor.close() 52conn.commit()# コミットし、更新を反映->こないとDBにデータ流れない 53conn.close() # 接続解除

そこでデータの制限を緩めるべくMySQL上で設定を行ったのですが,その設定がよくなかったためか

MySQL

1Error Code: 2013. Lost connection to MySQL server during query

というエラーや

MySQL

1Error Code: 2003 Unable to connect to localhost

というエラーが出て,MySQLをMAMPでボタンを押して起動させてもすぐサーバーが落ちるようになってしまいました.

データの詳細

この際,2018年6月分のデータ概要は以下のようになっています.
![

また,現在使用中の環境では

MySQL

1select @@global.myisam_data_pointer_size;

と入力した場合

MySQL

1+-----------------------------------+ 2| @@global.myisam_data_pointer_size | 3+-----------------------------------+ 4| 6 | 5+-----------------------------------+

と返ってきます.そのため,256TBまでは問題ないはずです.

データの制限を緩めるためにやったこと

これが(おそらく)裏目に出ましたが,ここに記載します.

MySQLの公式マニュアルを参考にして,以下のようにテーブル制限値を余裕のある値にしました.

MySQL

1ALTER TABLE database_spd.data20_1_2 MAX_ROWS=1000000000000, AVG_ROW_LENGTH=400;

これを打ち込んでから最初の方に書いた2003や2013といったエラーが出るようになったのですが,
SQLのデータベース接続に影響を与えず,なおかつ4GB以上のデータを1つのデータベースファイルで管理する方法はあるのでしょうか.
ご回答よろしくお願いいたします.

補足情報(FW/ツールのバージョンなど)

環境:
Windows 10 Pro 64bit
MAMPによるMySQLインストール
MySQL Workbench使用

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

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

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

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

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

m.ts10806

2021/06/02 09:54

WindowsにMAMPという時点で適性から外れるように思いますが(一般的にはXAMPP。でもPHP使わないなら無用の長物) それよりも「なぜMySQLを採用するのか」という点ではないでしょうか。 確かにその容量はどこかで持つことになるとは思うのですが、 そもそもそのデータがどのように作られ、どのように使われるのか 本当に全ての項目が必要なのか、とか 情報の整理が必要に思います。あまり現実的な容量ではないですし
sazi

2021/06/02 09:58 編集

> 4GBを超えるためエラーが出ました. これはphyton側の処理でのエラーなのでは? MySQLがデフォルトでも、その程度の容量でエラーにはならないと思いますし。
fujicho_100

2021/06/02 10:07

ご回答ありがとうございます. まず,MAMPをインストールした理由は参考にしている書籍の 西沢夢路:「基礎からのMySQL第3版」(SBクリエイティブ,2017)に紹介してあり,参考にしたためです. 観測された回数が大量にあり,その度ににデータがとられているため,Excelでとても計算・抽出できる行数ではないためにMySQLを使用しています. また,Python側のエラーというのは考えていなかったことでした.これが解決しない場合,月(2016年6月,2016年7月…)ごとにテーブルを作って整理することも考えています.
fujicho_100

2021/06/02 10:09

また追記ですが,2003や2013といったエラーを解決しなくては月ごとにテーブルを作って読み込むことも難しい八方塞がりの状態なので,そのあたりももし可能でしたらご回答いただけるとありがたいです.
fujicho_100

2021/06/02 10:14

>saziさん ありがとうございます.当初はこのコマンドを使っていたのですが,一度に1か月分を読み込みたかったのでPythonを使いました.もしSQLだけでできるようでしたら,また後程調べてみます.
fujicho_100

2021/06/02 10:33 編集

>saziさん また, ALTER TABLE database_spd.data_1_2 MAX_ROWS=1000000000000, AVG_ROW_LENGTH=400; と入力して,設定を変えてしまったことが原因だと思うのですが, この初期値が分からず元に戻せない状況です.
fujicho_100

2021/06/02 10:28 編集

>saziさん ありがとうございます.今はそもそもSQLが一切動かせない状況になっているため,アンインストールして再インストール後に試してみようかと考えています. ※設定を戻すこともできません
sazi

2021/06/02 10:40

そうですね。クリーンインストールしてから再開するのが良いでしょう。 元々と言えば、ファイルごとにテーブルが必要だと誤解している所から始まっているようですので。
fujicho_100

2021/06/02 10:49

>元々と言えば、ファイルごとにテーブルが必要だと誤解している所から始まっているようですので。 ここでの「ファイル」とは上記の質問で言えば2.7GBのもの(.ibd形式)を指しますでしょうか? 複数のファイルに分割したテーブルも可能ということで間違いないでしょうか.
sazi

2021/06/02 10:59 編集

質問ではCSVとなっていますが、.ibdファイルを使うのですか? CSVがどの時点で分割されているのか分かりませんが、複数のファイルであってもそれぞれ追加すれば良いだけですけど。
fujicho_100

2021/06/02 11:00

>質問ではCSVとなっていますが、.ibdファイルを使うのですか? もともとのデータがCSVで,それをPythonを使ってSQLにインポートしている,という意味です.
m.ts10806

2021/06/02 11:02

>「基礎からのMySQL第3版」(SBクリエイティブ,2017)に紹介してあり,参考にしたためです. OSがMac前提ではないでしょうか。 もしOS限らずMAMPすすめてるとしたら書籍としては信用できません(そもそも4年前は古い)
fujicho_100

2021/06/02 11:07

>もしOS限らずMAMPすすめてるとしたら書籍としては信用できません(そもそも4年前は古い) WIndows10前提でした.4年前でも古いというのは意外ですが,かなりアップデート等は頻繁に行われているのでしょうか.
m.ts10806

2021/06/02 11:15

>WIndows10前提でした 「捨ててください」と言う人もいるレベルです。 teratailの質問見ればわかりますがWindowsにMAMPで詰まって質問してきてXAMPPに切り替えて前に進んだという人が何人も。 >4年前でも古いというのは意外ですが, 日進月歩の世界において1年でも古いです。 MAMPの話が出ているのでPHPベースで話しますと、 2017年にはPHP7.2が出ましたが、もう8が出てます。 他の言語やフレームワークもどんどんアップデートしてます。 MySQLも8が出てます。 マイナーバージョンアップレベルでも仕様が変わったりするので なるべく最新を取り扱っている資料は必須です。 本よりドキュメント見るのが確実です。
fujicho_100

2021/06/03 01:15

>「捨ててください」と言う人もいるレベルです。 一応対応している,というだけで適切とは言えないのですね.XAMPPを入れて,再インストールしたところ,MAMPに比べて重いですが動かせました. >日進月歩の世界において1年でも古いです。 MySQLを使いだしたのが今年の4月なので,それ以前のことは分かりませんがそのように進化しているのですね. >本よりドキュメント見るのが確実です。 Web上のドキュメントだと体系的にまとめられていないため分かりにくく感じますが,慣れるしかないですね…
退会済みユーザー

退会済みユーザー

2021/06/03 12:58

とりあえずMAMPはWindows版もあるので、頭ごなしにダメという必要はありませんが、mysqld.exeが32bitなので4GBの制限があります。 https://dev.mysql.com/doc/mysql-reslimits-excerpt/8.0/en/windows-restrictions.html 今回の要件ではNGですね。 最近のxamppのmysqld.exeは64bitなので、4GBの制限はありません。 インポートにかかる時間はチューニングで多少は落ち着くと思います。 またテーブルを分けずとも、月単位でコミットかけるだけで負荷は減りそうな気がします。 あとload data直後のfetchはなんなのかよく分かりません。
fujicho_100

2021/06/05 08:02

>32bitなので4GBの制限があります。 そうなんですね.XAMPPにしたら問題ありませんでした.また軽量化に関しても今後検討します.
guest

回答1

0

自己解決

XAMPPによる再インストールの実施
6月,7月…と月ごとにテーブルを作ることによる4GB制限の回避

ただ,MAMPよりもXAMPPの方がデータのインポートに時間がかかる傾向(約4倍)にあることが難点に感じています.

投稿2021/06/03 01:16

編集2021/06/03 01:17
fujicho_100

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問