MySQL Veritabanı

MySQL Sunucu'da Yedekleme ve Kurtarma (Backup & Recovery)

► Detaylı anlatım

mysqldump Programının Kullanımı

Bu bölümde, veri yedekleme ve yedeklenen verileri yeniden yükleme için mysqldump programının kullanılmasını incelemeye çalışacağız. Yedeklenen dosya bir kaç farklı şekilde kullanılabilir:

* Veri kaybı durumunda verileri yeniden elde etmek yedekleme amacıyla

* Yedek sunucu oluşturmada veri kaynağı olarak

* Bir veritabanının kopyasını oluşturmak için

mysqldump programı ile --tab seçeneğinin tanımlanması durumuna bağlı olarak 2 tür çıktı elde edilir:

* --tab seçeneği kullanılmadığında, mysqldump programı SQL komutlarını standart çıkışa yazar. Elde edilen çıktı içinde veritabanlarını, tabloları,vb. olşturan CREATE komutları ile verileri tablolara aktaran INSERT komutları yer alır. Çıktı bir dosya içine yazılabilir ve depolanan verileri tekrar oluşturmak için mysql programı ile tekrar yüklenir.

* --tab seçeneği kullanıldığında, mysqldump programı her bir tablo için 2 çıktı dosyası oluşturur. Sunucu tablo_adi.txt bir dosyaya, her satırda bir tablo satırı olmak üzere, tab sınırlı metin olarak yazar. tablo_adi.sql adlı dosyaya ise CREATE TABLE komutları yazılır.

mysqldump komutu ile SQL formatında veri yedekleme

Ön tanımlı olarak, mysqldump programı verileri SQL komutları olarak standart çıkışa yazar.

Aşağıdaki komutla elde edilen çıktıyı bir dosyaya kaydedebilirsiniz:

C:\> mysqldump [argümanlar] > dosya_adi

mysqldump programı ile --all-databases seçeneğini kullanarak tüm veritabanlarını yedekleyebilirsiniz:

C:\> mysqldump --all-databases > yedek.sql

mysqldump programı ile --databases seçeneğini kullanarak belirli veritabanlarını yedekleyebilirsiniz:

C:\> mysqldump --databases dbase1 dbase2 dbase3 > yedek.sql

--databases seçeneği komut satırında kullanılan tüm isimlerin veritabanı olarak değerlendirilmesini sağlar. Bu seçenek kullanılmadığında, mysqldump programı ilk isimi veritabanı adı ve takip edenleri ise tablo adı olarak değerlendirir.

--all-databases veya --databases seçenekleriyle, mysqldump programı CREATE DATABASE ve USE komutlarını her bir veritabanını depolamadan önce yazar. Bu sayede, depolanan dosya yüklendiğinde, mevcut olmayan veritabanını oluşturularak ön tanımlı veritabanı olarak tanımlarndığından, veritabanı içerikleri alındığı veritabanına geri yüklenir. Eğer depolanan dosyanın bir veritabanını yeniden oluşturmadan önce veritabanını silmesini isterseniz, --add-drop-database seçeneğini kullanabilirsiniz. Bu durumda, mysqldump programı her CREATE DATABASE komutundan önce bir DROP DATABASE komutu ekler.

Tek bir veritabanını depolamak için komut satırında tanımlayın:

C:\> mysqldump --databases dbase_adi > veri.sql

Tek bir veritabanı olursa, --databases seçeneğini kullanmayabilirsiniz:

C:\> mysqldump dbase_adi > veri.sql

--databases seçeneğini kullanmadığınızda, depolama dosyası CREATE DATABASE ve USE komutlarını içermez. Bu durumda, aşağıdaki kuralları uygulamanız gerekir:

* Depolanan dosyayı yüklediğinizde, sunucunun yüklenecek veritabanını belirlemesi için bir veritabanı tanımlamanız gerekir.

* Yeniden yüklemede, orjinal veritabanı adından farklı bir ad tanımlayarak veriyi farklı bir veritabanına yükleyebilirsiniz.

* Eğer yüklenen veritabanı mevcut değilse, öncelikle oluşturmanız gerekir.

* Eğer çıkış CREATE DATABASE komutu içermezse, --add-drop-database seçeneğinin herhangi bir etkisi yoktur. Eğer kullanırsanız, DROP DATABASE komutu oluşturmaz.

Sadece veritabanındaki belirli tabloları depolamak için, tablo adlarını komut satırında veritabanı adından sonra tanımlayın:

C:\> mysqldump dbase_adi tablo_adi1 tablo_adi4 tablo_adi6 > veri.sql

SQL formatındaki veriyi yükleme

SQL komutları içeren ve mysqldump programı tarafından oluşturulan dosyayı yüklemek için, dosya mysql programına aktarılır. Eğer dosya mysqldump programı ile oluşturulurken --all-databases veya --databases seçeneği ile kullanılırsa, CREATE DATABASE ve USE komutları içerir ve verinin yükleneceği ön tanımlı bir veritabanı tanımlanmasına gerek yoktur:

C:\> mysql < veri.sql

mysql programı içinde, source komutunu kullanabilirsiniz:

mysql> source veri.sql

Eğer dosya tek bir veritabanı içinse ve CREATE DATABASE ve USE komutlarını içermiyorsa, öncelikle veritabanını oluşturun:

C:\> mysqladmin create dbase_adi

Sonra, depolanan dosyayı yüklediğinizde, veritabanı adını tanımlayın:

C:\> mysql dbase_adi < veri.sql

Bu uygulamanın aynısını mysql programının içinden yapabilirsiniz. Önce veritabanı oluşturulur, veritabanı ön tanımlı olarak seçilir ve depolanan dosya yüklenir:

mysql> CREATE DATABASE IF NOT EXISTS dbase_adi;

mysql> USE dbase_adi;

mysql> source veri.sql