2017-07-20 33 views
6

Yerel makinemde this tutorial kullanarak Master Slave Replication'ı kurmaya çalışıyorum.Hata: Sunucuda Binlogging, bir makinede Ana Bağımlı çoğaltma ayarlandığında etkin değil

Ben sonuna yaklaştım ama --master-data=2 ben karşılaşanlar log_bin = /var/log/mysql/mysql-bin.log yaptım hangi my.cnf eklemek söylediler bir hatayı

mysqldump: Error: Binlogging on server not active 

Tüm çözümler elde kullanılarak mysqldump çalıştırmayı denediğinizde ve sorunu çözmek için görünmüyor.

Bu benim my.cnf dosyasıdır:

[client] 
port   = 3306 
socket   = /var/run/mysqld/mysqld.sock 

[mysqld_safe] 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 
nice   = 0 

[mysqld_multi] 
mysqld  = /usr/bin/mysqld_safe 
mysqladmin = /usr/bin/mysqladmin 
user  = multi_admin 
password = multipass 

[mysqld2] 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld_slave.pid 
socket   = /var/run/mysqld/mysqld_slave.sock 
port   = 3307 
basedir   = /usr 
datadir   = /var/lib/mysql_slave 
tmpdir   = /tmp 
lc-messages-dir = /usr/share/mysql 
explicit_defaults_for_timestamp 
server-id = 2 
relay-log = /var/log/mysql_slave/relay-bin 
relay-log-index = /var/log/mysql_slave/relay-bin.index 
master-info-file = /var/log/mysql_slave/master.info 
relay-log-info-file = /var/log/mysql_slave/relay-log.info 
read_only = 1 

[mysqld1] 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 
port   = 3305 
basedir   = /usr 
datadir   = /var/lib/mysql 
tmpdir   = /tmp 
lc-messages-dir = /usr/share/mysql 
explicit_defaults_for_timestamp 
server-id = 1 
log_bin  = /var/log/mysql/mysql-bin.log 
innodb_flush_log_at_trx_commit = 1 
sync_binlog = 1 
binlog-format = ROW 

# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
bind-address = 0.0.0.0 

log-error  = /var/log/mysql/error.log 

# Disabling symbolic-links is recommended to prevent assorted security risks 
symbolic-links=0 

# * IMPORTANT: Additional settings that can override those from this file! 
# The files must end with '.cnf', otherwise they'll be ignored. 

!includedir /etc/mysql/conf.d/ 
+1

Mysql sunucusunu yeniden başlattınız mı? – Yupik

+0

Evet, birkaç kez –

cevap

1

Sana mysql_multi terk edip Docker çözümü ile gitmek önerebilir. Bu, 'un'un problemin bir parçası olabilmesi için my.cnf dosyalarını ayırmanıza izin verir.

Master ve Slave için önceden kurulmuş bir çift Docker görüntüsü bile olabilir. Galera kümelenmesi için eminim.

M-S'yi yalnızca deneme için tek bir sunucuda kurduğunuzu mu söylüyorsunuz? Üretim için bunu yapmak neredeyse işe yaramaz.

-1

Bunu tek bir mysql görüntüsü ile yapabilirsiniz. Aşağıdaki liman işçisi-oluşturma dosyasını

liman işçisi-compose.yml

version: '2' 
services: 
    mysqlmaster: 
    image: mysql:5.7.15 
    environment: 
     - "MYSQL_ROOT_PASSWORD=root" 
    volumes: 
     - ./data/mysql-master:/var/lib/mysql/ 
     - ./config/mysql-master:/etc/mysql/conf.d/ 
    mysqlslave: 
    image: mysql:5.7 
    environment: 
     - "MYSQL_ROOT_PASSWORD=root" 
    volumes: 
     - ./data/mysql-slave:/var/lib/mysql/ 
     - ./config/mysql-slave:/etc/mysql/conf.d/ 
    mysqlconfigure: 
    image: mysql:5.7.15 
    environment: 
     - "MYSQL_SLAVE_PASSWORD=root" 
     - "MYSQL_MASTER_PASSWORD=root" 
     - "MYSQL_ROOT_PASSWORD=root" 
     - "MYSQL_REPLICATION_USER=repl" 
     - "MYSQL_REPLICATION_PASSWORD=repl" 
    volumes: 
     - ./mysql_connector.sh:/tmp/mysql_connector.sh 
    command: /bin/bash -x /tmp/mysql_connector.sh 

mysql_connector.sh kullanın

#!/bin/bash 
BASE_PATH=$(dirname $0) 

echo "Waiting for mysql to get up" 
# Give 60 seconds for master and slave to come up 
sleep 60 

echo "Create MySQL Servers (master/slave repl)" 
echo "-----------------" 


echo "* Create replication user" 

mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e 'STOP SLAVE;'; 
mysql --host mysqlslave -uroot -p$MYSQL_MASTER_PASSWORD -AN -e 'RESET SLAVE ALL;'; 

mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e "CREATE USER '$MYSQL_REPLICATION_USER'@'%';" 
mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD';" 
mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e 'flush privileges;' 


echo "* Set MySQL01 as master on MySQL02" 

MYSQL01_Position=$(eval "mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -e 'show master status \G' | grep Position | sed -n -e 's/^.*: //p'") 
MYSQL01_File=$(eval "mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -e 'show master status \G'  | grep File  | sed -n -e 's/^.*: //p'") 
MASTER_IP=$(eval "getent hosts mysqlmaster|awk '{print \$1}'") 
echo $MASTER_IP 
mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e "CHANGE MASTER TO master_host='mysqlmaster', master_port=3306, \ 
     master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD', master_log_file='$MYSQL01_File', \ 
     master_log_pos=$MYSQL01_Position;" 

echo "* Set MySQL02 as master on MySQL01" 

MYSQL02_Position=$(eval "mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -e 'show master status \G' | grep Position | sed -n -e 's/^.*: //p'") 
MYSQL02_File=$(eval "mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -e 'show master status \G'  | grep File  | sed -n -e 's/^.*: //p'") 

SLAVE_IP=$(eval "getent hosts mysqlslave|awk '{print \$1}'") 
echo $SLAVE_IP 
mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e "CHANGE MASTER TO master_host='mysqlslave', master_port=3306, \ 
     master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD', master_log_file='$MYSQL02_File', \ 
     master_log_pos=$MYSQL02_Position;" 

echo "* Start Slave on both Servers" 
mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e "start slave;" 

echo "Increase the max_connections to 2000" 
mysql --host mysqlmaster -uroot -p$MYSQL_MASTER_PASSWORD -AN -e 'set GLOBAL max_connections=2000'; 
mysql --host mysqlslave -uroot -p$MYSQL_SLAVE_PASSWORD -AN -e 'set GLOBAL max_connections=2000'; 

mysql --host mysqlslave -uroot -p$MYSQL_MASTER_PASSWORD -e "show slave status \G" 

echo "MySQL servers created!" 
echo "--------------------" 
echo 
echo Variables available fo you :- 
echo 
echo MYSQL01_IP  : mysqlmaster 
echo MYSQL02_IP  : mysqlslave 

Sen benim git repo yukarıdaki kodunu alabilirsiniz https://github.com/tarunlalwani/docker-compose-mysql-master-slave

Not:adresindeki makalemden alınan içerik 10