[ maroon984 @ 17.02.2016. 13:39 ] @
Pozdrav svima.

U prethodnih mjesec dana, desilo mi se da mi mysqld par puta prsne. Posljednji put se to desilo juce, i u logu stoji:


Code:


11:45:00 UTC - mysqld got signal 8 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.

key_buffer_size=314572800
read_buffer_size=2097152
max_used_connections=104
max_threads=300
thread_count=100
connection_count=99
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 1539424 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0x469ea900
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7fd712816e98 thread_stack 0x40000
/usr/sbin/mysqld(my_print_stacktrace+0x35)[0x7c5af5]
/usr/sbin/mysqld(handle_fatal_signal+0x403)[0x68e713]
/lib64/libpthread.so.0(+0xfd00)[0x7fe1a5305d00]
/usr/sbin/mysqld(_ZN12ha_partition21min_rows_for_estimateEv+0x61)[0x957511]
/usr/sbin/mysqld[0x75204f]
/usr/sbin/mysqld[0x75276e]
/usr/sbin/mysqld[0x7529ec]
/usr/sbin/mysqld(_ZN10SQL_SELECT17test_quick_selectEP3THD6BitmapILj64EEyyb+0x11ac)[0x75ba4c]
/usr/sbin/mysqld[0x5c8764]
/usr/sbin/mysqld(_ZN4JOIN8optimizeEv+0x581)[0x5c9931]
/usr/sbin/mysqld(_Z12mysql_selectP3THDPPP4ItemP10TABLE_LISTjR4ListIS1_ES2_jP8st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select_lex+0x171)[0x5cd591]
/usr/sbin/mysqld(_Z13handle_selectP3THDP3LEXP13select_resultm+0x179)[0x5d33b9]
/usr/sbin/mysqld[0x59003d]
/usr/sbin/mysqld(_Z21mysql_execute_commandP3THD+0x2208)[0x595738]
/usr/sbin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x18a)[0x597eea]
/usr/sbin/mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x1339)[0x599ab9]
/usr/sbin/mysqld(_Z24do_handle_one_connectionP3THD+0x184)[0x632494]
/usr/sbin/mysqld(handle_one_connection+0x54)[0x632504]
/lib64/libpthread.so.0(+0x7f05)[0x7fe1a52fdf05]
/lib64/libc.so.6(clone+0x6d)[0x7fe1a45a110d]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7fd6144fde10): is an invalid pointer
Connection ID (thread ID): 823
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
160216 12:45:00 mysqld_safe Number of processes running now: 0
160216 12:45:00 mysqld_safe mysqld restarted
160216 12:45:00 [Note] Plugin 'FEDERATED' is disabled.
160216 12:45:00 InnoDB: The InnoDB memory heap is disabled
160216 12:45:00 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160216 12:45:00 InnoDB: Compressed tables use zlib 1.2.3
160216 12:45:00 InnoDB: Using Linux native AIO
160216 12:45:00 InnoDB: Initializing buffer pool, size = 40.0G
160216 12:45:02 InnoDB: Completed initialization of buffer pool
160216 12:45:02 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 4911607582808
160216 12:45:02  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 4911612825600
InnoDB: Doing recovery: scanned up to log sequence number 4911618068480
InnoDB: Doing recovery: scanned up to log sequence number 4911623311360
InnoDB: Doing recovery: scanned up to log sequence number 4911628554240
InnoDB: Doing recovery: scanned up to log sequence number 4911633797120
InnoDB: Doing recovery: scanned up to log sequence number 4911639040000
InnoDB: Doing recovery: scanned up to log sequence number 4911644282880
InnoDB: Doing recovery: scanned up to log sequence number 4911649525760
InnoDB: Doing recovery: scanned up to log sequence number 4911654768640
InnoDB: Doing recovery: scanned up to log sequence number 4911660011520
InnoDB: Doing recovery: scanned up to log sequence number 4911665254400
InnoDB: Doing recovery: scanned up to log sequence number 4911670497280
InnoDB: Doing recovery: scanned up to log sequence number 4911675740160
InnoDB: Doing recovery: scanned up to log sequence number 4911680983040
InnoDB: Doing recovery: scanned up to log sequence number 4911686225920
InnoDB: Doing recovery: scanned up to log sequence number 4911691468800
InnoDB: Doing recovery: scanned up to log sequence number 4911694829397
160216 12:45:05  InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
InnoDB: Last MySQL binlog file position 0 1980781, file name /var/MYSQL_BINLOG/mysql-bin.004471
160216 12:45:09  InnoDB: Waiting for the background threads to start
160216 12:45:10 InnoDB: 1.1.8 started; log sequence number 4911694829397
160216 12:45:10 [Note] Recovering after a crash using /var/MYSQL_BINLOG/mysql-bin
160216 12:45:10 [Note] Starting crash recovery...
160216 12:45:10 [Note] Crash recovery finished.
160216 12:45:10 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
160216 12:45:10 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
160216 12:45:10 [Note] Server socket created on IP: '0.0.0.0'.
160216 12:45:10 [Warning] 'proxies_priv' entry '@ [email protected]' ignored in --skip-name-resolve mode.
160216 12:45:10 [Note] Event Scheduler: Loaded 14 events
160216 12:45:10 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.24-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)
160216 12:45:10 [Note] Event Scheduler: scheduler thread started with id 1





