MariaDB / MySQL 单主多从奇怪行为

MariaDB / MySQL 单主多从奇怪行为

我正在尝试设置从单个主服务器到多个从服务器的复制。我遵循了传统的步骤...

在 Master 上:

更新了my.cnf文件:

log-bin         = /var/log/mysql/master-bin
log-bin-index   = /var/log/mysql/master-bin.index
binlog_format   = mixed
server-id       = 01
replicate-do-db = database_name

使用以下命令为每个从属创建一个用户:

create user 'replicant'@'%' identified by 'replicant_password';
grant replication slave on *.* to replicant;
flush privileges;

在从属服务器上我做了以下操作:

更新 my.cnf 内容如下:

server-id       = 02 [and 03,04 for the other slaves]
relay-log-index = /var/log/mysql/slave-relay-bin.index
relay-log       = /var/log/mysql/slave-relay-bin
replicate-do-db = database_name
sudo systemctl restart mariadb

我锁定了主服务器上的表。我运行了 show master status 来获取日志文件和位置。我将数据库转储到 .sql 文件中,将其传输到从服务器并导入。这就是我遇到问题的地方...

在第一个从属服务器上,我能够运行以下命令,启动从属服务器,并且复制工作完美。

MariaDB [(none)]> change master 'master01' to
    -> master_host='master_IP_address',
    -> master_user='replicant',
    -> master_password='replicant_password',
    -> master_port=3306,
    -> master_log_file='master-bin.000001',
    -> master_log_pos=62307428,
    -> master_connect_retry=10,
    -> master_use_gtid=slave_pos;

但是,当我在第二台和第三台从服务器上执行相同的步骤时,我收到各种错误,表明它无法插入表、行等,因为数据已经存在。这几乎就像它忽略了主服务器的日志位置并试图再次覆盖所有内容。我尝试重置从服务器,并多次运行该过程。

唯一有效的方法是从从属服务器 2 和 3 中完全删除数据库,然后启动从属服务而不导入数据库。此时,数据库已创建并追上所有事务。这是正常行为吗?我只是想确保我没有遗漏任何东西。

我正在运行带有 Maria DB 10.4.7 的 Ubuntu 18.04.3 LTS。

答案1

对于后续的Slave,克隆一个现有的从属Slave:

  • SLAVE STOP
  • 复制所有与 MySQL/MariaDB 相关的文件。
  • 进行一处更改: server_id
  • SLAVE START在两个从属设备上。

使用此作为添加新从站(或替换死站)的程序。

相关内容