Установка MySQL сервера
Устанавливаем MySQL сервер и клиент
# aptitude install mysql-server mysql-client
Далее я убираю удаленный вход в базу под root, тестовую базу и тестового пользователя. Для автоматизации этих действий существует скрипт
mysql_secure_installation
, входящий в дистрибутив MySQL сервера.# mysql_secure_installation
Чтобы каждый раз не вводить пароль при подключении к базе я создаю конфиг для консольного клиента
# touch /root/.my.cnf # chown root:root /root/.my.cnf # chmod 0600 /root/.my.cnf # cat > /root/.my.cnf <<EOF [client] host=localhost user=root password=your-root-password EOF
Настройка MySQL master ноды
В Debian-based дистрибутивах есть возможность создать локальный конфиг mysql не изменяя
/etc/mysql/my.cnf
(чтобы не было конфликта при обновлении пакета). Я пользуюсь этой возможностью# cat > /etc/mysql/conf.d/master.cnf <<EOF [mysqld] server-id = 500 log-bin = mysql-bin log-bin-index = mysql-bin.index max_binlog_size = 512M expire_logs_days = 30 bind-address = 0.0.0.0 EOF # invoke-rc.d mysql restart
При настройке master ноды нужно уделить внимание выбору значения
server-id
(оно должно быть уникальным в пределах группы серверов, вовлеченных в репликацию). Опции max_binlog_size
и expire_logs_days
управляют ротацией бинарного лога.Далее нужно создать пользователя который будет использоваться slave нодами для репликации.
mysql> CREATE USER 'slave-user'@'slave-host' IDENTIFIED BY 'slave-password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave-user'@'slave-host'; mysql> FLUSH PRIVILEGES;
Далее нужно подготовить слепок баз данных, которые мы будем реплицировать
mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 3211 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
Сейчас нужно записать имя файла бинарного лога (mysql-bin.000004) и позицию в этом логе (3211). Далее в этой же сессии выполнить
mysql> \!mysqldump --add-drop-database --all-databases > /tmp/all-db.sql mysql> UNLOCK TABLES;
Файл /tmp/all-db.sql нужно передать на slave ноду.
Настройка MySQL slave ноды
Для работы MySQL сервера в качестве slave ноды нужно внести пару изменений в его дефолтный конфиг.
# cat > /etc/mysql/conf.d/slave.cnf <<EOF [mysqld] server-id = 510 relay-log = relay-bin relay-log-index = relay-bin.index EOF # invoke-rc.d mysql restart
Далее нужно импортировать файл /tmp/all-db.sql, который был создан на master ноде
# mysql < /tmp/all-db.sql # mysqladmin flush-privileges
Затем нужно подключить slave ноду к master серверу и запустить репликацию.
mysql> CHANGE MASTER TO master_host='master-host', master_user='slave-user', master_password='slave-password', master_log_file='mysql-bin.000004', master_log_pos=3211; mysql> START SLAVE;
Посмотреть статус репликации можно командой SHOW SLAVE STATUS\G. Если все работает правильно, то в полях
Slave_IO_Running
и Slave_IO_Running
должно быть значение Yes
.
Актуальна ли данная инструкция на текущий момент?
ОтветитьУдалитьСкорее всего потребует адаптации. Писалось для mysql-server 5.1.x/5.5.x.
Удалить