mysql 데이터베이스를 백업하고 복원해야합니까?


15

백업 및 복원을위한 자동화 솔루션을 만드는 과정에서 전체 MySQL 서버를 , 나는 건너 한 mysql사용자 계정, 권한, 메타 데이터, 그런 종류의를 포함 할 것으로 보인다 데이터베이스. 이 데이터베이스를 백업해야합니까? 백업 및 복원을 시도하면 문제가 발생합니까?

상상할 수 있듯이 "mysql 백업 mysql 데이터베이스"에 대한 인터넷 검색 시간이 많이 있습니다.


3
전체 복원을 수행하려면 "information_schema"데이터베이스를 제외한 모든 항목을 백업해야합니다.
John Gardeniers

답변:


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 버전으로 mysql.user를 복원하려고 시도하면 임의의 권한 문제가 발생합니다. 버전에 관계없이 mysql 사용자 권한을 백업하는 방법은 SQL에서 사용자 권한을 덤프하는 것입니다. 그렇게하면 사용자 보조금은 완전히 이식 가능합니다. 이를 수행하는 두 가지 방법이 있습니다.

옵션 # 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 Dump Options를 사용하십시오.

업데이트 2011-09-19 15:54 EDT

SQL Grants를 통해 MySQL 권한의 백업을 유지 관리하는 데 매우 중요한 요소가 있습니다.

각 사용자는 수정 된 MD5 형식으로 비밀번호를 제공합니다. mysql 4.0 이상에서는 16 자 16 진수 문자열입니다. mysql 4.1+의 경우 41 자 (별표 뒤에 40 자 16 진 문자열)가 있습니다.

SQL Grants 덤프를 복원하기 전에 16 자 16 진 암호가 있는지 SQL Grants 덤프 파일을 점검하십시오. 하나라도 보이면 복원 할 mysql 서버의 /etc/my.cnf (또는 Windows의 경우 my.ini)에 다음을 추가해야합니다.

[mysqld]
old_password=1

OLD_PASSWORD 지시자 공존 정확하게 동일한 주행 MySQL의 인스턴스에 인증을 16 문자 (41)로부터 문자 암호를 허용한다. 앞으로 생성 된 모든 암호는 16 자입니다.

MySQL을 다시 시작할 필요는 없습니다. 이것을 실행하십시오 :

SET GLOBAL old_password = 1;

완전한 답변을 얻으려면 +1하십시오.
Mircea Vutcovici

1
다음 과 같이를 SHOW GRANTS사용하여 SQL 생성의 철자를 더 잘 작성 QUOTE()합니다.SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
kostix

11

예, 확실히 mysql데이터베이스 를 백업하려고합니다 . 서비스의 핵심 부분입니다. 다른 정보를 사용하여 내용을 재구성 할 수는 있지만 신속하게 서비스를 다시 받으려고 할 경우에는 그렇게하기가 매우 어렵습니다.


1
+1 mysql 데이터베이스를 백업하지 않으면 복원 후 시스템이 손상 될 가능성이 매우 높습니다. 거기에 있었고, 그것을 증명하기 위해 정신적 상처가 생겼습니다.
John Gardeniers

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.