mysql主从复制的简单配置示例

一:介绍

我们利用主从数据库来实现读写分离,从而用从数据库来分担主数据库的读压力,提高数据库的并发访问;主数据库只负责写操作,从数据库负责读操作;从而就会涉及到主数据库上的数据变动需要同步到从数据库上。

二:示意图

1、主从复制的过程介绍

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

在Mysql-A的数据库事件(例如修改数据库的sql操作语句),都会存储到日志系统A中,然后Mysql-B会通过网络获取日志系统A中的日志。Mysql-B获取到日志后,写入本地日志系统B,然后一条条的将数据库事件在数据库Mysql-B中完成,从而完成主从复制。

日志系统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很可能就跟不上了。

2、主从复制的详细过程

(1)Master开启bin-log功能,binlog日志文件用于记录数据库的增删改操作。

(2)需要开启三个线程,Master:I/O线程;Slave:I/O线程,SQL线程。

(3)Slave start;通过I/O线程连接Master,并且请求某个bin-log文件中的position之后的内容。

(4)Master服务器收到Slave I/O线程发过来的日志请求信息,然后Master I/O线程将bin-log内容、position返回给Slave IO线程。

(5)Slave服务器收到bin-log日志内容,将bin-log日志内容写入到relay-log中继日志,创建一个master.info文件,该文件记录master IP、用户名、密码、master bin-log名称、bin-log position。

(6)Slave已经开启了sql线程,由sql线程实时监测relay-log日志内容是否有更新,如果有更新,则解析文件中的sql语句,并在Slave数据库中执行相同的操作语句。

注:可以通过show slave status \G  来查看具体的中继日志路径以及连接的master的其他信息。

三:主从复制的配置过程

在两台centos7虚拟机上安装mysql,主服务器ip:192.168.216.134,从服务器ip:192.168.216.135,并分别创建test数据库。

1:主(master)服务器的配置

(1)、修改配置文件my.cnf

[mysqld]
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小写不明感,敏感为
lower_case_table_names=1

server-id=134  //服务器唯一id,可以用ip的最后一个ip段来标识,不重复即可
log_bin=master-bin //启动bin log二进制日志,存放数据同步语句;开启这个配置的数据库即为master
binlog_do_db=test   //指定需要记录二进制日志的数据库,即需要同步的数据库名

(2)、创建用于从(slave)机器从主(master)机器上获取bin log文件的账号

wangbo 和 wangbo123是从数据库连接主数据库时的用户名和密码

192.168.%.%是允许连接该主服务器的从数据库的ip

(3)、重启mysql服务

(4)、查看主服务器状态

File栏的master-bin.000001即为bin log二进制文件名称,Position栏的154即为position;从服务器连接主服务器时需要用到上步骤中创建的用户名、密码和此步骤中的这两个参数。

2:从(slave)服务器的配置

(1)、修改配置文件my.cnf

[mysqld]
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小写不明感,敏感为
lower_case_table_names=1
 
server-id=135    //服务器唯一id,可以使用ip最后一个段,只要不重复即可
relay-log=slave-relay-bin    //启动relay log中继日志,开启此配置的服务器即为slave

(2)、重启服务器

(3)、连接主服务器

master_host即为主服务器的ip,master_port主服务器port,master_user主服务器创建的账号,master_password主服务器创建的密码,master_log_file主服务器的binlog日志文件名,master_log_pos主服务器binlog日志文件中的position。

(4)、启动slave数据同步

start slave后从服务器便开启I/O线程,去主服务器中获取bin log日志中position后的日志内容;获取到的日志存放到从服务器的relay log中,以便从服务器的SQL线程执行日志中的语句,进行数据的同步。

(5)、查看从服务器状态

从第一行中的Slave_Io_State:Waiting for master to send event可以看到slave的io线程在等待着master中有数据库数据更新事件。

红框里的两个yes,分别表示slave的I/O线程和slave的SQL线程都正在运行,则说明主从模式配置成功,下面就可以操作主服务器的数据库,并查看从服务器中的同名数据库的变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值