Назад | Перейти на главную страницу

MySQL: репликация базы данных MySQL

У меня есть первичный сервер записи (server1), который репликации на два сервера (server2 и server3), которые являются серверами запросов. Я реплицирую все базы данных на эти серверы, включая базу данных MySQL.

Когда я выполняю GRANT следующим образом, репликация работает отлично.

GRANT execute,select ON database1.* TO `user1`@`host` IDENTIFIED BY 'password';

Однако, если бы я сделал тот же GRANT, чтобы изменить разрешения для существующего пользователя без IDENTIFIED, репликация прерывалась ..

Error 'Can't find any matching row in the user table' on query. Default database: 'mysql'. Query: 'GRANT execute,select ON database1.* TO `user`@`host`'

Если я попытаюсь запустить запрос вручную, я получу ту же ошибку ..

Сервер 1:

mysql> SHOW VARIABLES LIKE "%version%";                                                                           
+-------------------------+------------------------------------------------------------+
| Variable_name           | Value                                                      |
+-------------------------+------------------------------------------------------------+
| protocol_version        | 10                                                         | 
| version                 | 5.0.77-log                                                 | 

**my.cnf**
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    old_passwords=1
    symbolic-links=0
    max_allowed_packet = 100M

    log-bin = /var/lib/mysql/logs/borg-binlog.log
    max_binlog_size=50M
    expire_logs_days=7

    [mysql.server]
    user=mysql
    basedir=/var/lib

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

Сервер 2:

mysql>  SHOW VARIABLES LIKE "%version%";
+-------------------------+------------------------------------------------------------+
| Variable_name           | Value                                                      |
+-------------------------+------------------------------------------------------------+
| protocol_version        | 10                                                         | 
| version                 | 5.0.77-log                                                 | 

my.cnf

server-id=12
master-host=x
master-user=x
master-password=x
master-connect-retry=60
relay-log=/var/lib/mysql/borg-relay.log
relay-log-index=/var/lib/mysql/borg-relay-log.index

Спасибо, что посмотрели


Изменить: в настоящее время он работает нормально, пока вы не сделаете грант, который его нарушит ...

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.128.0.5
                Master_User: repli-ragnarok
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: borg-binlog.002730
        Read_Master_Log_Pos: 4375760
             Relay_Log_File: borg-relay.005489
              Relay_Log_Pos: 4375899
      Relay_Master_Log_File: borg-binlog.002730
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: 
        Replicate_Ignore_DB: 
         Replicate_Do_Table: 
     Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
                 Last_Errno: 0
                 Last_Error: 
               Skip_Counter: 0
        Exec_Master_Log_Pos: 4375760
            Relay_Log_Space: 4375899
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

Изменить: сломанный статус ведомого показа из истории

+----------------------------------+-------------+----------------+-------------+---------------+--------------------+---------------------+-------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State                   | Master_Host | Master_User    | Master_Port | Connect_Retry | Master_Log_File    | Read_Master_Log_Pos | Relay_Log_File    | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error                                                                                                                                                                                                     | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
+----------------------------------+-------------+----------------+-------------+---------------+--------------------+---------------------+-------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 10.128.0.5  | repli-valhalla |        3306 |            60 | borg-binlog.002729 |            40429793 | borg-relay.005486 |      40311514 | borg-binlog.002729    | Yes              | No                |                 |                     |                    |                        |                         |                             |       1133 | Error 'Can't find any matching row in the user table' on query. Default database: 'mysql'. Query: 'GRANT execute,select ON auth_tracker.* TO `mail-sin1`@`%.sin1.netline.net.uk` IDENTIFIED BY 'mail-sin1666'' |            0 |            40311375 |        40429932 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                  NULL |
+----------------------------------+-------------+----------------+-------------+---------------+--------------------+---------------------+-------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
1 row in set (0.06 sec)

У меня была такая же проблема. В моем случае, когда я устанавливаю SLAVE-сервер, я просто импортировал дамп базы данных моего приложения, поэтому пользователи, созданные в базе данных MySQL по умолчанию, не находятся на моем SLAVE-сервере db, тогда оператор GRANT не работает.

На мой взгляд, теперь я либо создаю пользователей вручную, либо начинаю с нуля, импортируя также базу данных по умолчанию на мой SLAVE-сервер.

Я бы хотел проверить несколько вещей:

  • Flush Privileges на всех трех серверах (вероятно, ничего не сделает, но не повредит).
  • Убедитесь, что таблица mysql.user на ведущем устройстве идентична таблице на двух ведомых устройствах.
  • Кажется, есть очень похожий Отчет об ошибке MySQL это может иметь отношение к вашей проблеме.
  • Проверить серверный режим чтобы узнать, действительно ли проблема связана с режимом NO_AUTO_CREATE_USER.
  • Попробуйте выполнить GRANT или запросы вручную непосредственно на ведомых устройствах и посмотрите, получите ли вы такие же или разные результаты. Знайте, как это будет репликация и резервное копирование, прежде чем играть с чем-либо.