Mysql主从复制原理与配置教程

一、什么是主从复制?

主从复制的原理 : 简而言之,MySQL-A在进行写操作时,都会更新数据库A的二进制sql日志,通过网络传输将二进制sql日志传递给数据库B,B再将二进制sql日志写入B数据库,完成主从复制。

 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。

 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。

 MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。

 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。

 在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。

 日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log【注意     MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】

 日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log

 可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。

【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】

主从复制解决的问题:

①数据如何不被丢失

②备份

③读写分离

④数据库负载均衡

⑤高可用

关于Mysql主从复制的配置,主从复制是Mysql自带的功能,跟MyCat没有关系!!!

 

 

二、主从复制的配置

在配置之前需要准备:

我们这里配置一主一备,需要两台Linux服务器

①服务器准备:

10.211.55.10  主服务器 master

10.37.129.6  从服务器slave

②启动mysql

service mysqld start

③关闭防火墙,CentOS6和CentOS7有所不同

CentOS6:service iptables stop

CentOS7 :   firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

准备工作完成,开始配置

①在/etc/my.conf配置主节点信息(server_id)

②设置从服务器读取账号的权限

③同步

修改主(master)服务器

vi /etc/my.cnf  新增以下内容,放在最后,以免报错!我之前就掉进这个坑。

server_id=10  ###服务器id,推荐使用ip最后数字

log-bin=mysql-bin   ###开启日志文件

重启服务器

service mysqld start

service iptables stop

在Navicat进行查看server_id是否修改成功

SHOW VARIABLES LIKE 'server_id';

正常返回你配置的server_id号,若id号为0则没有配置成功

查询主服务器状态

show master status;

返回 :Position为行号,File 一会需要同步的文件

File                                                       Position

mysql-bin.000002                                 313

下面开始配置从服务器

server_id=6

log-bin=mysql-bin

binlog_do_db=test

主服务器给从服务器账号授权(切换到主服务器操作命令)

GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by 'test123';

切换到备服务器,同步

注意书写的ip为主服务器ip,表示与之同步的服务器  

master_user和master_password需和上面授权的保持一致

master_log_file='mysql-bin.000002',master_log_pos=313需要和主服务器show master status;查询结果一致

先关闭同步后执行,执行后同步

stop slave;

change master to master_host='10.211.55.10',master_user='slave',master_password='test123',
         master_log_file='mysql-bin.000002',master_log_pos=313;

start slave;

检查从服务器复制功能状态(备中运行)

SHOW SLAVE STATUS;

若Slave_IO_Running    Slave_SQL_Running是Yes 则成功

猜你喜欢

转载自blog.csdn.net/itcats_cn/article/details/82155651
今日推荐