MySQL otomatikleştirilmiş işlem ve bakım aracı-Başlangıç tanıtın

Giriş

Son zamanlarda bir MySQL veritabanı işletim ve bakım platformu oluşturmayı planlıyorum. SQL denetiminin çok önemli bir işlevi vardır, tamamen manuel olarak gerçekleştiriliyorsa platform yapmaya gerek yoktur. Nasıl uygulanacağına dair hiçbir fikrim olmadığında, herhangi bir açık kaynaklı çözüm olup olmadığını görmek için internette araştırdım. Yeterince kesin, github'da bir açık kaynak veritabanı işletim ve bakım aracı olan Inception bulundu Bu, denetleme, yürütme, yedekleme ve geri alma ifadelerinin oluşturulmasını entegre eden bir MySQL otomatik işlem ve bakım aracıdır.

Başlangıç tanıtımı

Inception'ın mimari diyagramı aşağıdaki şekilde gösterilmiştir: Kısacası, Inception, SQL'i denetlemenize, SQL'i yürütmenize ve SQL'den etkilenen kayıtları yedeklemenize yardımcı olabilecek bir MySQL proxy'dir. Başlangıç, bir C / S yazılım mimarisidir. Yerel bir MySQL istemcisi veya uzak bir arabirim aracılığıyla bağlanabiliriz. Şu anda, uygulama yalnızca C / C ++ arabirimi ve Python arabirimi aracılığıyla Inception'a erişimi desteklemektedir.

Yürütme akış şeması aşağıdaki gibidir:

Başlangıç'ı Yükle

Kurduğum ortam

İşletim Sistemi: Ubuntu 16.04.2 LTS

Kurulum bağımlılıkları

  • İndirme bison: Sürüm tercihen 2.6'dan önce olmalıdır (bison-2.5.1, Ubuntu 16.04.2 LTS altında kurulur). En son sürümde sorunlar olabilir. İndirdikten sonra, yüklemek için kaynak kodunu derlemeniz gerekir. Belirli yükleme yöntemi Parametre ağıyla ilgili bazı açıklamalar.

  • cmake kurulumu: `apt-get install cmake`

  • ncurses kurulumu: apt-get install libncurses5-dev

  • Openssl'yi yükle: apt-get install libssl-dev

  • G ++ 'ı kurun: sudo apt-get install g ++

  • M4'ü yükleyin: apt-get install m4

Inception'ı derleyin ve yükleyin

git clone https://github.com/mysql-inception/inception.git sh inception_build.sh hata ayıklama (Bunun linux platformu olduğunu belirtmezseniz, Xcode belirtmek istiyorsanız Xcode'u daha sonra belirtin)

Çalıştırılabilir dosya, debug / sql / Debug / dizini altındadır (farklı platformlar farklı olabilir).

Başlangıcı Başlat

Temelde Inception'ın başlatılması için portu, SQL denetim stratejisini, yedekleme veritabanı konfigürasyonunu vb. Yapılandırmak için cnf dahil bir konfigürasyon dosyası oluşturun. Daha fazla bilgi için lütfen resmi belgelere bakın.

general_log = 1 general_log_file = inception.log bağlantı noktası = 6669 # Başlangıç'ın dinleme bağlantı noktası soket = / tmp / inc.socket karakter kümesi-istemci-el sıkışma = 0 karakter kümesi-sunucu = utf8 inception_remote_system_password = kök # Yedek veritabanı şifresi inception_remote_system_user = wzf1 # yedek veritabanı adı = inception_remote_backup_port 3306 # veritabanı yedek bağlantı noktası = inception_remote_backup_host 127.0.0.1 # yedek veritabanı adres = inception_support_charset utf8mb4 inception_enable_nullable = 0 inception_check_primary_key = 1 = inception_check_column_comment 1 = inception_check_table_comment 1 = inception_osc_min_table_size 1 = inception_osc_bin_dir / veri / sıcaklık = inception_osc_chunk_time 0.1 inception_enable_blob_type = 1 inception_check_column_default_value = 1

