MySQL -də LOAD_FILE problemi

Salamlar. Mysql -də 1.5 mb-a qədər faylları LOAD_FILE ilə bazaya yazmaq olur. Amma ondan böyük fayllar yazılmır. table column -un tipini longblob vermişəm, yenə də xeyri yoxdur. 
Necə etmək olar ki, böyük həcmli fayllar da yazılsın?

Verilmiş cavablar və yazılan şərhlər (6 cavab var)

Shahriyar Rzayev (2013-03-09 15:53:16)
[mysqld] kataloquna connector deyildiyini birinci dəfədir eşidirəm. server startup olunanda məhz bu kataloq altında olan istənilən dəyişənləri oxuyur. Bundan əlavə bilmirəm siz bu həlləri hardan tapmısınız amma dəhşətli dərəcədə səhvlər var: max_allowed_packet=100M yazmısınız. bəli 100m-ə qədər olan fayllar daxil edilə biləcək. Lakin bu dəyişən per session dəyişəndir. Yani database-e qoşulan hər bir user-ə 100M buffer ayrılacaq... Bundan əlavə: sort_buffer_size = 200M read_buffer_size = 200M read_rnd_buffer_size = 80M Həmçinin per session qiymətlərdir. Və təsəvvür edin ki sizin database-e 200 connection olsa 200x200M buffer(RAM)=40GB RAM tələb edəcək :) bu qədər RAM harda var? Yenə davam etdikdə query_cache_size=320 M... Ümumiyyətlə query_cache-i disable etmək lazım idi siz isə əksinə astranomik bir rəqəm vermisiz buna... key_buffer = 384M --- görülməmiş bir şeydir. MyİSAM index cache-dir bu... eger İnnoDB istifadə edirsinizsə onda ümumiyyətlə bunun faydası yoxdur. table_cache = 512 --- bilmirəm hansı versiya MySQL istifadə edirsiniz ama artıq bu dəyişən deprecate olub. Bunun əvəzinə table_open_cache istifadə etmək lazımdır o da hələ test etdikdən sonra. Nəticə: konfiqurasiya faylına etdiyiniz bütün dəyişikləri silin server-i restart edin. sadəcə GƏRƏK olduqda max_allowed_packet -i dinamik olaraq dəyişin vəssalam. set @@max_allowed_packet=104857600 əgər global olaraq dəyişmək istəsəniz: set @@global.max_allowed_packet=104857600 Və google-da tapılan hər şeyi yazmıyın my.cnf-ə əgər database-i crash etmək istəmirsinizsə.

Ruslan Butdayev (2013-03-04 10:34:58)
niye fayl mysql de saxlanilmaldir ki?! Neye gore ? Orda unvani saxlamaq daha optimaldir mence..

Alibeyov (2013-03-02 17:23:50)
blob

Alibeyov (2013-03-02 15:26:39)
Xeyir, mən my.cnf -də connector -a əlavələr etdim, 94 mb-lıq faylı da insert etmək mümkündür. (test etdim, işləyir) Connector dediyim isə my.cnf -faylındakı [mysqld] başlığı altında yazılmış konfiqurasıyadır.

VendeTTA (2013-03-02 15:12:32)
Connector nəyə deyirsən anlamadım. Amma hazırki problemdə max_allowed_packet = 16M olması problemi həll edir. LONGBLOB üçün 16 mb standartdır. Bundan böyük ölçüləri insert etmək olmayacaq. Yəni, Buffer 16 mb-dan artıq insert götürməyəcək, baxmayaraq ki LONGBLOB 4gb saxlaya bilir.

Alibeyov (2013-03-02 13:48:51)
Yenə də, siz sualı yerləşdirmədən əvvəl problemin həllini tapdım. my.cnf faylında connector -da düzəliş etmək lazımdır. [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql skip-locking key_buffer = 384M max_allowed_packet = 100M table_cache = 512 sort_buffer_size = 200M read_buffer_size = 200M read_rnd_buffer_size = 80M myisam_sort_buffer_size = 64M thread_cache_size = 80 query_cache_size = 320M