关于mysql主从复制的原理其实是很通俗易懂的,但是,在实际的搭建这个结构的时候,还是会遇到不同的情况的。于是下面介绍的是搭建Master-Slave的操作及注意事项,本文不含数据库的调优参数。
(请先观看注意事项,可降低失败几率)
要注意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主从的时候,由于主库并没有产生较多的数据,从库很容易就进行同步,报错也几乎不会产生
但是,当我们的主库的数据已经有很多了或者是把一个用了很久的数据库来做主从,这时就需要先将主库的数据备份导入从库中,再进行从库的连接到主库的步骤。否则,就会从库就会因数据差别较大,产生各种报错
在要做数据库主从的服务器上安装统一版本的数据库。(mysql或mariadb皆可)
本篇直接使用yum安装的5.5.56-MariaDB
实际应用可选择编译安装
yum -y install mariadb*
由于是用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
改完配置文件后,重启主库和从库
采用不同的安装方法或不同版本的Linux系统,启动或重启的方法不同
systemctl start mariadb(centos7)
/etc/init.d/mariadb start(centos6)
<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
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;
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