Всем студентам, у которых возникли трудности с настройкой репликации на линухе, в частности 5-го курса нашего политеха, посвящается.
Инструкция по настройке репликации на серверах mysql на линухе с нуля (с установки мускула) разделена на 4 части:
1. Подготовка Mysql к работе
2. Создание БД
3. Настройка репликации
4. Ошибки
В этой же статье будет описана последовательность действий для настройки репликации с минимумом слов, в основном команды для настройки, если что то не понятно - читайте указанные выше статьи.
После установки мускула, необходимо его настроить. Создадим пользователя root и зададим ему пароль, в примере показано также создание пользователя admin:
shell> mysql -u root mysql
mysql>UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';
mysql>FLUSH PRIVILEGES;
mysql>exit
shell>mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
shell>mysql -u root -p
Enter password: *******
mysql>GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'some_password' WITH GRANT OPTION;
Источник
Пример создания базы данных:
mysql> CREATE DATABASE petdb;
mysql> USE petdb
(mysql -h host -u user -p petdb)
mysql> SHOW TABLES;
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
mysql> DESCRIBE pet;
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
mysql> INSERT INTO pet
-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);)
Источник
Конфиг мастера:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
log-bin
# binlog-do-db= можно указать БД которая будет реплицироваться
binlog-ignore-db=mysql #для указания БД которая будет игнорироваться при репликации
binlog-ignore-db=test
server-id=1
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
В ubuntu 9.04 конфиг файл по умолчанию находится и читается при старте демона в /etc/mysql/my.cnf. В нем по умолчанию раскоментирована строчка в разделе:
[mysqld]
...
bind-address = 127.0.0.1
...
Это означает что сервер будет слушать порт 3306 только на локалхосте. Чтоб имели доступ к бд остальные машины в сети нужно эту строчку закоментировать.
Конфиг слейва:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
server-id=2
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Создаем на мастере учетную запись под которой будет коннектиться слейв (master_user=replication; master_password=slave)
mysql> grant replication slave on *.* to 'replication'@slave.IP identified by 'slave';
На мастере:
mysql>SHOW master STATUS;
-запоминаем значение параметров File и Position
На слейве:
mysql>stop slave;
mysql>reset slave;
mysql>\q
/bin/bash>service mysqld restart (не факт, что нормально перезапуститься, возможно потребуется убить и заново запустить)
/bin/bash>mysql -uroot -p
mysql>stop slave;
mysql>CHANGE master TO
----->master_host = 'master_host',
----->master_user = 'user'.
----->master_password = 'password',
----->master_log_file = 'log_file',
----->master_log_pos = log_pos;
mysql>start slave;
mysql>show slave status\G;
-log_file - имя файла из таблички, полученной на местере = File; параметр - в одинарных кавычках
-log_pos - положение в файле, полученное на мастере = Position; параметр - числом, без кавычек
Если при выполнении на мастере команды show master status выдает empty set, то нужно окончательно убить в системе мукул:
#/etc/init.d/mysqld stop
#killall -9 mysqld
#pkill mysqld
#service mysqld status
#service mysqld stop
#service mysqld start
#service mysqld restart
#mysqladmin -uroot -p shutdown
Ошибки встречавшиеся при настройке репликации в ubuntu 9.04.
1) При старте сервера выдает:
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
То нужноe убить демон #killall -9 mysqld и зайти в каталог /var/lib/mysql/ и выполнить такие команды:
#mv ibdata1 ibdata1.bak
#cp -a ibdata1.bak ibdata1
2) При старте пишет что по протоколу TCP/IP порт 3306 уже занят:
InnoDB: Error in opening ./ib_logfile0
091019 20:51:18 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
091019 20:51:18 [ERROR] Do you already have another mysqld server running on port: 3306 ?
091019 20:51:18 [ERROR] Aborting
091019 20:51:18 [Note] mysqld: Shutdown complete
То нужно убить демон #killall -9 mysqld и потом заново его рестартануть.
Опции my.cnf при репликации
Хорошая статья |