2017-07-20 21 views
6

Tôi đang cố gắng thiết lập Nhân rộng bản sao trên máy cục bộ của mình bằng cách sử dụng this tutorial.Lỗi: Lỗi trên máy chủ không hoạt động khi thiết lập nhân rộng Master Slave trên một máy

Tôi gần cuối cùng nhưng khi tôi cố gắng chạy mysqldump sử dụng --master-data=2 tôi nhận được một lỗi

mysqldump: Error: Binlogging on server not active 

Tất cả các giải pháp tôi đã đi qua đã cho biết thêm log_bin = /var/log/mysql/mysql-bin.log-my.cnf mà tôi đã thực hiện và nó dường như không giải quyết được vấn đề.

Đây là my.cnf tập tin của tôi:

[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

Bạn đã khởi động lại máy chủ mysql chưa? – Yupik

+0

Có, nhiều lần –

Trả lời

1

Tôi có thể đề nghị bạn nên từ bỏ mysql_multi và đi với các giải pháp Docker. Điều này cho phép bạn có các tệp my.cnf riêng biệt, trong đó có thể là một phần của sự cố.

Thậm chí có thể có một cặp hình ảnh Docker đã được thiết lập cho Master và Slave. Tôi khá chắc chắn có cho Galera clustering.

Tôi đoán bạn đang thiết lập M-S trên một máy chủ duy nhất chỉ để thử nghiệm? Làm như vậy cho Sản xuất hầu như vô dụng.

-1

Bạn có thể làm điều này với một hình ảnh mysql duy nhất. Sử dụng các tập tin Docker-soạn dưới

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

#!/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 

Bạn có thể lấy mã trên từ repo git tôi https://github.com/tarunlalwani/docker-compose-mysql-master-slave

PS: Nội dung được lấy từ bài viết của tôi tại http://tarunlalwani.com/post/mysql-master-slave-using-docker/

Các vấn đề liên quan