Mysql server je verzija 5.5.24, OS je OpenSUSE 12.1.
Server ima 64G RAM-a, i podeseno je swappiness=0

Pratio sam zauzece RAM-a, par sati prije restarta preko free -m free je bilo oko 300M, ali je cached bilo oko 10G

Inace, JAVA Aplikacije vrse upis u DB, a php iscitava.

Ima li iko ideju zbog cega bi ovo moglo da se desava? Kontao sam da je potrosen sav RAM-a, ali kazem cached je bilo 10G.





[ nkrgovic @ 17.02.2016. 15:31 ] @
Signal 8 je floating point exception, to se BAS retko vidja. Stavise, to ne bi smelo da se desi, to moze da bude neki division by zero ili tako nesto, mada bi to trebalo da sam mysql hendla. U svakom slucaju, stavi 5.5.48 (to je, valjda, poslednji 5.5), pa vidi da li ce ti se i dalje desavati. Takodje, baci pogled da dmesg, da tamo nema nesto korisno.
[ maroon984 @ 17.02.2016. 23:17 ] @
Mislim da je BUG u pitanju.

http://bugs.mysql.com/bug.php?id=65663


Imam 4 tabele koje su particionisane PARTITION BY RANGE (unix_timestamp(timestampKolona)).
Svim tabelama je posljednja particija:
Code:
PARTITION p24 VALUES LESS THAN (1483225200) ENGINE = InnoDB 

To je vrijednost unix_timestamp('2017-01-01'), znaci do kraja godine.

Kada na dvije od te 4 tabele odradim SELECT tipa:

Code:

SELECT * FROM tabela WHERE TIMESTAMP_KOLONA>FROM_UNIXTIME(bilo koja vrijednost>=1483225199);

ili "prevedeno"

SELECT * FROM tabela WHERE TIMESTAMP_KOLONA > (bilo_koja_vrijednost>='2016-12-31 23:59:59');


