標籤:mysql error 多執行個體
由於我們的伺服器會借給我們部分公司使用,但是部分公司有沒有營運,都是開發直接操作,導致出現一些問題後直接來找我處理。為此,也學習到很多。
近來,一哥們由於不知道操作什麼導致伺服器直接掛掉,於是我聯絡機房啟動機器後查看日誌,沒有發現什麼明顯的日誌,只是有一條watchdog的日誌資訊。於是又多方搜尋關於watchdog的相關知識。發現的也大致是皮毛而已,也有部分提交一些核心資訊是關於watchdog的bug。此處也無法做什麼排查的(主要還是我的技術不精)。只能推測是開發使用應用程式觸發了watchdog的監控。在指定時間內watchdog檢測不通過導致reboot或者shutdown。好在這台機器他們只是測試使用。沒有什麼重要的業務。
不過不久後他們又呼叫我mysql多執行個體的3308連接埠無法啟動。於是我又上機器排查。
登陸機器後首先查看下連接埠:
# ss -tunlNetid Recv-Q Send-Q Local Address:Port Peer Address:Port tcp 0 64 :::873 :::* tcp 0 50 *:3306 *:* tcp 0 128 :::11211 :::* tcp 0 128 *:11211 *:* tcp 0 50 *:3307 *:*
查看上述確實是沒有3308連接埠,於是又查看下設定檔。看看他們的具體配置是怎麼樣的。
# cat /etc/my.cnf[client]#port= 3306default-character-set = utf8#socket= /usr/local/mysql/mysql.sock[mysqld_multi]mysqld = /data0/mysql/bin/mysqld_safemysqladmin = /data0/mysql/bin/mysqladmin[mysqld1]socket = /usr/local/mysql/mysql1.sockport = 3306pid-file = /usr/local/mysql/mysql1.piddatadir = /usr/local/mysql/data1user = mysqllog = /usr/local/msyql/e1.logserver-id= 1skip-name-resolvecharacter-set-server= utf8log-bin-trust-function-creators=1back_log = 50max_connections = 500max_connect_errors = 32max_allowed_packet = 16Mtable_cache = 2048binlog_cache_size = 1Mmax_heap_table_size = 64Mtmp_table_size = 64M#binlog_format= "MIXED"key_buffer_size = 32Mread_buffer_size = 2Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 64Msort_buffer_size = 8Mjoin_buffer_size = 8Mthread_cache_size = 8thread_concurrency = 8thread_stack = 192Kslow_query_loglong_query_time= 2log-short-formatmyisam_sort_buffer_size = 128Mmyisam_max_sort_file_size = 10Gmyisam_repair_threads = 1myisam_recover[mysqld2]socket = /usr/local/mysql/mysql2.sockport = 3308pid-file = /usr/local/mysql/mysql2.piddatadir = /usr/local/mysql/data2user = mysqllog = /usr/local/msyql/e2.logserver-id= 1skip-name-resolvecharacter-set-server= utf8log-bin-trust-function-creators=1back_log = 50max_connections = 500max_connect_errors = 32max_allowed_packet = 16Mtable_cache = 2048binlog_cache_size = 1Mmax_heap_table_size = 64Mtmp_table_size = 64M#binlog_format= "MIXED"key_buffer_size = 32Mread_buffer_size = 2Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 64Msort_buffer_size = 8Mjoin_buffer_size = 8Mthread_cache_size = 8thread_concurrency = 8thread_stack = 192Kslow_query_loglong_query_time= 2log-short-formatmyisam_sort_buffer_size = 128Mmyisam_max_sort_file_size = 10Gmyisam_repair_threads = 1myisam_recover[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 512Msort_buffer_size = 512Mread_buffer = 8Mwrite_buffer = 8M[myisamchk]key_buffer = 512Msort_buffer_size = 512Mread_buffer = 8Mwrite_buffer = 8M[mysqlhotcopy]interactive-timeout[mysqld_safe]open-files-limit = 8192
設定檔如上,主要是看下資料目錄和sock檔案目錄以及pid存放位置和log位置。
然後就是到指定目錄下,查看相關資訊。
# ls3307 data1 docs e2.log lib mysql2-slow.log mysql-test sql-benchbin data2 e1.log include libexec mysql1-slow.log mysql2.pid mysql2.sock share var
看到上述情況我真是很鬱悶了,這完全和設定檔對不上啊。明明mysql2.sock和pid檔案存在,為毛卻監聽的是3306連接埠呢?此時就很鬱悶了,於是又ps -ef | grep mysql看了下路徑。不看不知道,看了下就更不對勁了。
# ps -ef | grep mysqlroot 18634 1 0 Jan12 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/localhost.localdomain.pidmysql 18763 18634 0 Jan12 ? 00:00:39 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/localhost.localdomain.err --pid-file=/usr/local/mysql/var/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306root 29805 29780 0 14:40 pts/0 00:00:00 grep mysql
想必此時很多大神一眼就知道問題在哪裡了。可惜我不是大神。一時也沒想到那麼多。於是一步一步的來往下查啊。我這裡想到的是TM的居然啟動了預設的mysql。於是我就停掉了這個3306這個連接埠。
刪除了mysql2.sock和pid檔案。再啟動一次:
mysqld_multi start 1,2
可是事與願違,3306連接埠還是起來了。但是3308還是沒起來。於是再次ps -ef | grep mysql查看到mysqld_safe的進程起了兩個,反正相同的都是兩個。你懂得。這麼奇葩。於是我再次kill掉。
再次啟動時我先監控著多執行個體的日誌:
tail -f mysqld_multi.log
mysqld_multi log file version 2.16; run: Fri Jan 16 13:53:44 2015Starting MySQL servers150116 13:53:44 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!150116 13:53:44 [ERROR] Aborting150116 13:53:44 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete150116 13:53:44 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!150116 13:53:44 [ERROR] Aborting150116 13:53:44 [Note] /usr/local/mysql/libexec/mysqld: Shutdown completemysqld_multi log file version 2.16; run: Fri Jan 16 13:56:32 2015
就類似上面這種。報錯資訊大致反映的就是不能以root啟動這個意思。但是mysql的設定檔裡指定的就是mysql使用者。於是我又查看了資料目錄的檔案夾許可權等亂七八糟的一堆。感覺都是很正常的。到這裡時我就特別的鬱悶了。那到底是哪裡的問題呢。
於是我就去找錯誤記錄檔,但是發現var下面的.err的日誌居然沒有記錄。我思前想後難道是設定檔沒有生效?此時的我只能先發會呆。
發完呆後我又仔細仔細看了看日誌和設定檔。終於發現問題了。mysqld_multi的配置和mysqld下面的路徑不一致啊。我就問了下開發是不是他們又裝了一個mysql。果不其然,他們大方說原先的版本太低。於是就升級了一個版本。此時的我就明白一大半了。
於是再次的使用他們指定目錄下面的啟動指令碼,並加以選項。這次雖然還是沒能出現所要的結果。但是日誌已經很明顯的指出問題所在了。
# tail -f mysqld_multi.logmysqld_multi log file version 2.16; run: Fri Jan 16 14:10:30 2015Starting MySQL servers150116 14:10:30 mysqld_safe Logging to ‘/usr/local/mysql/var/localhost.localdomain.err‘.150116 14:10:30 mysqld_safe Logging to ‘/usr/local/mysql/var/localhost.localdomain.err‘.cat: /usr/local/mysql/var/localhost.localdomain.pid: No such file or directory150116 14:10:30 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var150116 14:10:30 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/varmysqld_multi log file version 2.16; run: Fri Jan 16 14:15:39 2015
於是配置一個mysql的環境變數,效果立馬見效。
Starting MySQL servers150116 14:15:39 mysqld_safe Logging to ‘/usr/local/mysql/data1/localhost.localdomain.err‘.150116 14:15:39 mysqld_safe Logging to ‘/usr/local/mysql/data2/localhost.localdomain.err‘.150116 14:15:39 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data1150116 14:15:39 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data2
到此終於解決問題。此事說明解決問題前一定要先弄清楚之前做了什麼操作,具體的環境是什麼樣子的。等等...
ps :有大神知道下面這個問題還請指教,感謝。
localhost kernel: iTCO_wdt: Unexpected close, not stopping watchdog!
本文出自 “Soul” 部落格,請務必保留此出處http://chenpipi.blog.51cto.com/8563610/1604793
MySQL學習之路:多執行個體無法啟動排錯