| 204 | |
| 205 | == Настраиваем репликацию между двумя серверами mysql == |
| 206 | |
| 207 | В конфиг-файлы серверов добавляем следующее: |
| 208 | |
| 209 | {{{ |
| 210 | server-id = 1 |
| 211 | log_bin = /var/log/mysql/mysql-bin.log |
| 212 | expire_logs_days = 10 |
| 213 | max_binlog_size = 100M |
| 214 | binlog_do_db = dispatcher |
| 215 | auto_increment_offset = 1 |
| 216 | auto_increment_increment= 2 |
| 217 | }}} |
| 218 | |
| 219 | где {{{server-id}}} - идентификатор сервера (должен быть 1 у сервера 1 и 2 у сервера 2), |
| 220 | {{{auto_increment_offset}}} также должен быть 1 у сервера 1 и 2 у сервера 2. |
| 221 | |
| 222 | Перезапускаем mysqld на обоих серверах: |
| 223 | |
| 224 | {{{ |
| 225 | $ sudo service mysql restart |
| 226 | }}} |
| 227 | |
| 228 | Подключаемся к mysql серверу и создаем пользователя для репликации: |
| 229 | |
| 230 | {{{ |
| 231 | mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'password'; |
| 232 | }}} |
| 233 | |
| 234 | Даем пользователю право на репликацию: |
| 235 | |
| 236 | {{{ |
| 237 | mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; |
| 238 | }}} |
| 239 | |
| 240 | На сервере 1 блокируем базу данных на запись: |
| 241 | |
| 242 | {{{ |
| 243 | mysql> FLUSH TABLES WITH READ LOCK; |
| 244 | }}} |
| 245 | |
| 246 | Выводим состояние мастера: |
| 247 | |
| 248 | {{{ |
| 249 | mysql> SHOW MASTER STATUS; |
| 250 | }}} |
| 251 | |
| 252 | Будет выведена примерно такая таблица: |
| 253 | |
| 254 | {{{ |
| 255 | +------------------+----------+--------------+------------------+-------------------+ |
| 256 | | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | |
| 257 | +------------------+----------+--------------+------------------+-------------------+ |
| 258 | | mysql-bin.000002 | 62249651 | dispatcher | | | |
| 259 | +------------------+----------+--------------+------------------+-------------------+ |
| 260 | 1 row in set (0.00 sec) |
| 261 | }}} |
| 262 | |
| 263 | Не выходя из консоли mysql (при выходе снимется блокировка), из другого терминала дампим базу данных: |
| 264 | |
| 265 | {{{ |
| 266 | $ mysqldump -u root -p dispatcher >dispatcher.dump |
| 267 | }}} |
| 268 | |
| 269 | Когда дамп будет готов, снова выведем {{{SHOW MASTER STATUS;}}} и убедимся, что значение {{{Position}}} не изменилось. Теперь можно снять блокировку: |
| 270 | |
| 271 | {{{ |
| 272 | mysql> UNLOCK TABLES; |
| 273 | }}} |
| 274 | |
| 275 | или просто выйти из консоли mysql. |
| 276 | |
| 277 | Копируем сделанный дамп базы на второй сервер. Записываем дамп в базу данных: |
| 278 | |
| 279 | {{{ |
| 280 | $ mysql -u root -p dispatcher <dispatcher.dump |
| 281 | }}} |
| 282 | |
| 283 | Теперь входим в консоль mysql сервера 2 и запускаем репликацию: |
| 284 | |
| 285 | {{{ |
| 286 | mysql> STOP SLAVE; |
| 287 | mysql> CHANGE MASTER TO MASTER_HOST = '<server 1 address>' , MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 62249651; |
| 288 | mysql> START SLAVE; |
| 289 | }}} |
| 290 | |
| 291 | Проверим, что репликация активирована: |
| 292 | |
| 293 | {{{ |
| 294 | mysql> SHOW SLAVE STATUS\G |
| 295 | *************************** 1. row *************************** |
| 296 | Slave_IO_State: Waiting for master to send event |
| 297 | Master_Host: 192.168.0.64 |
| 298 | Master_User: replicator |
| 299 | Master_Port: 3306 |
| 300 | Connect_Retry: 60 |
| 301 | Master_Log_File: mysql-bin.000003 |
| 302 | Read_Master_Log_Pos: 118750 |
| 303 | Relay_Log_File: r3-relay-bin.000002 |
| 304 | Relay_Log_Pos: 82017 |
| 305 | Relay_Master_Log_File: mysql-bin.000003 |
| 306 | Slave_IO_Running: Yes |
| 307 | Slave_SQL_Running: Yes |
| 308 | Replicate_Do_DB: |
| 309 | Replicate_Ignore_DB: |
| 310 | Replicate_Do_Table: |
| 311 | Replicate_Ignore_Table: |
| 312 | Replicate_Wild_Do_Table: |
| 313 | Replicate_Wild_Ignore_Table: |
| 314 | Last_Errno: 0 |
| 315 | Last_Error: |
| 316 | Skip_Counter: 0 |
| 317 | Exec_Master_Log_Pos: 118750 |
| 318 | Relay_Log_Space: 82221 |
| 319 | Until_Condition: None |
| 320 | Until_Log_File: |
| 321 | Until_Log_Pos: 0 |
| 322 | Master_SSL_Allowed: No |
| 323 | Master_SSL_CA_File: |
| 324 | Master_SSL_CA_Path: |
| 325 | Master_SSL_Cert: |
| 326 | Master_SSL_Cipher: |
| 327 | Master_SSL_Key: |
| 328 | Seconds_Behind_Master: 0 |
| 329 | Master_SSL_Verify_Server_Cert: No |
| 330 | Last_IO_Errno: 0 |
| 331 | Last_IO_Error: |
| 332 | Last_SQL_Errno: 0 |
| 333 | Last_SQL_Error: |
| 334 | Replicate_Ignore_Server_Ids: |
| 335 | Master_Server_Id: 1 |
| 336 | Master_UUID: 7603167a-1081-11e6-9637-902b3433882b |
| 337 | Master_Info_File: /var/lib/mysql/master.info |
| 338 | SQL_Delay: 0 |
| 339 | SQL_Remaining_Delay: NULL |
| 340 | Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates |
| 341 | Master_Retry_Count: 86400 |
| 342 | Master_Bind: |
| 343 | Last_IO_Error_Timestamp: |
| 344 | Last_SQL_Error_Timestamp: |
| 345 | Master_SSL_Crl: |
| 346 | Master_SSL_Crlpath: |
| 347 | Retrieved_Gtid_Set: |
| 348 | Executed_Gtid_Set: |
| 349 | Auto_Position: 0 |
| 350 | Replicate_Rewrite_DB: |
| 351 | Channel_Name: |
| 352 | Master_TLS_Version: |
| 353 | 1 row in set (0.00 sec) |
| 354 | }}} |
| 355 | |
| 356 | Аналогично, только без выполнения/восстановления дампа настраиваем репликацию сервера 2 на сервер 1. |
| 357 | |