başlamak

./Inception --defaults-file = inc.cnf

Giriş

  • Yerel MySQL istemcisi aracılığıyla. Dikkat edilmesi gereken en önemli şey, SQL deyim bloğunu yürütmek için lütfen MySQL istemcisine koymayın, çünkü bu otomatikleştirilmiş bir işlem ve bakım aracıdır, kullanmak için etkileşimli bir komut satırı kullanırsanız mantıklı değildir, tüm SQL yürütmesi geçilmelidir. Arayüz yöntemi, bu yöntem yalnızca başlangıç alma değişkenleri gibi itiraz yapılandırma dosyasındaki yapılandırmayı görüntülemek ve ayarlamak için kullanılabilir; tüm değişkenler görüntülenebilir, lütfen daha fazla bilgi için resmi belgelere bakın.

  • mysql -uroot -h127.0.0.1 -P6669
  • Arayüz yoluyla. Aşağıdaki, resmi örnekteki Python kodudur.Bağlanmak için Python3'ün pymsql'sini kullanırsanız istisnalar olacağına dikkat edilmelidir. Mevcut çözüm, belirli bir konu olan pymysql'in kaynak kodunu değiştirmektir:

  • #! / usr / bin / python # - \ * - kodlama: utf-8 - \ * - MySQLdb'yi içe aktar sql = '/ * - kullanıcı = kullanıcı adı; - parola = parola; - ana bilgisayar = 127.0.0.1; - -execute = 1; - port = 3306; * / \ inception_magic_start; \ use mysql; \ CREATE TABLE adaptive_office (id int); \ inception_magic_commit; 'try: conn = MySQLdb.connect (host =' 127.0.0.1 ', kullanıcı = '', passwd = '', db = '', port = 9998) cur = conn.cursor () ret = cur.execute (sql) result = cur.fetchall () num_fields = len (cur.description) field_names = sonuçtaki satır için alan adlarını yazdır: satır, "|", satır, "|", satır, "|", satır, "|", satır, "|", satır, "|", satır, "|", satır, "|", satır, "|", satır, "|", satır cur.close () conn.close () hariç MySQLdb.Error, e: print "Mysql Hatası% d:% s"% (e. args, e.args)

    SQL denetimi ve yürütme

    Inception aracılığıyla ifadeleri incelerken, Inception'a karşılık gelen veritabanı adresini, veritabanı bağlantı noktasını ve

    Inception tarafından veritabanına bağlanmak için kullanılan kullanıcı adı, parola ve diğer bilgiler basitçe bir sql ifadesini yürütemez, bu nedenle bu bilgiler bir şekilde Inception'a iletilmelidir.

    Bağlantı bilgileri / * ... * / açıklamalarına yerleştirilir ve gerçek SQL ifadeleri inception_magic_start ve inception_magic_commit'e dahil edilir:

    gözden geçirmek

    Lütfen denetim özellikleri için resmi belgelere bakın Bazı özellikler yapılandırılabilir ve şirketinizin özelliklerine göre Başlangıç yapılandırma dosyasında yapılandırılabilir.

    gerçekleştirillen

    Resmi olarak DDL ve DML ifadelerinin desteklendiğinin söylendiğini, ancak SELECT sorgularının desteklenmediğini unutmayın.

    Örneğin, Inception aracılığıyla bir tablo oluşturma deyimi yürütün:

    ... inception_magic_start; mysql kullanın; CREATE TABLE adaptive_office (id int); inception_magic_commit; ...

    Dönüş sonucu, her SQL'in çalıştırılabilir bir sonuç döndüreceği görülebilir .. Hata seviyesi 0 olmadığında, yürütmenin başarısız olduğu anlamına gelir.Aşağıda gösterilen ikinci SQL deyimi Audit tamamlandı ancak tablo oluşturma özelliklerini karşılamıyor. İade edilen sonuçlar hakkında daha fazla bilgi resmi belgelerde bulunabilir:

    'Kimlik', 'aşama', 'hata düzeyi', 'aşamalı durum', 'hata mesajı', 'SQL', 'Etkilenen_ satırlar', 'sıra', 'yedekleme_dbname', 'yürütme_süresi', 'sqlsha1' 1 | KONTROL EDİLDİ | 0 | Denetim tamamlandı | Yok | inception_test kullan | 0 | '0_0_0' | Yok | 0 | 2 | KONTROL EDİLDİ | 1 | Denetim tamamlandı | Motoru table'adaptive_office 'için innodb olarak ayarlayın. Tablo'adaptive_office' için bölüm kümesini'utf8mb4 'olarak ayarlayın. Table'adaptive_office için yorumları ayarlayın. Table'adaptive_office'deki sütun'id'in açıklaması yok. Table'adaptive_office'deki sütun'id'in boş değer atanmasına izin verilmez. Table'adaptive_office'de sütun'id 'için Varsayılan değeri ayarlayın Table'adaptive_office 'için bir birincil anahtar ayarlayın. | CREATE TABLE adaptive_office (id int) | 0 |' 0_0_1 '| 10_10_1_67_1028_inception_test | 0 |

    Yedekleme işlevi

    Ön koşul

    • Çevrimiçi sunucunun binlog'u açması gerekir, aksi takdirde yedeklenmez ve geri alma ifadeleri oluşturmaz.

    • Binlog_format parametresi karma veya satır moduna ayarlanmalı, şu ifade ile ayarlanmalıdır: set global binlog_format = mixed / row, eğer ifade modundaysa, yedekleme ve geri alma deyimi üretilmeyecektir.

    • Geri alma ifadesinin WHERE koşulu birincil anahtardır, çünkü etkilenen satırda birincil anahtar bulunmalıdır. Örneğin, bir veri parçası eklersem ve birincil anahtar kimliği = 1 döndürürsem, ters yönde bir silme ifadesi oluşturacaktır (WHERE koşulu birincil anahtardır) DELETE FROM xx WHERE id = 1.

    Inception, DML işlemlerini yaparken bir yedekleme işlevine sahiptir (varsayılan olarak etkindir, yürütme SQLindeki yorum dosyasında --disable-remote-backup belirtebilirsiniz), geçerli deyim tarafından değiştirilen tüm satırları yedekler ve bunları belirtilen bir yedekte depolar Kitaplıkta, yedekleme kitaplığı Inception parametresi yapılandırılarak belirtilir.

    Yedekleme veritabanının adlandırma yöntemiyle ilgili olarak, yedekleme makinesinin kitaplık adı, bir alt çizgi ile değiştirilen çevrimiçi makinenin IP adresinin noktasından, artı bağlantı noktası numarasından ve ayrıca alt çizgilerle birbirine bağlanan kitaplık adının üç parçasından oluşur. . Örneğin: DML işlemlerini gerçekleştirdiğim veritabanı adresi 192.168.1.1, bağlantı noktası 3306 ve kitaplık adı inceptiondb, ardından yedekleme veritabanındaki tablo adı: 192_168_1_1_3306_inceptiondb.

    Örneğin, iki alanlı bir userinfo tablosuna sahip bir inception_test kütüphanem var:

    INSERT kaydını yürütmek için Inception kullanıyorum:

    /*--user=root;--password=xxx;--host=1.1.1.1;--execute=1;--port=3306;--sleep=0;--enable-remote-backup;*/ \ inception_magic_start; \ inception_test kullanın; \ userinfo ("kullanıcı adı`) değerlerine ekle (" test "); \ inception_magic_commit;

    Döndürülen sonuç aşağıdaki gibidir, yürütmenin başarılı olduğunu ve yedeklemenin başarılı olduğunu görebilirsiniz:

    2 | EXECUTED | 0 | Başarıyla Yedeklemeyi Yürüt | Yok | kullanıcı bilgisi ("kullanıcı adı") değerlerini ("test") ekle | 1 | '1533716166_25519001_1' | 1_1_1_1_3306_inception_test | 0.060 |

    Yedekleme veritabanındaki 1_1_1_1_3306_inception_test kitaplığının kullanıcı bilgisi tablosunun sonuçlarını kontrol edin ve INSERT ifadesine göre bir DELETE ifadesi oluşturun:

    "İnception_test`.`userinfo` WHERE id = 4; Kodu kopyala

    Öyleyse, geri alma ifadesini doğru bir şekilde nasıl bulmam gerekir? 1_1_1_1_3306_inception_test yedekleme kitaplığındaki userinfo'nun tablo yapısını kontrol edebilirsiniz:

    Esas olarak iki alan vardır:

    • rollback_statement metni: Değiştirilmiş geri alma deyimi oluşturun.

    • opid_time varchar (50): Bu sütun, yürütüldüğünde yürütülen SQL deyiminin seri numarasını depolar.Bu seri numarası üç bölümden oluşur: timestamp (int değeri, deyimin yürütüldüğü zaman noktası) + çevrimiçi sunucu Yürütme sırasında üretilen thread_id + yürütülen tüm ifade bloklarında geçerli ifadenin sıra numarası. Yukarıdaki sonuçlar görülebilir: 1533716166_25519001_1 , Bu seri numarası, yürütme tarafından döndürülen sonuçlarda da görünecektir.Tüm geri dönüşler, yedekleme tablosunda geri alma için SQL ifadesini sorgulamak için bu seri numarasına dayanır.

    Daha fazla talimat için lütfen resmi belgedeki yedekleme işlevi açıklamasına bakın.

    Sonunda

    Böylesine kullanışlı bir araçla buna dayalı olarak bir WEB uygulaması kullanarak izin onay yönetimi ve diğer fonksiyonlar yapıyoruz, bir veritabanı işlem ve bakım platformu gerçekleştirilebilir, gerçekten kendiniz yazmanız gerekiyor mu? Inception'a dayalı bir veritabanı işletim ve bakım platformu olan Hasret'i keşfettim.

    RNG ekibinin sesi açığa çıktı, beş ejderhayı SOLO yapmak zorunda mıyım? Netizenler güldü
    önceki
    Planlandığı gibi geldi, test sürüşü Dongfeng Honda UR-V 240/370 TURBO
    Sonraki
    James Gunn, "Reunion 4" ün sorumlu yapımcısı olarak görevine devam ediyor! "Kayan kılavuz" tamamen geri döndü
    Supreme'in biyolojik markası KNOW WAVE yeni ortak adı çıktı! Ayrıca bir müzik bölümü getiriyor!
    Uzi, Shenchao'ya: Kardeşim, bu yıl yapmana yardım edeceğim!
    BAT otonom sürüş: aşağı yukarı aynı ekolojik zincir, tamamen farklı iş deneyimi
    Güneş parlıyor, vatandaşlar güneşlenmek için parka akın ediyor
    Dağ yolu performansı daha istikrarlı, Longji terasları Ford'un yeni Kaçışını yaşıyor
    Gong Jun şaşırtıyor ve "Şirin" "Böcek Ormanı'nın Büyük Savaşı" nı ekliyor Küçük kriket Apollo ile bir macera yaşayın
    Köpekbalığı x kamuflaj! BATHING APE® 1. CAMO giymek sokaktaki en yakışıklı!
    Bu 18 aracı öğrendikten sonra, ağ bant genişliğini nasıl izleyeceğinizi kesinlikle anlayacaksınız!
    RNG ve IG'nin finallerde cesur tahminleri var Wang ve Wang arasındaki yarışmada bir şey çok önemli.
    JD.com işten çıkarmalara yanıt veriyor: Bu bir söylenti ve bildirildi; Uber ve bilgisayar korsanları veri sızıntılarının kanıtlarını yok etmek için "özel olarak" yapıldı; Apple, Çin'deki uygulamaları
    Bahar esintisi sıcaklık gönderiyor, uçurtmalar gökyüzünde uçuyor
    To Top