Mysql中主从复制的原理、配置过程以及实际案例
Mysql中主从复制的原理、配置过程以及实际案例
1.什么是主从复制?
原理:主从分离,什么意思呢?我们不妨画个图看看。如图1所示:

2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6.7_64位操作系统,并分别在两台服务器上安装mysql。我的IP地址分别为:192.168.1.15/192.168.1.16,这里我定义15为主服务器,16为从服务器。
首先,我们编辑主服务器中mysql配置文件。(因我的mysql使用非root用户安装,因此配置文件放在/home/formal/mysql/目录下,非root用户安装步骤可参考我的CSDN博客:http://blog.csdn.net/xushouwei/article/details/52227975)
在编辑mysql配置文件之前你要考虑,在一个机房里,一主多从,或者是主主复制或者是被动模式的主主复制等多种情况,那么这多台服务器之间相互他们日志复制来binlog,复制来复制去会不会乱了呢?真有可能会乱,那么碰到这样情况你怎么办?因此,我们要给每一台服务器起一个独特的server-id。那么这个id呢,正常情况下做主从服务器都会在同一个局域网内,因同意个局域网内IP前三段都一样,只有最后一段不一样,所以我们一般都是拿ip的末尾一段作为server-id,当然这不是硬性的规定,只是习惯而已。因此我们开始配置my.cnf文件。
添加如下配置:
log-bin=mysql-bin
binlog_format=mixed
server-id=15
如图2所示:

对于配置中主binlog-format=row/statement的解释:
statement:记录执行语句,例如update...
row:记录的是磁盘变化
到底哪个好?
update age=age+1 where id=3;//语句长而磁盘变化少,宜用row
update set money=money+1000;//语句短而变化多,宜用statement
如果以上两个你拿不准,请使用mixed,由系统根据语句来决定。
进入/home/formal/mysql/data目录并查看以前mysql日志信息,删除以前的log主服务器日志信息
cd /home/formal/mysql/data
ll
rm -rf ./mysql-bin.*
如图3所示:

注意:这里因为修改了mysql服务的配置文件,因此我们一定要把mysql服务重启一下。不然你测试的时候发现没有达到预期的主从复制的效果。
至此,我们的主服务器就配置好了,接下来我们来配置一下从服务器...
首先我们需要配置/home/formal/mysql/目录下mysql.cnf文件。
vi /home/formal/mysql/mysql.cnf
添加如下配置:
log-bin=mysql-bin
binlog_format=mixed
server-id=16
relay-log=mysql-relay
同样,进入/home/formal/mysql/data目录并查看以前mysql日志信息,删除以前的log主服务器日志信息
cd /home/formal/mysql/data
ll
rm -rf ./mysql-bin.*
如图4所示:

注意:这里因为修改了mysql服务的配置文件,因此我们一定要把mysql服务重启一下。不然你测试的时候发现没有达到预期的主从复制的效果。
以上主从服务器相关配置已经完成,那么我们开始正式测试这个功能!
首先登陆主服务器,进入/home/formal/mysql目录登陆mysql
cd /home/formal/mysql/bin
./mysql -uroot -pxushouweidb
如图5所示:

用同样的方式登陆从服务器
cd /home/formal/mysql/bin
./mysql -uroot -pxushouweidb
如图6所示:

在主服务器上为从服务器账号授予读取权限
grant replication client,replication slave on *.* to xushouwei@'192.168.1.%' identified by 'xushouweidb';
flush privileges;
如图7所示:

在从服务器通过语句指定要复制的主服务器(注意,可以一主多从,不可一丛多主),在使用下面语句之前,我们需要只要当前主服务器日志文件走到哪了,使用show master status查看.
show master status;
如图8所示:

在从服务器执行下面语句
change master to
master_host='192.168.1.15',
master_user='xushouwei',
master_password='xushouweidb',
master_log_file='mysql-bin.000011',
master_log_pos=540;
如图9所示:

在从服务器上查看两台服务器状态有么有打通
show slave status \G
如图10所示:

启动从服务器功能,再次查看状态。
start slave;
show slave status \G
如图11-1,11-2所示:


发现报错,这是啥原因呢?
我们不妨看看我们从从服务器连接主服务器
ping 192.168.1.15
如图12所示:

我们发现能ping通,网络是通的,那究竟是什么原因呢?根据经验,我们最能怀疑的就是防火墙的问题,由此我们关闭主服务器的防火墙试试。
service iptables stop
这里你也可以在主服务器添加防火墙端口的方式处理,为了方便我这里就直接使用关闭防火墙的形式去处理该问题,一般情况下内部局域网是不需要使用防火墙的 ,不然会影响效率。
如图13所示:

因此,我们再次尝试启动,再次查看状态。
start slave;
show slave status \G
如图14所示:

这时已经不报错了,说明已经成功!开始进行测试吧!
3.实战测试
分别查看主从服务器都有哪些数据库
主服务器:
show databases;
如图15所示:

从服务器:
show databases;
如图16所示:

由此,我们先在主服务器上创建数据库demo,并再次查看主服务器有哪些数据库。
create database demo;
show databases;
如图17所示:

这时候我们在查看从服务器有哪些数据库。
show databases;
如图18所示:

看见没有?从服务器是不是多了一个demo数据库?
不信咱再测试一下...
我们使用主服务器的demo,然后建立一张student表,并插入两条数据,看看从服务器是不是自动的为我们新建sutent表,表中并包含我们刚从主服务器中插入的两条数据。我们测试一下:
use demo;
create table stutent
(
id int primary key AUTO_INCREMENT,
name varchar(20),
age varchar(20)
);
insert into stutent values(1,'徐守威1','24');
insert into stutent values(2,'徐守威2','23');
如图19所示:

处理完后,我们紧接着查看一下从服务器是不是多了一张表,并且里面有两条数据。
如图20所示:

好了,mysql主从复制的问题我们就先了解到这里!
Mysql中主从复制的原理、配置过程以及实际案例的更多相关文章
- DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量
DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybati ...
- WAMP(Windows、Apache、MySQL、php)安装配置过程常见问题
WAMP(Windows.Apache.MySQL.php)安装配置过程 可以参考该网友的总结(总结的不错,鼓掌!!): http://www.cnblogs.com/pharen/archive/2 ...
- elasticsearch中的mapping映射配置与查询典型案例
elasticsearch中的mapping映射配置与查询典型案例 elasticsearch中的mapping映射配置示例比如要搭建个中文新闻信息的搜索引擎,新闻有"标题".&q ...
- mysql ab主从复制出错及解决过程
一.mysql主从服务器报错描述:Slave_IO_Running=NO,Slave_SQL_Running=YES,Last_Errno=0 mysql slave stop ; mysql sla ...
- Linux下Mysql数据库互为主从的配置过程
配置准备: 两台机器:A(193.168.10.101) B(193.168.10.102) mysql大版本需要一致,小版本可忽略 配置过程: A(193.168.10.101) 机器配置: 执行 ...
- MySQL中的事务原理和锁机制
本文主要总结 MySQL 事务几种隔离级别的实现和其中锁的使用情况. 在开始前先简单回顾事务几种隔离级别以及带来的问题. 四种隔离级别:读未提交.读已提交.可重复读.可串行化. 带来的问题:脏读.不可 ...
- Mysql 中的MVCC原理,undo日志的依赖
一. MVCC 原理了解 原文点击:MVCC原理浅析 读锁: 也叫共享锁.S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的 ...
- mysql中binlog_format模式与配置详解
mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...
- mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
修改方法 1.修改配置文件 可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改. 代码如下: max_allowed_packe ...
随机推荐
- 1.3 selenium IDE录制脚本转换为其他代码格式
1.在seleniumIDE录制框中点击Options->options... 在Enable experimental features前打对勾,点击确定.
- '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "AttentionController" nib but the view outlet was not set.'
问题出现原因: 先创建控制器的.h与.m文件,后来创建了相应的xib文件,运行后出现这个问题. 解决办法:
- 在Servlet(或者Filter,或者Listener)中使用spring的IOC容器
web.xml中的加载顺序为:listener > filter > servlet > spring. 其中filter的执行顺序是filter-mapping在web.xml中出 ...
- HDU 1317(Floyd判断连通性+spfa判断正环)
XYZZY Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- at 定时任务
每天一个linux命令(49):at命令 在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. ...
- ios开发证书,描述文件,bundle ID的关系
苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布证书(又叫"生产证书"),开发描述文 ...
- 基于css3的环形动态进度条(原创)
基于css3实现的环形动态加载条,也用到了jquery.当时的想法是通过两个半圆的转动,来实现相应的效果,其实用css3的animation也可以实现这种效果.之所以用jquery是因为通过jquer ...
- 关联规则算法---Eclat算法
Eclat算法 与fp-growth 和apriori算法不同,Eclat算法加入了倒排的思想,具体就是将事务数据中的项作为key,每个项对应的事务ID作为value. 原输入数据为 tid item ...
- php中__clone() shallow copy 只是浅复制
什么是浅复制呢? 简单一点,就是说复制一个对象的时候,如果对象$Obj的一个属性的类型是引用类型的,比如 $person这个属性,指向的是一个 叫做 $objPerson的一个引用, 那么复制$Obj ...
- Mysql update语句赋值嵌套与在表列中数据后面增加数据
1.Mysql update语句赋值嵌套select 点击(此处)折叠或打开 update a set col=(select col from a where id='5') where id&g ...