Əsas səhifə > MySQL > mysqldump – A Database Backup Program

mysqldump – A Database Backup Program

MySQL Documentation 5.5: The mysqldump client is a backup program originally written by Igor Romanenko. It can be used to dump a database or a collection of databases for backup or transfer to another SQL server (not necessarily a MySQL server). The dump typically contains SQL statements to create the table, populate it, or both.
mysqldump-ın nə olduğunu oxuduq qəşəng,sadə şəkildə yazılıb tərcüməyə də ehtiyac yoxdur…amma ancaq lakin burda bir neçə maraqlı hadisələr var…
İlk öncə onu deyim ki, mysqldump-ın 2 output növü var –tab option-lu və –tab-sız…–tab-lıdan başdıyaq
***
Deyək ki, bizdə language_aze cədvəli var…cədvəl strukturu və içindəkilər bunlardır:

mysql> desc language_aze\g
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| CountryCode | char(3)       | NO   |     |         |       |
| Language    | char(30)      | NO   |     |         |       |
| IsOfficial  | enum('T','F') | NO   |     | F       |       |
| Percentage  | float(4,1)    | NO   |     | 0.0     |       |
+-------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from language_aze;
+-------------+-------------+------------+------------+
| CountryCode | Language    | IsOfficial | Percentage |
+-------------+-------------+------------+------------+
| AZE         | Armenian    | F          |        2.0 |
| AZE         | Azerbaijani | T          |       89.0 |
| AZE         | Lezgian     | F          |        2.3 |
| AZE         | Russian     | F          |        3.0 |
+-------------+-------------+------------+------------+
4 rows in set (0.00 sec)

İndi biz bu cədvəli dump etmək istəsək:

[root@sh ~]# mysqldump --tab='/var/lib/mysql' -u root -p my_new_db language_aze
Enter password: 

Və əgər /var/lib/mysql-ə getsək orada 2 faylın əmələ gəldiyini görərik…biri language_aze.sql digəri isə language_aze.txt

Maraqlıdır ki, bu zaman table create definition language_aze.sql faylında, cədvəlin içindəki məlumatlar isə language_aze.txt faylında yerləşəcək:


🙂 yaxşı dedim deməyinə…😀
Bu mysqldump-ın birinci –tab-lı output-u idi…İndi isə –tab-sıza baxaq. İlk öncə fayllarımızı silək:

[root@sh ~]# cd /var/lib/mysql
[root@sh mysql]# rm language_aze.sql
rm: remove regular file `language_aze.sql'? y
[root@sh mysql]# rm language_aze.txt
rm: remove regular file `language_aze.txt'? y

Və dump edək:

[root@sh ~]# mysqldump -u root -p my_new_db language_aze > /var/lib/mysql/dump.sql
Enter password: 

Və həqiqətən də dump.sql adlı faylımız yarandı:

İndi isə bu faylın içini açıb orda nələr olduğuna bir baxaq…

Deməli şəkilə diqqət yetirsək görərik ki,faylımızda birinci olaraq:

DROP TABLE IF EXISTS `language_aze`; -- əgər belə bir table varsa onu sil!

Daha sonra :

CREATE TABLE `language_aze` (
  `CountryCode` char(3) NOT NULL DEFAULT '',
  `Language` char(30) NOT NULL DEFAULT '',
  `IsOfficial` enum('T','F') NOT NULL DEFAULT 'F',
  `Percentage` float(4,1) NOT NULL DEFAULT '0.0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- Cədvəli yaratmaq üçün komanda!

Daha sonra bu 2 yazı:

LOCK TABLES `language_aze` WRITE;
.
.
UNLOCK TABLES;

Deməli bu 2 yazı bizə qaranti verir ki, gələcəkdə biz bu dump faylından restore edəndə, language_aze cədvəli hər hansı digər insert (WRITE) üçün bağlı olacaq…Yəni yalnız dump faylındakı insert-lər daxil olunacaq…Daha sonra unlock olunacaq və əlavə hər hansı digər user tərəfindən olunacaq insert-ləri qəbul edəcək…

Və İnsert hissə

INSERT INTO `language_aze` VALUES ('AZE','Armenian','F',2.0),('AZE','Azerbaijani','T',89.0),
('AZE','Lezgian','F',2.3),('AZE','Russian','F',3.0);

Gördüyümüz kimi mysqldump default olaraq multiple insert-dən istifadə edir…Bu çox faydalıdır…çünki multiple insert adi insert-dən daha sürətlidir və gələcəkdə restore vaxtı daha sürətli insert əldə edə biləcik…
Bəs yaxşı bu yazılar hardan gəlir düşür bura?😛 Yəni, əslində biz heçnə qeyd etməmişik…
Bunun səbəbi odur ki, mysqldump default\implicit olaraq –opt opsiyası ilə gəlir…default olaraq bu belə olduğu üçün mən yuxarıda –opt qeyd etməmişdim.
–opt opsiyasını yazmaq aşağıdakıları yazmaq kimi bir şeydir. Yəni aşağıdakılar –opt -nin içində var (əgər belə demək mümkündürsə):
1. –add-drop-table -> Add a DROP TABLE statement before each CREATE TABLE statement.
2. –add-locks -> Surround each table dump with LOCK TABLES and UNLOCK TABLES statements. This results in faster inserts when the dump file is reloaded.
3. –create-options -> Include all MySQL-specific table options in the CREATE TABLE statements.
4. –disable-keys -> For each table, surround the INSERT statements with /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; and /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; statements. This makes loading the dump file faster because the indexes are created after all rows are inserted. This option is effective only for nonunique indexes of MyISAM tables. It has no effect for other tables.
5. –extended-insert -> Use multiple-row INSERT syntax that include several VALUES lists. This results in a smaller dump file and speeds up inserts when the file is reloaded.
6. –lock-tables -> For each dumped database, lock all tables to be dumped before dumping them. The tables are locked with READ LOCAL to permit concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB, –single-transaction is a much better option than –lock-tables because it does not need to lock the tables at all.
7. –quick -> This option is useful for dumping large tables. It forces mysqldump to retrieve rows for a table from the server a row at a time rather than retrieving the entire row set and buffering it in memory before writing it out.
8. –set-charset -> Add SET NAMES default_character_set to the output. This option is enabled by default. To suppress the SET NAMES statement, use –skip-set-charset.

Bəli məncə indi aydın oldu ki, niyə bizim dump faylımızda o yazılar peyda olmuşdu…
–opt-nin nə qədər faydalı olduğunu nümayiş etdirmək üçün –skip-opt (yəni opt-dən istifadə etmə,onu skip elə)

[root@sh ~]# mysqldump --skip-opt -u root -p my_new_db language_aze > /var/lib/mysql/dump2.sql
Enter password: 

Özünüz müqayisə edin🙂

mysqldump haqqında daha ətraflı documentation-da:
mysqldump
Using mysqldump for Backups

Kateqoriyalar: MySQL Etiketlər: , , ,
  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: