`mysql`データベースをバックアップおよび復元する必要がありますか?


15

MySQLサーバー全体をバックアップおよび復元するための自動化されたソリューションを作成する過程でmysql、ユーザーアカウント、権限、メタデータなどが含まれていると思われるデータベースに出会いました。このデータベースをバックアップする必要がありますか?バックアップして復元しようとすると問題が発生しますか?

ご想像のとおり、「mysqlがmysqlデータベースをバックアップする」ためにグーグルでやったことがあります。


3
完全な復元を行うには、「information_schema」データベース以外のすべてをバックアップする必要があります。
ジョンガーデニアス

回答:


16

ここで考慮すべき興味深いmysql点があります。データベースをバックアップすると、バックアップを実行したmysqlの同じバージョンにのみそのようなデータベースを復元できるという点で非常に制限されます。その理由は次のとおりです。

これは、MySQL 5.0.45の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)

これは、MySQL 5.1.32の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)

これは、MySQL 5.5.12の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)

mysql.userを意図していないバージョンのMySQLに復元しようとすると、ランダムなアクセス許可の問題が発生します。バージョンに依存しない方法でmysqlユーザー権限をバックアップする方法は、SQLでユーザー権限をダンプすることです。このように、ユーザーの許可は完全に移植可能です。これを達成するには、2つの方法があります。

オプション#1:MAATKITを使用する

mk-show-grantsは、接続するmysqlインスタンスに関係なく、必要なSQLを生成します。(MAATKITはPercona Toolkitに移行されていることに注意してください。このツールはおそらくpt-show-grantsと呼ばれます)。

オプション#2:SQL GRANTSのダンプをスクリプト化する

mk-show-grantsのエミュレーションを独自に作成しました。匿名ユーザーは除外されます。次のようになります。

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

これらのオプションのいずれかを使用すると、ユーザー許可のより安定したバックアップが作成されます。

別のメモに

このログ出力オプションを使用している場合

[mysqld]
log-output=TABLE

mysqlデータベースは、スローファイル(有効な場合)をテキストファイルではなくmysqlスキーマのmysqlテーブルとして設定します。そのため、物理バックアップを実行すると、このようなmysqlテーブルベースのログが含まれます。一般的なログとスロークエリログが有効になっていて、mysqlスキーマに蓄積されている場合、ディスクスペースの価値はありません。MySQL Grantsのダンプオプションに固執するだけです。

更新2011-09-19 15:54 EDT

SQL Grantsを介してMySQLパーミッションのバックアップを維持することには、非常に重要な要素が1つあります。

各ユーザーは、修正されたMD5形式でパスワードを発行します。mysql 4.0以降では、16文字の16進数文字列です。mysql 4.1+の場合、41文字です(アスタリスクの後に40文字の16進文字列が続きます)。

SQL Grantsダンプを復元する前に、SQL Grantsダンプファイルで16文字の16進パスワードを確認してください。1つでも表示される場合は、復元先のmysqlサーバーの/etc/my.cnf(またはWindowsの場合はmy.ini)に次を追加する必要があります。

[mysqld]
old_password=1

OLD_PASSWORDディレクティブが共存し、正しく同じ実行中のMySQLインスタンスに認証するために、16文字と41-文字のパスワードを許可します。今後作成されるパスワードは16文字です。

MySQLの再起動は必要ありません。これを実行するだけです:

SET GLOBAL old_password = 1;

完全な答えを得るために+1。
ミルチャVutcovici

1
次のように、SHOW GRANTSSQLを使用して生成SQLをつづりますQUOTE()SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
kostix13年

11

はい、あなたは間違いなくmysqlデータベースをバックアップしたいです-それはあなたのサービスの不可欠な部分です。他の情報からコンテンツ再構築することはできます、すぐにサービスに戻ろうとする場合、再構築するのは困難です。


1
+1 mysqlデータベースをバックアップしないと、復元後にシステムが破損する可能性が非常に高くなります。そこに行って、それをして、それを証明するために精神的な傷をつけました。
ジョンガーデニアーズ

6

バージョン間、少なくともかなり新しいバージョン間でmysqlデータベースを復元できます。mysql_upgradeシステムテーブルをアップグレードするMySQLの新しいバージョンに含まれるというツールがあります。

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


これは非常に真実です。これを使用して完全にアップグレードするケースを見てきました。私は他の人がそれを肉屋で見たことがある。MySQL DBAとしての私の立場から。私はその方法に対する信頼を失いました。あなたの答えは、その使用に対する信頼を反映しているため、最初のグループからのものでなければなりません。このようなmysql_upgradeの信頼性のために+1。
RolandoMySQLDBA

5.6を8.0バージョンにインポートすると、サーバーが停止しました。
PHPst

5

同様のmysqlバージョンに復元する限り、バックアップからmysqlデータベースを復元できます。疑問がある場合は、mysqlデータベーススキーマ(バックアップからのスキーマと新しいmysqlサーバーからのスキーマ)の差分を作成してください。


バックアップしたのと同じバージョンにmysqlを復元することに最初に言及した+1。
RolandoMySQLDBA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.