"Enter"a basıp içeriğe geçin

Powershell ile MySQL Bağlantısı Yapmak

Bir ETL çalışması için Powershell ile MySQL bağlantısı yapmam gerekti ve biraz kurcalama ile birlikte uzaktan itici görünen Powershell’in aslında bir derya deniz olduğunu fark ettim. Neyse lafı fazla uzatmadan konuya girelim.

Powershell’de MySQL bağlantısı yapabilmek için öncelikle ilgili DotNet Assembly DLL’inin (MySql.Data.dll) belleğe yüklenmesi gerekiyor. Bunun için de MySQL Connector Net paketinin scriptin çalışacağı sistemde yüklü olması gerekiyor. Eğer yüklü değilse öncelikle buradan indirip kurun. Kurulumdan sonra bütün dosyaların “C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.26” altına gelmiş olması gerekiyor. İlgili DLL dosyasını buradan çağıracağız.

Powershell’deki işlemlerimizi Powershell ISE üzerinden yapacağız. ISE’nin açılımı Integrated Scripting Environment. Yani Microsoft bildiğiniz yazılım geliştirme ortamının script geliştirme ortamını yapmış. Powershell’in Visual Studio’su. O zaman Powershell ISE’yi açalım. İlk açıldığında benim önüme sadece Powershell’in mavi konsol ekranı geldi. Burada menülerden View->Show Script Pane seçerek Script panelini açtım.

Hemen Scriptimizin ilk satırını yazalım.

[void][System.Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.26\Assemblies\net5.0\MySql.Data.dll");

Bu satırla MySQL bağlantısını yapacağımız metotları sağlayan DLL dosyasını belleğe yüklemiş olduk. Burada [void] dikkatinizi çekmiş olabilir. Köşeli parantez Powershell’de iki amaçla kullanılıyor birisi Java, C/C++, Python gibi dillerden de bildiğimiz dizi indisi bildirme amacı. Diğeri de (burada kullandığımız) veri türü bildirim amacı. Mesela şöyle bir örnekle açıklayalım:

[int]$intDeger = read-host "Bir Tamsayı Girin"

Burada, konsoldan gelen veri türü String ancak biz [int] bildirimi yaparak $intDegerdeğişkenini yalnızca bir tamsayı olacak şekilde sınırlandırıyoruz.

Script’imize dönecek olursak burada da diyoruz ki LoadFrom metodundan dönen veri türü void olsun. Aslında bunun anlamı bu satırı işle ama konsola bu işleme sonucundaki bilgilendirme mesajlarını basma. Böylece script çalışırken konsolda satır aralarında istemediğimiz bilgilendirme mesajlarını görmeyeceğiz. Yani [void] bildirimi, metodun çıktısını ezer ve böylece konsol penceresi bu metodun çıktısını yok sayar. İki tane iki nokta üst üste (::) de, bir .NET sınıfının statik yöntemini çağırır. Burada System.Reflection.Assembly sınıfının LoadFrom metodunu bu şekilde çağırdık.

Bağlantıyı yapacağımız DLL dosyasını belleğe yükledikten sonra bağlantı işlemlerine geçebiliriz. Bu amaçla $baglanti adında bir değişken oluşturalım. Bu değişken MySqlConnection türünden bir nesne olacak. Yukarıda ilgili DLL dosyasını belleğe yüklediğimiz için bu nesneyi çağırabiliyoruz:

$baglanti = New-Object MySql.Data.MySqlClient.MySqlConnection

Ardından bir connection string tanımlayacağız. Bu string ifade ile bağlanılacak veritabanı sunucu adresi, port, kullanıcı adı, parola, veritabanı adı ve bağlantıya has diğer birtakım parametreleri tanımlıyor. Connection string ile ilgili diğer parametreleri buradan inceleyebilirsiniz.

$baglanti.ConnectionString = "server=db_host_adresi;user id=kullanıcı_adı;password=parola;database=db_adı;pooling=false;SslMode=none"

Connection stringteki SslMode parametresi bağlantının SSL üzerinden sağlanıp sağlanmayacağını belirtir. Biz none ile SSL kullanmayacağımızı bildiriyoruz. Bu parametreyi vermezsek SSL enable edilmemiş MySQL sunucularına yapılacak bağlantılarda “Exception calling “Open” with “0” argument(s): “SSL Connection error.” hatası verecektir.

Ardından, bağlantıyı açalım:

$baglanti.Open()

Bağlantımızı da açtıktan sonra eğer bir sorun yoksa sunucuya komut göndermeye hazırız. Biz burada “SHOW TABLES” sorgusunu göndereceğiz ve sonucu çıktı penceresinde görüntüleyeceğiz.

$komut = New-Object MySql.Data.MySqlClient.MySqlCommand;
$komut.Connection = $baglanti;
$komut.CommandText = "SHOW TABLES";
$reader = $mycommand.ExecuteReader();
while($reader.Read()){
    $tabloAdi = $reader.GetString(0);
    echo $tabloAdi;
}
$baglanti.Close();

Burada alanların değerini $reader nesnesinin GetString metodunu kullanarak aldık. Bu metot null alanlarda geriye exception döndürecektir. Bu exception’ı görmek istemiyorsanız $reader nesnesinin GetValue metodunu da kullanabilirsiniz.

Kaynaklar

  1. Some examples to accessing a MySQL Database from Powershell – https://michlstechblog.info/blog/powershell-some-examples-to-use-a-mysql-database/
  2. MySQL Connection with PowerShell Scripting – https://blog.mclaughlinsoftware.com/2021/04/27/mysql-ps-connection/
  3. Connecting PowerShell to MySQL Database – https://www.techtrek.io/connecting-powershell-to-mysql-database/

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir