Показаны сообщения с ярлыком MySQL. Показать все сообщения
Показаны сообщения с ярлыком MySQL. Показать все сообщения

понедельник, 17 мая 2010 г.

Настройка Master-Slave репликации в MySQL 5

Настройка Master-Slave репликации в MySQL

Исходные данные

  1. Хост №1 (mysql1) - будущий master, ОС ALT Linux Sisyphus, СУБД MySQL 5.0, существующая база replica;
  2. Хост №2 (mysql2) - будущий slave, ОС ALT Linux Sisyphus, СУБД MySQL 5.0.
СУБД на обоих хостах запущены и работают.

Требуется

Настроить репликацию базы replica на хосте mysql1 на хост mysql2 в режиме master-slave.

Порядок действий

На хосте mysql1

В файле конфигурации MySQL (/var/lib/mysql/my.cnf):
  1. Отключаем параметр skip-networking
  2. Добавляем параметры:
server-id=1
log-bin=/log/bin.log
binlog-do-db=replica
binlog-ignore-db=mysql
binlog-ignore-db=test
Перезапускаем демона.
#service mysqld restart
В консоли MySQL создаём на master-хосте пользователя с полномочиями на репликацию:
$mysql -uroot -p

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave';
mysql> FLUSH PRIVILEGES;
mysql> USE replica;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------+----------+--------------+------------------+
| bin.000002 |       98 | replica      | mysql,test       |
+------------+----------+--------------+------------------+
Запоминаем параметры File и Position.
Далее создаём дамп реплицируемой базы:
$mysqldump -uroot -p replica > replica.dump
И переносим этот дамп на slave-хост.
Внимание. Блокировка таблиц будет снята, если выйти из консоли MySQL. Для создания дампа базы и переноса его на slave-хост следует использовать другую пользовательскую сессию.
После выполнения всех операций на slave-хосте в консоли MySQL разблокируем таблицы:
mysql> UNLOCK TABLES;

На хосте mysql2

Создаём базу replica и наполняем её из дампа с master-хоста:
$mysqladmin -uroot -p create replica
$mysql -uroot -p replica < replica.dump
В файле конфигурации MySQL (/var/lib/mysql/my.cnf):
  1. Отключаем параметр skip-networking
  2. Добавляем параметры:
server-id=2
master-host=mysql1
master-user=slave_user
master-password=slave
master-connect-retry=60
replicate-do-db=replica
relay-log=/log/slave-relay-bin
relay-log-index=/log/slave-relay-bin.index
Перезапускаем демона.
#service mysqld restart
Затем запускаем процесс репликации в консоли MySQL (используя параметры File и Position с master-хоста):
$mysql -uroot -p

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO
    -> MASTER_HOST='mysql1',
    -> MASTER_USER='slave_user',
    -> MASTER_PASSWORD='slave',
    -> MASTER_LOG_FILE='bin.000002',
    -> MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Убеждаемся в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в Yes.

Краткое резюме

В принципе репликация работает.
Потенциальные проблемы:
  1. Если что-либо меняется на slave-хосте, то, естественно, на master-хост изменения перенесены не будут. К сожалению параметр read-only в конфигурации slave-hosta не срабатывает.
  2. Если что-то меняется в реплицируемой базе на master-хосте без использования явного подключения к ней (например, запросами вида "DELETE FROM replica.test_table;" без предварительной директивы "USE replica;"), то такие изменения не реплицируются. (Теоретически возможно использование конфигурационного параметра вида replicate-wild-do-table=replica.%, однако так оно работать не захотело.)
Из несрабатывающего также стоит отметить директиву для начального переноса данных на slave-хост:
mysql> LOAD DATA FROM MASTER;
На данный момент, судя по всему, альтернативы переносу данных с помощью дампа не существует.

Дополнительные источники информации

пятница, 4 сентября 2009 г.

Parse Error: syntax error, unexpected $end

In PHP 5, the following error may appears as an error entry in Apache error log or simply displays on PHP web page, even if calling to php scripts with php_info() works perfectly and successfully returns information on PHP configurations:

Parse Error: syntax error, unexpected $end in ….. scripts.php on line …

The error may caused by a missing curly bracket in PHP script coding. Beside, it may also caused by error in PHP coding in class definition, as in PHP, a class definition cannot be broke up and distributed into multiple files, or into multiple PHP blocks, unless the break is within a method declaration.

But more commonly, the error is often caused by the use of Short Open tags in PHP,

To use short open tags, it must be enabled in PHP.INI. Search for short_open_tag in PHP.INI, and change the value to On. The line should look line:

short_open_tag = On

воскресенье, 8 февраля 2009 г.

Восстановление пароля root в MySQL

Угораздило забыть пароль root'a на одном из серверов. Решение нашлось достаточно простое:


# /etc/init.d/mysql stop

# mysqld_safe --skip-grant-tables &

Теперь можно заходить как root без пароля:

# mysql -u root

меняем пароль:

UPDATE mysql.user SET Password=PASSWORD("новый пароль") WHERE User='root';
FLUSH PRIVILEGES;

Запускаем сервер в нормальном режиме:

#/etc/init.d/mysql stop
#/etc/init.d/mysql start

Все!