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

前端之家收集整理的这篇文章主要介绍了CentOS配置MySQL基于日志点的复制Binary Log File Position Based Replication前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Setting Up Binary Log File Position Based Replication@H_502_1@

下面的配置基于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@H_502_1@

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 创建复制用户@H_502_1@
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日志点并导出数据@H_502_1@
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上的数据@H_502_1@

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

STOP SLAVE;

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

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

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

5 在slave上执行CHANGE MASTER TO@H_502_1@
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

原文链接:https://www.f2er.com/centos/376119.html

猜你在找的CentOS相关文章