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?
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)
0
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
0
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.
0
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.
0
blob
0
niye fayl mysql de saxlanilmaldir ki?! Neye gore ? Orda unvani saxlamaq daha optimaldir mence..
1
[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ə.
Sual verin
Cavab verin