CentOS配置MySQL基于日志点的复制Binary Log File Position Based Replication

Setting Up Binary Log File Position Based Replication

下面的配置基于CentOS7.2,MySQL5.7

mysql的安装参考

CentOS7安装最新版的MySQL(5.7)

建立基于日志点的复制
我们看看官方的配置步骤

这里写图片描述

主要有以下步骤

  1. 配置master
  2. 创建复制用户
  3. 获取master上日志坐标
  4. 备份master上的数据
  5. 在slave上使用change master配置复制
  6. 通过slave配置其他slave

其中第3步和第4步可以通过一条语句完成,第6步是将配置好的slave作为其他slave环境(主要步骤是复制配置好的slave的数据目录文件夹,我们通过重复的步骤也可以实现)

1 配置master

To configure a master to use binary log file position based replication, you must enable binary logging and establish a unique server ID.

使用基于日志点的复制来配置master,我们必须开启二进制日志并为master分配一个唯一的server ID。

编辑/etc/my.cnf

sudo vim /etc/my.cnf

在[mysqld]下面添加下面的配置,如果[mysqld]下面没有配置的话,配置了就根据需求修改或跳过

log-bin=mysql-bin
server-id=1

log-bin开启二进制日志并配置了二进制日志的前缀
server-id配置了server的id

然后重启mysql

sudo systemctl restart mysqld.service

2 创建复制用户

CREATE USER '用户名'@'ip地址' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'ip地址';

上面的两条命令主要是创建了复制slave用户

如果出现

ERROR 1396 (HY000): Operation CREATE USER failed for 'xxx'@'xxx'

执行

FLUSH PRIVILEGES

再执行上面的两条命令

3 获取master日志点并导出数据

mysqldump -uroot -p --single-transaction --triggers --routines --flush-logs --master-data --all-databases > /tmp/alldb.sql

上面的mysqldump会导出master上的所有数据到/tem/alldb.sql中,并且记录了master上的日志点(日志文件和日志位置),主要是–master-data的作用,其他参数可以自行搜索。

我们可以看看导出的文件,里面有了MASTER_LOG_FILE和MASTER_LOG_POS,这两个参数在后面会用到,这个也是master上当前show master status看到数据。

这里写图片描述

这里写图片描述

将数据导出后master上的配置已经完成了。

4 配置slave并导入master上的数据

下面的操作在slave上
有可能我们很多时候有各种错误,导致我们也不知道slave的当前状态,所以有必要先停掉,不管slave启动没有

STOP SLAVE;

参照第1步为slave配置一个server-id,注意要唯一,不能和master相同,重启slave。

我们把刚才导出的数据导入slave中

mysql -uroot -p< /tmp/alldb.sql

5 在slave上执行CHANGE MASTER TO

CHANGE MASTER TO 
MASTER_HOST='master的ip', 
MASTER_USER='第2步在master上创建的用户', 
MASTER_PASSWORD='第2步在master上创建的用户的密码', 
MASTER_LOG_FILE='第3步mysqldump出文件记录的MASTER_LOG_FILE', 
MASTER_LOG_POS=第3步mysqldump出文件记录的MASTER_LOG_POS;

执行之后就配置好了CHANGE MASTER TO

然后

START SLAVE;

然后通过

SHOW SLAVE STATUS\G;

查看slave的状态

这里写图片描述

看到Slave_IO_Running和Slave_SQL_Running都是Yes就说名slave启动正常了。
这里我是隔了几天截图的,所以Master_Log_Pos是381877,刚刚执行后Master_Log_File应该是刚才第2步看到的154。

如果出现

ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES)

可能是防火墙的问题

查看防火墙

sudo systemctl status firewalld.service

开启防火墙

sudo systemctl start firewalld.service

添加3306

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent

添加成功后会返回success
重新加载firewall

sudo firewall-cmd --reload

查看3306端口

sudo firewall-cmd --query-port=3306/tcp

查看所有的开放端口

sudo firewall-cmd --zone=public --list-all

防火墙端口开放后

SLAVE STOP;
SLAVE START;

到这master和slave都配置完了,在master更新会同步到slave.

以上步骤是可以重现的,我实验了好几次。

如果需要配置多个slave,重复执行slave的步骤即可。

如果需要slave作为其他slave的master(A->B->C)则需要在slave开启二进制日志(即配置log-bin)外,还要配置log_slave_updates=on,即slave同步master的日志后,再写入自己的log-bin,这样slave的slave才能同步到master更新的数据。

参考文献

https://dev.mysql.com/doc/refman/5.7/en/replication-howto.html

猜你喜欢

转载自blog.csdn.net/frankcheng5143/article/details/77689219
今日推荐