Yanıtlar:
MySQL'deki herhangi bir "talep edilen" kapatma dizisi (kısa devre kill -9
) 'dir biraz zarif (işlemsel tabloları) Devam eden işlemler geri alınır, ama burada mümkün olduğunca temiz bir yeniden başlatma yapmak için birkaç yol olduğundan,.
Not: Yükseltme için sunucuyu kapatıyorsanız, bu işlemi kullanmayın; bunun yerine, işlemi izleyin bu cevapta ayrıntılı olarak .
Aksi takdirde, salt sağlıklı bir sunucuyu yeniden başlatıyorsanız, salt okunur bir genel değişkeni veya benzer bir şeyi değiştirebilmeniz için, işte size zarif bir yol:
İlk önce, innodb_fast_shutdown
zaten değilse etkinleştirin . Bu, kapatmanın zarafeti ile doğrudan ilişkili değildir, ancak sunucunuzu daha hızlı geri getirmelidir.
mysql> SHOW VARIABLES LIKE 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_fast_shutdown = 1;
Query OK, 0 rows affected (0.01 sec)
Ardından, sunucuya şu anda çalışan hiçbir sorguya başvurmadığı anda tüm açık tabloları kapatması talimatını verin. Bu adımın ayrıca zarif kapanma ile ilgisi yoktur, ancak sonraki adımı daha hızlı ilerletir:
mysql> FLUSH LOCAL TABLES;
Query OK, 0 rows affected (41.12 sec)
FLUSH TABLES
(Opsiyonel ile deyimi LOCAL
herhangi köle gereksiz zararsız ancak floş önler anahtar kelime,) engeller ve tabloların tamamı kapatılabilir kadar istemi irade döndürmez. Her tablo "temizlendi" (kapalı) olduktan sonra, bir sorgu daha sonra tabloya atıfta bulunursa, otomatik olarak yeniden açılır, ancak sorun olmaz. Bu adımla gerçekleştirdiğimiz şey, son adım için daha az iş yapmak:
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (13.74 sec)
mysql>
Bu ifade tüm tabloları temizler (bu nedenle bir önceki adımdan daha az bozulmadan çıkarmanın avantajı) ve bunlar üzerinde global (sunucu çapında) salt okunur bir kilit elde eder.
Şu anda çalışan her "yazma" sorgusuna (yani hemen hemen her şey hariç) kadar genel bir okuma kilidine sahip olamazsınız SELECT
) yapılmadan . Kilitleme isteğinin yapılması mevcut sorguların bitmesine izin verecektir, ancak yenilerinin başlamasına izin vermeyecektir.
Edene kadar istemi dönmez sen bu küresel kiliti kilit bitirmek yapabiliyor istediğinde devam her sorgu böylece, ve istemi geri almak çünkü, onlar bitmiş biliyorum. Herhangi bir tabloya herhangi bir şey yazmaya çalışan herhangi bir sorgu, sadece duraklayacak, veri değiştirmeyecek, kilitlenme için süresiz olarak bekleyecektir.
UNLOCK TABLES;
).Bunu kapatmak için günaha karşı.
mysql>
Bu boşta konsol istemi sizin için global kilidi tutan şeydir. Bunu kaybet, kilidi kaybet.
Başka bir konsol penceresinden, MySQL'i normalde yaptığınız gibi, initscripts (örneğin, yerel varyantınızla service mysql.server restart
) veya mysqladmin shutdown
ardından manuel yeniden başlatma ile yeniden başlatın.
Kısacası, MySQL'in kapatılmasından önce göz önünde bulundurulması gereken en iyi uygulamalardan bazıları şunlardır:
mysql> STOP SLAVE;
.mysql> SET GLOBAL innodb_max_dirty_pages_pct = 0;
.mysql> SHOW PROCESSLIST;
, öldürmysql> kill thread_id;
ya da bitirene kadar bekle.mysql> SET GLOBAL innodb_buffer_pool_dump_at_shutdown = ON;
başlangıçta yeniden başlangıç # vi /etc/my.cnf
innodb_buffer_pool_load_at_startup = ON
havuzunu ısıtmak için yeniden yükleyin
.Ardından önceki noktaları onayladıktan sonra, MySQL’i güvenle başlatabilirsiniz. shell$ service mysql restart
Daha fazla ayrıntı için gönderime bakın MySQL!
innodb_fast_shutdown = 1
MySQL'in daha hızlı başlamasını sağlıyor mu? Dokümanlara baktığımızda, bu kapatma hızını artırıyor gibi görünüyor (başlangıç hızı pahasına?).