mysql主从复制------Master-Slave搭建及注意事项

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GX_1_11_real/article/details/81085326

前言


关于mysql主从复制的原理其实是很通俗易懂的,但是,在实际的搭建这个结构的时候,还是会遇到不同的情况的。于是下面介绍的是搭建Master-Slave的操作及注意事项。

(请先观看注意事项,可降低失败几率)



注意事项



网络问题


要注意mysql主库和从库所在服务器间的网络问题,因为是要做数据库的主从,主从之间的网络是要能联通的,及从库可通过网络访问到主库,否则无法同步数据。

如果,mysql主从使用的是云服务器,注意去该云服务的管理平台,开放相应数据库的安全组(如:阿里云,青云,腾讯云等)



mysql的版本问题


主从的数据是要进行同步的,如果数据库的版本或者安装的方式不同,会影响数据的同步,产生无法同步或字符集报错的情况。

主库和从库的服务器,安装mysql数据库时,要选择相同的版本,并且安装方式最好相同。



配置文件问题


mysql或mariadb的关键的配置文件是my.cnf,默认位置为/etc/my.cnf(由于安装方式的不同,此配置文件,并不一定在此)

做主从时,注意要在启动数据库前,修改配置文件my.cnf后,再启动数据库服务

注意主从配置时,必须要在my.cnf中添加server-id,主的server-id的数值要小于从的server-id,每一个server-id都必须是唯一的

注意主从配置时,必须要在my.cnf中添加log-bin,开启二进制文件



授权问题


数据库的同步是要通过主库专门创建的一个用户来使从库进行数据的同步的,因此要注意授权的问题

注意主库授权时的ip,用户,密码
grant replication slave on . to ‘用户’@’从库的IP’ identified by ‘密码’

注意从库连接主库的各项参数
change master to master_host = ‘主库的IP’, master_user = ‘设置主从时设定的主库的用户’, master_port=主库的端口, master_password=’主库设定的密码’, master_log_file = ‘主库状态的File’, master_log_pos=主库状态的Position;


数据差别问题


我们在做新的mysql主从的时候,由于主库并没有产生较多的数据,从库很容易就进行同步,报错也几乎不会产生

但是,当我们的主库的数据已经有很多了或者是把一个用了很久的数据库来做主从,这时就需要先将主库的数据备份导入从库中,再进行从库的连接到主库的步骤。否则,就会从库就会因数据差别较大,产生各种报错



Master-Slave搭建操作



【1】准备mysql数据库


在要做数据库主从的服务器上安装统一版本的数据库。(mysql或mariadb皆可)

本篇直接使用yum安装的5.5.56-MariaDB

实际应用可选择编译安装


yum -y install mariadb*



【2】修改配置文件


由于是用yum安装,my.cnf的配置文件,默认位置为/etc/my.cnf

编译安装,要根据自己的编译位置及参数,查找my.cnf

本文演示的是最基础的主从配置,可加入其他内容优化配置

从库的server-id的数值不同于主库的server-id,且其数值都是唯一的
(一般的默认写法是从库的server-id的数值大于主库的server-id的数值或以数据库所在服务器的ip的最后一位十进制作为server-id)

主库与从库的log-bin后添加的名称为bin.log文件名,可写任意名称;主库与从库的此名称可不同,但是一般人们都会写成相同的,要根据习惯或工作要求


<1>mysql的主库配置

在my.cnf中添加
server-id
log-bin

这里写图片描述



<2>mysql的从库配置

在my.cnf中添加
server-id
log-bin

这里写图片描述



【3】启动数据库


改完配置文件后,重启主库和从库

采用不同的安装方法或不同版本的Linux系统,启动或重启的方法不同


systemctl start mariadb(centos7)
/etc/init.d/mariadb start(centos6)



【4】主从数据库授权及启用


<1>主库授权

进入数据库(由于未设密码,可直接进入)
mysql


创建用于同步的用户账号及密码
grant replication slave on . to ‘repl’@’从库的IP’ identified by ‘密码’

这里写图片描述


重新加载权限表; 更新权限(此处可省略)

这里写图片描述


查看master的状态

这里写图片描述

出现内容,不为空,证明主库成功
重点关注:
File 与 Position



<2>从库开启slave


进入数据库(由于未设密码,可直接进入)
mysql


停止slave服务
stop slave;


连接主库
change master to master_host = ‘主库的IP’, master_user = ‘设置主从时设定的主库的用户’, master_port=主库的端口, master_password=’主库设定的密码’, master_log_file = ‘mysql-bin.000001’, master_log_pos=107886;

注意:
master_log_file与master_log_pos 是主库show master status信息里的| File与Position
填入的各种信息要100%的正确


开启slave服务
start slave;


这里写图片描述



<3>查看从库状态

show slave status \G;

这里写图片描述

注意:如下即为成功,如其中任意一个不为Yes即为失败。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes



添加任意多个从库的操作流程(一主多从)



具体操作请参考上文,如出现数据不同步问题,请参考下列链接:
https://blog.csdn.net/gx_1_11_real/article/details/80658527


  • 新增从库的版本要与主库的版本相同

  • 更改新从库的my.cnf的配置(每个server-id都是唯一的)

  • 启动从库

  • 主库创建用于同步的用户账号及密码

grant replication slave on . to ‘repl’@’从库的IP’ identified by ‘密码’;


  • 先进入主库,进行锁表,此处锁定为只读状态,防止数据写入 (可选,因如有数据库备份,可直接利用备份)

flush tables with read lock;

mysqldump -uroot -p‘….’ -hlocalhost > mysql.back.sql

rsync -aP mysql.back.sql 从库IP:/root/ (位置任意)


  • 从库导入数据

mysql -uroot -p… -f < mysql.back.sql


  • 主库解锁

    unlock tables;


  • 从库停止slave服务,连接主库

    stop slave;

change master to master_host = ‘主库的IP’, master_user = ‘设置主从时设定的主库的用户’, master_port=主库的端口, master_password=’主库设定的密码’, master_log_file = ‘主库状态的File’, master_log_pos=主库状态的Position;


  • 开启从库

start slave;


  • 查看从库状态

show slave status \G;

注意:如下即为成功,如其中任意一个不为Yes即为失败。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes



猜你喜欢

转载自blog.csdn.net/GX_1_11_real/article/details/81085326