配置Mariadb主从同步

首先要了解主从同步的架构,以及涉及的二进制日志binlog

作为准备工作,需要先在Master数据库上启用binlog日志,当然生产环境一般都会启动,因为这是基本要素。
配置Mariadb主从同步_第1张图片
上图中的Binlog二进制日志,记录了导致数据改变或潜在导致数据改变的SQL语句,记录已提交的日志。不依赖于存储引擎类型

  • 功能:通过“重放”日志文件中的事件来生成数据副本
  • 注意:建议二进制日志和数据文件分开存放

另一个是中继日志:relay log, 主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取的事件

下面就开始配置主从同步,使用两个虚拟机,分别全新安装 Mariadb

第一步:在主服务器启用二进制日志,并分开存储

[root@localhost home]# mkdir -p /data/logbin
[root@localhost /]# chown mysql:mysql /data

第二步:修改 /etc/my.cnf 开启binlog,并针对主从复制场景为主服务器设置一个全局惟一的ID号,

server-id=1
log-bin=/data/logbin/mysql-bin
datadir=/var/lib/mysql
[root@localhost /]# Systemctl start mariadb

【问题】
开启bin-log时,因为本身bin-log保存的位置存储太小,并且归类性也不好,自己新创建了/data/binlog来保存二进制日志
在/etc/my.cnf增加了bin-log的位置后,需要重启mariadb
但是重启后,却出现了如下的报错:

配置Mariadb主从同步_第2张图片在这里插入图片描述

【解决方式一】
将需要存储二进制日志的目录加上权限:chown -R mysql:mysql /data

【解决方式二】
我设置了权限后重启mariadb还是出现了一样的报错,然后发现selinux是对deamon进程有操作权限的限制的,然而我的selinux的状态还是enforcing的状态…
将/etc/selinux/config文件里的SELINUX栏位改成了disabled 并reboot永久生效。

所有MySQL服务器都做上述配置,检查一下

第三步:在主服务器上创建有复制权限的用户账号

MariaDB [(none)]> grant replication slave on . to ‘repluser’@‘192.168.97.%’ identified by ‘centos’;
MariaDB [hellodb]> show master logs;
±-----------------±----------+
| Log_name | File_size |
±-----------------±----------+
| mysql-bin.000001 | 264 |
| mysql-bin.000002 | 445 |
| mysql-bin.000003 | 264 |
| mysql-bin.000004 | 375 |
| mysql-bin.000005 | 245 |
±-----------------±----------+
5 rows in set (0.00 sec)

查询当前logs记录位置,也就是之后的主从复制直接从这个位置同步。Mysql-bin.00005 位置 245

第四步:修改从服务器/etc/my.cnf 增加server-id=2 并重启maraidb
增加read_only=ON /*设置数据库只读, 当然这个不会对数据库的root权限限制 */
从服务器在这个场景不必须开启binlog

systemctl start mariadb
MariaDB [(none)]> show slave status;

配置Mariadb主从同步_第3张图片
第五步:在从服务器上,使用有复制权限的用户账号连接至主服务器,并启动复制线程
执行命令

MariaDB [(none)]>CHANGE MASTER TO
  MASTER_HOST='192.168.97.144',
  MASTER_USER='repluser',
  MASTER_PASSWORD='centos',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000005',
  MASTER_LOG_POS=245,
  MASTER_CONNECT_RETRY=10;

第六步:在主服务器执行数据插入脚本,造数据

[root@localhost home]# mysql < hellodb_innodb.sql

同时在从服务器检查复制状态

MariaDB [(none)]> start slave;

配置Mariadb主从同步_第4张图片

可以看到从数据库的数据得到了对齐: hellodb数据库也已经由主服务器复制到了从服务器。

配置Mariadb主从同步_第5张图片
之后,可以看到,每当主数据库有了增量数据,从数据库也会得到同步。
主服务器:插入记录、删除表
配置Mariadb主从同步_第6张图片
配置Mariadb主从同步_第7张图片

你可能感兴趣的:(MySQL)