`mysql` 데이터베이스를 복제해도 괜찮습니까? 단순히 당시에

원래 마스터 간 복제를 처음 설정할 때 다음을 사용했습니다.

binlog-ignore-db=mysql

사용자 계정과 권한을 수동으로 동기화하고 있습니다. 이것은 단순히 당시에 사용했던 방법에서 수행 된 방법 입니다. 그러나이 줄을 제거하고 mysql데이터베이스 자체를 복제 하지 않아야하는 이유가 있습니까?

그렇다면 : 변경하기 전에 모든 보조금이 두 데이터베이스에서 모두 동일하다는 것을 확인하는 것 외에도 mysql 데이터베이스 전체가 동일하다는 것을 더 잘 확인하는 것 외에 다시 확인하거나 알아야 할 다른 것이 있습니까?



답변

SQL GRANT 명령 을 몰라도 자신에게 mysql 권한을 부여하는 것은 전적으로 가능 합니다 .

예 : 다음은 암호가 Clarkd 인 superdba라는 곳에서 SQL GRANT를 사용하여 모든 권한을 가진 사용자를 작성하는 것입니다.

GRANT ALL PRIVILEGES ON *.* TO superdba@'%' IDENTIFIED BY 'ClarkKent' WITH GRANT OPTION;

GRANT 명령없이이를 수행하는 방법은 다음과 같습니다.

우선, MySQL 5.1.51 용 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)

다음 SQL 명령을 실행하십시오.

INSERT INTO mysql.user SET
Host='%',User='superdba',Password=PASSWORD('ClarkKent'),
Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',
Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',
Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',
Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',
Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',
Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',
Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',
Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y';
FLUSH PRIVILEGES;

INSERT는 이진 로그에 포함될 수있는 유효한 SQL 문입니다. 누군가 이것을 실행하고 네트워크를 통해 보이는 암호가 보이기를 원하십니까? 마스터의 이진 로그에 앉아? 슬레이브의 릴레이 로그에 앉아?

이 지시어를 갖는 것

binlog-ignore-db=mysql

그러한 SQL을 사용하여 mysql 권한을 포기하지 못하게합니다. 그러나 GRANT는이 방법으로 중지 할 수 없습니다. 따라서 다음과 같이 보조금을 수행해야합니다.

SET SQL_LOG_BIN=0;
GRANT ...

GRANT가 마스터에서 슬레이브로 순회하는 것을 방지합니다.


답변

나는 mysql 데이터베이스를 복제하는 데 아무런 문제가 없었지만 인프라가 아닌 다른 사람들은 MySQL이 사용하는 포트 중 하나라도 연결할 수없는 방화벽 및 프록시 어플라이언스를 사용하여 추가적인 수준의 보안을 제공합니다. . 한 번만 권한을 부여하고 복제해야한다는 것을 알기 때문에 편의성이 향상됩니다. 호스트가 의도 한 것 이외의 다른 사람 (예 : 사용자, 슬레이브 등)에 노출되지 않도록 호스트를 올바르게 설정 한 경우 문제가 해결 될 수 있습니다.

중간 가로 채기에서 man에 지나치게 관심이 있다면 SSL을 통해 복제를 보내는 옵션이 항상 있습니다.