前提・実現したいこと
はじめまして.
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使用
回答1件
あなたの回答
tips
プレビュー