Linux环境下实现Mariadb数据库服务器主从复制

一、一主一从

image.png

用两台设备实现,现都是数据库初始状态,开始设置一主一从

1、配置主节点

(1)修改配置文件启用,必要设置:log_bin和server_id=1,设置好后重启

image.png

此时二进制日志pos点是

image.png

(2)建立有复制权限的用户账号

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.239.%' IDENTIFIED BY 'admini';

image.png

(3)添加一个数据库,再看二进制日志的pos点

image.png

(4)关闭防火墙

2、配置从节点

(1)必要设置:server_id=2,如果只做从服务器配置不用写log_bin

image.png

(2)重启服务,并关闭防火墙

(3)在从节点上启动复制线程

输入一段代码,这段只要记住会运用help change命令就行

第一次输入后

image.png

再次输入help CHANGE MASTER TO,可以看到

image.png

将这段进行复制修改

CHANGE MASTER TO

  MASTER_HOST='192.168.239.70',

  MASTER_USER='repluser',

  MASTER_PASSWORD='admini',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='c7ts-bin.000001',

  MASTER_LOG_POS=327;          

image.png

(3)完成后start slave,可以用show slave status\G查看状态

image.png

3、测试

image.png


二、级联复制

image.png

如果级联复制服务器数据库内容同步差很多,建议主服务器备份后,以还原方法给从服务器还原

主服务器操作:

mysqldump -A -F --single-transaction --master-data=1 | gzip > db.sql.gz

show master logs

mysqlbinlog BINLOG --start-position=POSNUM > incr.sql

scp db.sq.gz IP:/DIR

scp incr.sql IP:/DIR

(此时为了数据同步可以考虑加读锁,直到还原完成)

从服务器操作

gzip -d db.sq.gz

mysql

set sql_log_bin=off

source db.sql

source incr.sql

set sql_log_bin=on

从服务器数据还原完成,解除主服务器读锁

1、主服务器配置

不变,和上个实验一样

image.png

看下自己的二进制日志,show master logs

image.png

创建复制用户账号,grant replication slave on *.* to 'repluser'@'192.168.239.%' identified by 'admini'

image.png

关闭防火墙

2、配置中间的从服务器,级联关键服务器配置

image.png

关闭防火墙,然后进入数据库后和主服务器建立主从连接,输入指令help change master to

image.png

复制修改

CHANGE MASTER TO

  MASTER_HOST='192.168.239.70',

  MASTER_USER='repluser',

  MASTER_PASSWORD='admini',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='c7ts-bin.000001',

  MASTER_LOG_POS=460;

3、show slave status\G检查输入信息是否正确

image.png

如果正常,start slave开始连接,连接之后show slave status\G

image.png

测试,主服务器加载了个数据库,从服务器也看到了

image.png

此时查看二进制日志文件

image.png

4、配置末尾的从服务器

这里也是如果数据相差太多,还是建议用还原方法和前面的服务器同步

image.png

关闭防火墙重启数据库服务,进入数据库

CHANGE MASTER TO

  MASTER_HOST='192.168.239.71',         

  MASTER_USER='repluser',

  MASTER_PASSWORD='admini',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='centos7-1-bin.000001',

  MASTER_LOG_POS=9083;

image.png

5、老规矩,确认从服务器连接信息

image.png

确认后start slave;再次查看slave状态

image.png

6、测试,成功

image.png


三、半同步复制

半同步复制实现:一主多从,如果至少一个从服务器同步成功,主服务器将会向客户端返回成功信息;或者所有从服务器长时间没有同步,超过了限定时长,主服务器也将会向客户端返回成功信息

1、搭建主从服务器:

主:

image.png

从:

image.png

之后重启,进行主从配置

主服务器建立复制账号,grant replication slave on *.* to 'repluser'@'192.168.239.%' identified by 'admini'

image.png

从服务器配置

CHANGE MASTER TO

  MASTER_HOST='192.168.239.200',

  MASTER_USER='repluser',

  MASTER_PASSWORD='admini',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='master-bin.000001',

  MASTER_LOG_POS=533;

测通后进入下一步

2、进一步配置

主服务器,进入mysql,show plugins检查是否有semisync_master.so插件,没有话安装

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

SET GLOBAL rpl_semi_sync_master_enabled=1;,写入文件时永久保存

SHOW GLOBAL VARIABLES LIKE '%semi%';

SHOW GLOBAL STATUS LIKE '%semi%';

image.png

从服务器,配置

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

SET GLOBAL rpl_semi_sync_slave_enabled=1;

输入后还需要stop slave; start slave;

image.png

3、验证半同步

验证方法:主服务器执行指令前或者执行时,半同步服务器down掉,等主服务器返回后再上线半同步服务器,看数据是否写入半同步

image.png

此时发现10秒返回了成功信息(这10秒的设置可以自己设置为3秒),此时再上线从服务器看数据是否同步

image.png

成功

4、此时我们加入复制过滤,因为复制过滤时不建议在主服务器添加选项,因此我们在从服务器上开始设置

我们实验有两台从服务器,此时从服务器一台设置数据库黑名单,一台设置表黑名单

image.png

现在开始测试过滤,注意use切换到库中执行命令

主服务器输入语句

image.png

测试结果

image.png


后期如果有时间,将会补上SSL实验和Cluster实验

猜你喜欢

转载自blog.51cto.com/13873498/2307874
今日推荐