在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

接上篇博客:https://blog.csdn.net/SpringCYB/article/details/90202949

mysql主从同步定义:

主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

使用主从同步的好处:

  1. 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
  2. 提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
  3. 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能

注意,mysql是异步复制的,而MySQL Cluster是同步复制的。有很多种主从同步的方法,但核心的方法有两种,Statement Based Replication(SBR)基于SQL语句的复制,另一种是Row Based Replication(RBR)基于行的复制,也可以使用Mixed Based Replication(MBR)。在mysql5.6中,默认使用的是SBR。而mysql 5.6.5和往后的版本是基于global transaction identifiers(GTIDs)来进行事务复制。当使用GTIDs时可以大大简化复制过程,因为GTIDs完全基于事务,只要在主服务器上提交了事务,那么从服务器就一定会执行该事务。

通过设置服务器的系统变量binlog_format来指定要使用的格式:

1.SBR:当使用二进制日志时,主服务器会把SQL语句写入到日志中,然后从服务器会执行该日志,这就是SBR,在mysql5.1.4之前的版本都只能使用这种格式。使用SBR会有如下

长处:

  1. 日志文件更小
  2. 记录了所有的语句,可以用来日后审计

弊端:

  1. 使用如下函数的语句不能被正确地复制:load_file(); uuid(), uuid_short(); user(); found_rows(); sysdate(); get_lock(); is_free_lock(); is_used_lock(); master_pos_wait(); rand(); release_lock(); sleep(); version();
  2. 在日志中出现如下警告信息的不能正确地复制:[Warning] Statement is not safe to log in statement format.
  3. 或者在客户端中出现show warnings
  4. Insert … select语句会执行大量的行级锁表
  5. Update语句会执行大量的行级锁表来扫描整个表

2.RBR:主服务器把表的行变化作为事件写入到二进制日志中,主服务器把代表了行变化的事件复制到从服务中,使用RBR的

长处:

  1. 所有的数据变化都是被复制,这是最安全的复制方式
  2. 更少的行级锁表

弊端:

  1. 日志会很大
  2. 不能通过查看日志来审计执行过的sql语句,不过可以通过使用mysqlbinlog  
  3. --base64-output=decode-rows --verbose来查看数据的 变动

3.MBR:既使用SBR也使用RBR,默认使用SBR

 

主从同步机制

Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。

在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。

每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。

主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)

配置主从同步:

有很多种配置主从同步的方法,可以总结为如下的步骤:

1.在主服务器上,必须开启二进制日志机制和配置一个独立的ID

2.在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号

3.在开始复制进程前,在主服务器上记录二进制文件的位置信息

4.如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)

5.配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置。

 

开始配置:

需要两台虚拟机,一主一从,直接克隆一个就可以。

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

1.通过 vi /etc/my.cnf  命令修改主服务器数据库的主要配置文件:

在第一个模块下加上开启binog

log-bin=命一个名称

添加标识符: server-id=1  声明是唯一的

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

2.重启数据库

通过  systemctl restart mariadb  命令重启数据库:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

3.进入mysql:

通过 mysql -uroot -proot 命令进入你的mysql,上篇博客我已经安装过了,u后面是你的账户名,p后面是你设置的密码

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

4.进入数据库的内部进行授权
通过  grant replication slave on *.* to 'root'@'192.168.1.126' identified by 'root';  命令进行授权:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

出现ok表示成功

名词解释:

grant 授权
replication slave 数据库自带的同步权限
on代表同步哪个库
*.*是所有东西
to 后表示允许谁
‘用户名’@‘从库的IP地址’
identified by ‘密码’

5.进行进行完操作后进行刷新
通过  flush privileges;   命令刷新

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

ok表示成功

6.获取二进制日志的信息
通过  show master status;  命令获取信息:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

打印出日志记录则表示成功,如果没有检查你的配置信息。或者重启服务再试

7.接下来配置从库配置信息

首先安装MariaDB

通过安装命令:yum -y install mariadb mariadb-server  安装

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

8.启动MariaDB

通过命令:systemctl start mariadb  启动

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

9.设置开机启动

通过命令:systemctl enable mariadb  设置为开机启动

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

10.接下来进行MariaDB的相关简单配置

通过命令:mysql_secure_installation  配置

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

首先是设置密码,会提示先输入密码

Enter current password for root (enter for none):<–初次运行直接回车

设置密码:

我设置的账号为root,密码为root,和主库一致的

Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码

其他配置

Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,

Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

11.和配置主库一样通过 vi /etc/my.cnf  命令修改从服务器数据库的主要配置文件:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

12.通过  systemctl restart mariadb  命令重启数据库:

     通过 mysql -uroot -proot 命令进入你的mysql

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

13.配置与主库同步参数,输入如下信息:

输入  use mysql  命令

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

在输入:CHANGE MASTER TO 命令出现如下图所示:

 

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

-> MASTER_HOST='192.168.1.107',

-> MASTER_USER='root',

-> MASTER_PASSWORD='root',

-> MASTER_LOG_FILE='binlog.000002',
 MASTER_LOG_POS=472;

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

14.启动主从同步进程

通过 start slave; 命令启动:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

15.检查状态

通过命令: show slave status \G 

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

如果出现如图的两个yes则表示成功。

16.连接mysql可视化工具测试

开启远程访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

进行进行完操作后进行刷新
flush privileges;

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

连接:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

主从都连接上:

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

主服务里面建一个数据库

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

然后你就发现从库中也有这个库了,这就是主从同步

在Linux系统上搭建MariaDB(Mysql)集群,实现主从同步。

完成!