Mysql veritabanını yedeklemeli ve geri yüklemeli miyim?


15

Tüm MySQL sunucusunu yedeklemek ve geri yüklemek için otomatik bir çözüm oluşturma sürecinde, mysqlkullanıcı hesaplarını, izinleri, meta verileri, bu tür şeyleri içeren veritabanına rastladım . Bu veritabanı yedeklenmeli mi? Yedeklemek ve geri yüklemeye çalışmak bir şeyleri kırar mı?

Tahmin edebileceğiniz gibi "mysql yedekleme mysql veritabanını yedekleme" için bir heck vardı.


3
Tam bir geri yükleme yapmak için "information_schema" veritabanı hariç her şeyi yedeklemeniz gerekir.
John Gardeniers

Yanıtlar:


16

Dikkate alınması gereken ilginç bir şey var: mysqlVeritabanını yedeklemek , bu tür bir veritabanını yalnızca yedeklemeyi çalıştırdığınız mysql'nin aynı sürümüne geri yükleyebilmeniz için büyük ölçüde sınırlar. İşte nedeni:

İşte MySQL 5.0.45 gelen mysql.user

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     |         |       |
| x509_issuer           | blob                              | NO   |     |         |       |
| x509_subject          | blob                              | NO   |     |         |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.01 sec)

İşte MySQL 5.1.32 gelen mysql.user

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)

İşte MySQL 5.5.12 gelen mysql.user

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |
| plugin                 | char(64)                          | YES  |     |         |       |
| authentication_string  | text                              | YES  |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.01 sec)

Eğer mysql.user için bir MySQL sürümüne geri yüklemeye çalışırsanız, rasgele izin sorunları üretecektir. MySQL kullanıcı izinlerini sürümden bağımsız bir şekilde yedeklemenin yolu, kullanıcı verilerinin SQL'e dökülmesidir. Bu şekilde, kullanıcı hibeleri tamamen taşınabilirdir. Bunu başarmanın iki yolu vardır:

SEÇENEK # 1: MAATKIT Kullanımı

mk-show-grants , bağlandığınız mysql örneği için gereken SQL'i oluşturur. (MAATKIT'in Percona Toolkit'e taşındığını unutmayın. Bu araç büyük olasılıkla pt-show-grants olarak adlandırılacaktır).

SEÇENEK # 2: SQL GRANTS'ın dökümü

Kendi mk-show-hibeleri emülasyonumu yazdım. Anonim kullanıcıları dışarıda bırakacak. Şöyle görünüyor:

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

Bu seçeneklerden herhangi birinin kullanılması, kullanıcı hibelerinin daha kararlı bir yedeğini oluşturur.

AYRI BİR NOTDA

Şimdi bu günlük çıktı seçeneğini kullanıyorsanız

[mysqld]
log-output=TABLE

mysql veritabanı yavaş günlüğü (etkinleştirilmişse) bir metin dosyası yerine mysql şemasında bir mysql tablosu olarak doldurur. Yani, fiziksel yedekleme yapmak böyle mysql tablo tabanlı günlükleri içerecektir. İnanın bana, genel günlük ve yavaş sorgu günlüğü etkinleştirilmişse ve mysql şemasında birikirse disk alanı değmez. Sadece MySQL Grants Döküm Seçenekleri ile sopa.

GÜNCELLEME 2011-09-19 15:54 EDT

SQL Grants aracılığıyla MySQL izinlerinin yedeklerinin korunmasında çok önemli bir faktör vardır:

Her kullanıcı, değiştirilmiş bir MD5 biçiminde şifresi ile çıkar. MySQL 4.0 ve geri için, 16 karakterli bir onaltılık dize. MySQL 4.1+ için, 41 karakterdir (Yıldız işareti ve 40 karakterlik onaltılık dize).

SQL Grants dökümünü geri yüklemeden önce, SQL Grants döküm dosyasında 16 karakterlik onaltılık parola olup olmadığını kontrol edin. Hatta bir tane görürseniz, geri yükleyeceğiniz mysql sunucusunda /etc/my.cnf (veya Windows için my.ini) klasörüne aşağıdakileri eklemeniz gerekir:

[mysqld]
old_password=1

Burada old_password direktif arada ve doğru olarak aynı çalışma MySQL örneğinde kimlik doğrulaması için 16 karakter ve 41-Char şifreleri izin verir. Bundan sonra oluşturulan tüm şifreler 16 karakter olacaktır.

MySQL'in yeniden başlatılması gerekli değildir. Sadece şunu çalıştırın:

SET GLOBAL old_password = 1;

Tam bir cevap için +1.
Mircea Vutcovici

1
Daha iyi , bu şekilde SHOW GRANTSkullanarak nesil SQL yazım QUOTE():SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
kostix

11

Evet, kesinlikle mysqlveritabanını yedeklemek istiyorsunuz - bu hizmetinizin ayrılmaz bir parçasıdır. Eğer iken edebilir diğer bilgilerden 's içeriğini yeniden hızla geri hizmete almaya çalışıyorsanız, bunu yaparken zorluk engelleyicidir.


1
+1 MySQL veritabanını yedeklemezseniz, bir geri yükleme yaptıktan sonra bozuk bir sisteme sahip olma olasılığı çok yüksektir. Orada, bunu yaptım, bunu kanıtlamak için zihinsel yara izleri var.
John Gardeniers

6

Mysql veritabanını sürümler arasında, en azından oldukça yeni sürümlerde geri yükleyebilirsiniz. mysql_upgradeMySQL'in yeni sürümlerinde, sistem tablolarını sizin için yükselten bir araç var.

http://dev.mysql.com/doc/refman/5.0/en/mysql-upgrade.html


Bu çok doğrudur. Bazılarının bunu kullandığı ve sadece mükemmel bir şekilde yükselttiği durumlar gördüm. Başkalarını kasap gördüm. MySQL DBA olarak benim açımdan. Bu yönteme olan inancımı kaybettim. Cevabınız kullanımdaki sağlam inancı yansıttığından, ilk gruptan olmalısınız. Mysql_upgrade'ye böyle bir güven için +1.
RolandoMySQLDBA

5.6 sürümümü 8.0 sürümüne aktardığımda sunucuyu şaşırttı.
PHPst

5

Benzer bir mysql sürümüne geri yüklediğiniz sürece, mysql veritabanını bir yedekten geri yükleyebilirsiniz. Şüpheniz varsa, mysql veritabanı şemaları (yedekten ve yeni mysql sunucusundan) arasında bir fark yaratın.


Mysql'i yedeklediğiniz sürümün geri yüklenmesinden bahseden ilk +1 için.
RolandoMySQLDBA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.