desi se CRASH!
Ima li ovome spasa, ili da radim upgrade na neku verziju gdje je ovaj bug ispravljen?
Interesantno je da se na dvije tabele, kod kojih je slicno odradjeno particionisanje, ne desava ovo.
[ bogdan.kecman @ 18.02.2016. 04:25 ] @
jeste bug, i to ispravljen
najnoviji 5.5 i nemas brige, i to najnoviji 5.5 sa oracle.com, ne onaj
iz os-a
inace razmisljaj malo o upgrade-u dalje 5.5 je odavno za kantu a obzirom
da trosis particije razmisli ozbiljno o 5.7
[ maroon984 @ 18.02.2016. 11:36 ] @
Kakav je proces upgrade-a sa 5.5 na 5.7?
Treba li prvo na 5.6 pa na 5.7? Na mysql doc vele:
Citat:
Upgrading more than one release level is supported, but only if you upgrade one release level at a time. For example, if you currently are running MySQL 5.5 and wish to upgrade to a newer series, upgrade to MySQL 5.6 first before upgrading to MySQL 5.7, and so forth.


Na serveru je instalirano (skinuto sa dev.mysql.com)
MySQL-client-5.5.24-1.sles11.x86_64.rpm
MySQL-embedded-5.5.24-1.sles11.x86_64.rpm
MySQL-server-5.5.24-1.sles11.x86_64.rpm
MySQL-shared-5.5.24-1.sles11.x86_64.rpm

da li ce upgrade novih verzija ovih paketa sa rpm -Uvh narusiti dosadasnju konfiguraciju, baze, tabele, procedure...?

[ nkrgovic @ 18.02.2016. 12:08 ] @
Trebalo bi da upgrade na 5.5.48 bude bezbolan, ali - ako ti je to produkciona masina sve jedno ces morati da bekapujes sve. :)

Uradis bekap, oboris bazu, uradis upgrade, proveris i upalis bazu pa vidis. :) Upgrade s 5.5 na 5.6 ima skriptu koju je zgodno pokrenuti kad zavrsi, pa zato nije bas prakticno ici direkt na 5.7. Takodje, proveri kako ce ti raditi stored procedure, trigeri, konekcije.... proveri kako ti je replikacija (imas li je uopste) i sl.
[ bogdan.kecman @ 18.02.2016. 23:58 ] @
55 na 57 nece da prodje direkt, takodje moras da proveris prvo dal ti
app radi na 57 kako treba posto ima nekompatibilnih promena, digni se na
poslednji 55 da se resis bug-a, onda proveri kako ti app radi sa 57, ako
radi i ako zelis na 57 onda obavezno dump/restore. ne radi ti
replikacija 55 na 57, in-place upgrade isto ne radi
[ maroon984 @ 19.02.2016. 07:44 ] @
Ok. Hvala na savjetima. Tako će i biti:

- posljednjom verzijom 5.5 zakrpim BUG,
- testiram na drugoj masini fercera li sve na 5.7,
- dump,
- produkciju prvo na 5.6 pa na 5.7,
- restore.

Pozdrav
[ nkrgovic @ 19.02.2016. 08:03 ] @
Dump pa restore ce ti raditi (verovatno) i sa 5.5 na 5.7 direktno, uostalom mozes da probas. Ono sto nece raditi je upgade, tj. da samo spustis novi binary.

Dump nije lose resenje da imas, za slucaj da negde pogresis. Ne kapiram, nijedan slave ne spominjes, je'l moguce da ih nemas? :)
[ maroon984 @ 19.02.2016. 10:09 ] @
Nema slave. Testiracu aplikaciju na 5.7 da vidim da li fercera. Poslije toga cu upgrade .rpm na 5.6 pa na 5.7. Restore na 5.7 ce da radi...
[ bogdan.kecman @ 19.02.2016. 13:04 ] @
rpm mozes direkt sa 55 na 57 ako radis dump restore podataka, moras
preko 56 samo ako koristis inplace upgrade (data ostaje na serveru) stim
da in-place sa 55 na 57 ne valja ni preko 56 da ne idem sad u detalje,
dump, upgrade na 57, restore i to je to .. samo prvo proveri dal ti app
radi ok na 57... spominjes rpm znaci yum, obavezno namesti oraklov yum
repo a ne default od centos/rhel/gedora sta vec trosis i nema da brigas