Bunu yapmak zaman mysql kapatmanın en kolay yolu
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
İşte nedeni:
MySQL hizmet dosyası ( /etc/init.d/mysql
), soket dosyasının varlığına dayanır. Tarihsel olarak konuşursak, MySQL 4.0'a geri dönersek, soket dosyası bazen açıklanamayan bir şekilde kaybolur. Bu service mysql stop
, çalışmanın bir standardını engellemektedir .
Söylemek yeterli değil
mysqladmin -uroot -p -h127.0.0.1 shutdown
mysqld'nin irade güzergahı nedeniyle gelen bir kullanıcı olarak root@127.0.0.1
için root@localhost
TCP / IP açıkça etkin değilse. Varsayılan olarak, Mysqld direncinin az yolunu seçecek ve bağlamak root@127.0.0.1
için root@localhost
soket dosyası üzerinden. Ancak, soket dosyası yoksa, root@localhost
asla bağlanamayacaktır.
MySQL Belgeleri bile mysqladmin hakkında şunları söylüyor:
Bir Unix soket dosyası kullanarak yerel bir sunucuya bağlanırken mysqladmin kapatma işlemini gerçekleştirirseniz, sunucunun düzgün durduğundan emin olmak için mysqladmin, sunucunun işlem kimliği dosyası kaldırılıncaya kadar bekler.
Bu nedenle TCP / IP'yi etkinleştirmek zorunludur:
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
Geri Eylül 30, 2011 tarihinde, ben benim kendi versiyonunu senaryolu mysqld_multi
denilen mysqlservice
(: Gönderimimi bakınız aynı ana bilgisayarda birden çok örneği Running ). Farklı portlardan mysqld'e bağlanmak için sanal bir motor görevi görür. my.cnf
Özel parametrelerle kendinize getirmek zorundasınız . Bu komut dosyasında, şu şekilde kapanmalar yapıyorum:
stop() {
${ECHO} -n $"Stopping ${PROGNAME}"
${MYSQLD_STOP}
ATTEMPTS=0
STOPPING_MYSQLD=1
MINUTES_TO_TRY=10
(( TICKS_TO_TRY = MINUTES_TO_TRY*240 ))
while [ ${STOPPING_MYSQLD} -eq 1 ]
do
${ECHO} -n "."
${SLEEP} 0.25
MYSQLD_HAS_BEEN_SHUTDOWN=`${TAIL} ${MYSQL_ERROR_LOG} | ${GREP} -c "Shutdown complete$"`
(( ATTEMPTS++ ))
if [ ${ATTEMPTS} -eq ${TICKS_TO_TRY} ] ; then STOPPING_MYSQLD=0 ; fi
if [ ${MYSQLD_HAS_BEEN_SHUTDOWN} -eq 1 ] ; then STOPPING_MYSQLD=2 ; fi
done
${ECHO}
if [ ${STOPPING_MYSQLD} -eq 2 ]
then
${ECHO} "Stopped ${PROGNAME}"
else
${TAIL} -30 ${MYSQL_ERROR_LOG}
fi
}
Fakat nedir ${MYSQLD_STOP}
?
MYSQL_CONN="-uroot -p<rootpassword> -P${MYSQLD_PORT} -h127.0.0.1 --protocol=tcp"
MYSQLD_STOP="${MYSQLADMIN} ${MYSQL_CONN} shutdown"
Lütfen kullandığımı 127.0.0.1
ve açık bir bağlantı noktası olduğuna dikkat edin. Bu şekilde, bir soket dosyasına güvenmiyorum.
Her zaman takılırsa mysqladmin --protocol=tcp shtudown
, mysql kapanmalarına uygun bir alternatif olarak kullandım service mysql stop
. Yapma kill -9
üzerinde mysqld
ve mysqld_safe
son tatil sonuncusunun gerektiği son. (Evet, son üç kez söyledim).
Çoğu zaman, mysqld mysql.sock u uyarmadan siler. Diğer insanlar da bu sorunu yıllar içinde yaşadı:
SONSÖZ
Sırrı tam da söylediğim gibi: TCP / IP ( ) yoluyla mysqladmin kullanarak mysql'e bağlanın --protocol=tcp
ve sorun shutdown
. Bunun çalışması gerekiyor çünkü kapatma ayrıcalığı , mysql.user
kimliği doğrulanmış kapatmalar için özel bir amaç için var. İş günlerimi birkaç kez Linux sunucumda mysqld'ünü kapatırken Windows makinemden uzaktan kapatma işlemi yapabildiğimde tasarruf sağladı.
GÜNCELLEME 2013-03-06 22:48 EST
Kapatma sırasında neler olup bittiğinden endişeleniyorsanız, özellikle de Tampon Havuzunda InnoDB verileriniz varsa, kapanma süresini ve verilerin diske atılma şeklini değiştirmenin bir yolu vardır.
ÖNERİ # 1
Çok fazla kirli sayfanız varsa innodb_max_dirty_pages_pct değerini 0'a indirebilirsiniz :
SET GLOBAL innodb_max_dirty_pages_pct = 0;
Kapatmadan önce yaklaşık 15-30 dakika ayarlayın. Bu, MySQL'e diske yazması en az kirli sayfa miktarını verecektir.
ÖNERİ # 2
Varsayılan olarak, innodb_fast_shutdown 1'dir. Bu seçenek için üç değer vardır
- 0: InnoDB kapatmadan önce yavaş bir kapatma, tam bir temizleme ve bir ekleme tamponu birleştiriyor.
- 1: InnoDB bu işlemleri kapatma sırasında atlar; bu işlem hızlı kapatma olarak bilinen bir işlemdir.
- 2: InnoDB günlüklerini temizliyor ve sanki MySQL düşmüş gibi soğuyor; taahhüt edilen işlemlerin hiçbiri kaybolmaz, ancak kilitlenme kurtarma işlemi bir sonraki başlangıcın daha uzun sürmesini sağlar.
Belgeler ayrıca şunu söylüyor:
Yavaş kapatma, önemli miktarda verinin halen arabelleğe alındığı aşırı durumlarda dakikalar, hatta saatler sürebilir. MySQL ana sürümleri arasında yükseltme yapmadan veya düşürmeden önce yavaş kapatma tekniğini kullanın; böylece yükseltme işleminin dosya biçimini güncellemesi durumunda tüm veri dosyalarının tam olarak hazırlanmasını sağlar.
Veriler bozulma riski taşıyorsa mutlak en hızlı şekilde kapanması için, acil durum veya sorun giderme durumlarında innodb_fast_shutdown = 2 kullanın.
İnnodb_max_dirty_pages_pct ve innodb_fast_shutdown varsayılanları çoğu durumda iyi olmalıdır.
tmpwatch
onu siler, içindeki her şeyin/tmp
konfigüre edilmiş eşiğinden daha eski bir atime sahip olmasıyla birlikte siler .