| | 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 | |