@netprotection
DevOPS Guru

Что делать если, cбиваеться server_id у слейвов после рестарта Mariadb?

Слейв создаю с мастера так
for SLAVE_HOST in "${SLAVE_HOSTS[@]}"
do
	echo "SLAVE: $SLAVE_HOST"
	echo "  - Create server_id"
	SERVERID=`date '+%s'`
	ssh $SLAVE_HOST "echo server_id=$SERVERID >> /etc/mysql/my.cnf"
	mysql -h $SLAVE_HOST "-P$SPORT" "-u$REPLICA_USER" "-p$REPLICA_PASS" $DB <<-EOSQL &
		SET GLOBAL server_id=$SERVERID;
	EOSQL
	echo "  - Creating database copy"
	mysql -h $SLAVE_HOST "-P$SPORT" "-u$REPLICA_USER" "-p$REPLICA_PASS" -e "DROP DATABASE IF EXISTS $DB; CREATE DATABASE $DB;"
	scp $DUMP_FILE $SLAVE_HOST:$DUMP_FILE >/dev/null
	mysql -h $SLAVE_HOST "-P$SPORT" "-u$REPLICA_USER" "-p$REPLICA_PASS" $DB < $DUMP_FILE

	echo "  - Setting up slave replication"
	mysql -h $SLAVE_HOST "-P$SPORT" "-u$REPLICA_USER" "-p$REPLICA_PASS" $DB <<-EOSQL &
		STOP SLAVE;
		CHANGE MASTER TO MASTER_HOST='0.0.0.0',
		MASTER_PORT=$MPORT,
		MASTER_USER='$REPLICA_USER',
		MASTER_PASSWORD='$REPLICA_PASS',
		MASTER_LOG_FILE='$LOG_FILE',
		MASTER_LOG_POS=$LOG_POS;
		START SLAVE;
	EOSQL
	# Wait for slave to get started and have the correct status
	sleep 2
	# Check if replication status is OK
	SLAVE_OK=$(mysql -h $SLAVE_HOST "-P$SPORT" "-u$REPLICA_USER" "-p$REPLICA_PASS" -e "SHOW SLAVE STATUS\G;" | grep 'Waiting for master')
	if [ -z "$SLAVE_OK" ]; then
		echo "  - Error ! Wrong slave IO state."
	else
		echo "  - Slave IO state OK"
	fi
done

Всё прекрасно залетает в конец my.cnf на слейве пишет запись вроде
server_id=1601962227

Однако при рестарте слейва, ид скидываеться до единицы ломая репликацию и хоть тресни, в конфигах mariadb больше нигде нет serve_id=1.
ОС Debian 10

Помогите пожалуйста
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@netprotection Автор вопроса
DevOPS Guru
В общем решил сам, неработало тк мой файл заканчивался вот так:
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0

[mysqldump]
quick
quote-names
max_allowed_packet = 512M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completion

[isamchk]
key_buffer = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!include /etc/mysql/mariadb.cnf
server_id=1601962227

А нужно чтобы сервер ид был строго в секции
[mysqld]

Те
[mysqld]
Всякий хлам на стопиццот тыщ строк
server_id=1601962227

Тогда всё работает отлично
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vitaly_il1
DevOps Consulting
Посмотрите в логи.
server_id=1 я думаю, по умолчанию, то есть сервер то игнорирует ваш ID.
Вроде бы он не больше максимума, но попробуйте выбрать поменьше на всякий случай https://mariadb.com/docs/reference/mdb/system-vari...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы