百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Mysql中主从复制的原理、配置过程以及实际案例

wptr33 2025-03-13 21:05 19 浏览

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所示:

至此,我们的主服务器就配置好了,接下来我们来配置一下从服务器...

首先我们需要配置/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所示:

以上主从服务器相关配置已经完成,那么我们开始正式测试这个功能!

首先登陆主服务器,进入/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主从复制的问题我们就先了解到这里!

相关推荐

Python钩子函数实现事件驱动系统(flask钩子)

钩子函数(HookFunction)是现代软件开发中一个重要的设计模式,它允许开发者在特定事件发生时自动执行预定义的代码。在Python生态系统中,钩子函数广泛应用于框架开发、插件系统、事件处理和中...

Python 项目中使用锁的棘手问题及深度解决方法

在Python多线程开发中,锁的使用看似简单,实则暗藏诸多棘手问题。这些问题往往在高并发场景下才会暴露,且排查难度大、影响范围广。本文将针对实际项目中锁使用的棘手场景,从问题根源出发,提供系统性的...

学Python基础这么久了,花了好长时间精心记录的学习笔记

我为什么要学Python呢!当我刚开始接触Python时,我就感觉Python是一种很高级的语言。我很喜欢,对,就是因为喜欢。好了!话不多说,开始看笔记了,喜欢的朋友可以点赞关注转发哦~...

Python浅拷贝深拷贝之copy、deepcopy

笔记记录20221205:个人总结:1,两者基本区别不大;2,在涉及到子对象时候,两者才有区别;3,在涉及到子对象,且子对象的操作后内存地址没有发生变化(如下方代码:dic1['one'...

自学python第四天:列表(python入门之玩转列表)

列表在Python中,用方括号([])表示列表,用逗号分隔其中的元素。例:cars=['搅拌车','运钞车','大货车']print(car...

先Mark后用!8分钟读懂 Python 性能优化

从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...

Python基础编程——字典的常用方法(三)

前一节介绍了get()、items()、keys()、pop()四种字典的常用方法,本节继续介绍剩余的四种字典常用的方法:popitem()、setdefault()、update()、values(...

Python 获取图片内容的方法(python获取图片并储存图片)

在网络爬虫和数据处理中,获取图片内容是常见需求。Python通过相关库可以便捷地从网络或本地获取图片内容,以下是具体实现方法及注意事项。一、从网络获取图片内容1.1使用requests库获取r...

一天快速入门 Python(python入门很简单)

Python是由GuidoVanRossum在90年代早期设计,现在是最常用的编程语言之一。特别是人工智能的火热,再加之它的语法简洁且优美,实乃初学者入门AI必备的编程语言。作者|yuq...

Python集合17个方法详解(python集合的概念)

01、add()描述:add()方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。注意:集合中只能包含可哈希的对象,即list,dict都不能嵌入到集合语法:set.add...

Python字典:定义、基本操作与方法详解

什么是字典在Python中,字典(dict)是一种无序的、可变的数据类型,用于存储键-值(key-value)对。字典中的键必须是唯一的,且不可变的数据类型(如字符串、数字、元组),而值可以是任何数据...

Python小案例47-集合的操作和方法

Python中的集合是一种无序且不重复的数据结构。它们是可变的,可以添加、删除和修改元素。下面是一些常用的集合操作和方法:...

Python 项目中使用锁的常见问题及解决方法

在Python多线程编程中,锁是保证共享资源安全访问的核心机制。然而,锁的不当使用往往会引发新的问题,如死锁、性能损耗等。本文结合实际项目场景,深入剖析锁在使用过程中的常见问题,并提供可落地的解决...

python中元组,列表,字典,集合删除项目方式的归纳

九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这...

python学习教程-第五节内容(python系列教程)

字符串大小写转换方法查找和替换方法判断字符串内容类型字符串开头结尾判断字符串分割和连接...