前言
关于mysql主从复制的原理实际上是很通俗易懂的,可是,在实际的搭建这个结构的时候,仍是会遇到不一样的状况的。因而下面介绍的是搭建Master-Slave的操做及注意事项,本文不含数据库的调优参数。mysql
(请先观看注意事项,可下降失败概率)web
注意事项
网络问题
要注意mysql主库和从库所在服务器间的网络问题,由于是要作数据库的主从,主从之间的网络是要能联通的,及从库可经过网络访问到主库,不然没法同步数据。sql
若是,mysql主从使用的是云服务器,注意去该云服务的管理平台,开放相应数据库的安全组(如:阿里云,青云,腾讯云等)数据库
mysql的版本问题
主从的数据是要进行同步的,若是数据库的版本或者安装的方式不一样,会影响数据的同步,产生没法同步或字符集报错的状况。centos
主库和从库的服务器,安装mysql数据库时,要选择相同的版本,而且安装方式最好相同。安全
配置文件问题
mysql或mariadb的关键的配置文件是my.cnf,默认位置为/etc/my.cnf(因为安装方式的不一样,此配置文件,并不必定在此)服务器
作主从时,注意要在启动数据库前,修改配置文件my.cnf后,再启动数据库服务网络
注意主从配置时,必需要在my.cnf中添加server-id,主的server-id的数值要小于从的server-id,每个server-id都必须是惟一的ide
注意主从配置时,必需要在my.cnf中添加log-bin,开启二进制文件svg
数据库如配置有调优参数,应使主从的配置文件中参数数值相同,避免因参数不一样致使的失败。
受权问题
数据库的同步是要经过主库专门建立的一个用户来使从库进行数据的同步的,所以要注意受权的问题
注意主库受权时的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
添加任意多个从库的操做流程(一主多从)
新增从库的版本要与主库的版本相同
更改新从库的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