MySQL服务器主从服务详解

MySQL主从复制概念

  • Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

  • 注:在进行mysql复制时,所有对复制中的表的更新必须在主服务器上进行。否则必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

MySQL主从复制原理

(1)MySQL支持复制类型

  • 基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
  • 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
  • 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

(2)MySQL主从复制过程

  • MySQL主从复制基本流程图:

  • 复制过程详解:
  • 1、在每个事物更新数据完成之前,master主服务器在二进制日志记录这些改变,写入二进制日志完成后,master通知存储引擎提交事物。
  • 2、slave将master主服务器的二进制日志Binary log 复制到其中继日志Relay log,首先slave(从服务器)开始一个工作线程——I/O线程,I/O线程在master上打开一个普通的连接,然后开始Binlog dump process,该进程从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件,而I/O线程将这些事件写入中继日志。
  • 3、SQLslave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志中读取事件,并重放其中的事件而更新salve数据,使其与master中数据保持一致,只要该线程与I/O线程保持一致,中继日志通常会位于OS缓存中(也就是内存当中),所以中继开销很小。

(3)主从复制注意点

  • 1、master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。
  • 2、slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
  • 3、Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
  • 4、Mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)。
  • 5、master和slave两节点间时间需同步。

MySQL主从服务部署

实验环境

服务器 服务器系统 IP地址 所需服务
MySQL主服务器 centos7.3 192.168.144.128 ntp,mysql5.7
MySQL从服务器 centos7.3 192.168.144.129 ntp,mysql5.7

MySQL主服务器

  • 设置主服务器为本地时钟源
    安装时间同步软件:

yum install ntp -y
vim /etc/ntp.conf

末行添加:

server 127.127.144.0                    //设置本地是时钟源,注意自己所在网段是144段
fudge 127.127.144.0 stratum 8          //设置时间层级为8(限制在15内)

service ntpd start
service iptables stop
setenforce 0

  • 安装MySQL软件

这里在centos7上安装MySQL5.7版本,详细过程请参见LAMP-mysql搭建

  • 安装好MySQL后:

vim /etc/my.cnf

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 10              //设置主从服务器身份唯一标识
log-bin=master-bin          //开启二进制日志
log-slave-updates=true      //开启主从功能

systemctl restart mysqld.service

mysql -u root -p

GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.144.%‘ IDENTIFIED BY ‘123456‘;  //将从服务器权限赋予账号myslave,可以在192.168.144.0网段登录,密码为123456 

FLUSH PRIVILEGES;     //刷新状态

show master status;  //查看主服务器状态
  • 切记主服务器状态!

MySQL从服务器

  • 安装ntp时间同步软件,由于主服务器已经设置了时间源,从服务器只需打开时间同步服务,并跟主服务器同步即可。

yum install ntp -y
systemctl restart mysqld.service
systemctl stop firewalld/service
setenforce 0
/usr/sbin/ntpdate 192.168.144.128 //进行时间同步//

  • 安装MySQL软件

vim /etc/my.cnf

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 20              //设置唯一身份标识
relay-log=relay-log-bin     //打开中继日志功能
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称
  • 进入数据库

mysql -u root -p //

change master to master_host=‘192.168.144.128‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master-bin.000001‘,master_log_pos=604;   //切记根据主服务器状态更改相应二进制日志文件和偏移量;

start slave;    //开启从服务器状态

show slave status\G;     //查看状态

验证主从结果

  • 当选择在主MySQL服务器中创建数据,从服务器中也会同步更新数据文件。

原文地址:http://blog.51cto.com/13659253/2137062

时间: 2025-01-09 03:11:33

MySQL服务器主从服务详解的相关文章

MySQL主从架构详解

1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

MySQL UUID函数的详解(转)

MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: l  UUID是可以生成时间.空间上都独一无二的值:自增序列只能生成基于表内的唯 一值,且需要搭配使其为唯一的主键或唯一索引: l  实现方式不一样,UUID是随机+规则组合而成的,而自增序列是控制一个值逐步增长的: l  UUID产生的是字符串类型值,固定长度为:36个字符,而自增序列产生的是整数

mysql5.6主从参数详解

mysql5.6的主从相当的不错,增加了不少参数,提升了主从同步的安全和效率,以下是mysql5.6主从参数详解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ######################################### server_id = 2 #binlog log-bin = /data1/mysql/binlog/binlog binlog_format

Mysql配置文件my.ini详解

原链接:http://blog.sina.com.cn/s/blog_718ac8bf0100pkvp.html 以下是Mysql数据库服务器配置文件my.ini的详细配置.应用场合是InnoDB引擎,2核CPU, 32位SUSE. [client] #password = your_password port  = 3306 socket  = /tmp/mysql.sock # Here follows entries for some specific programs # The MyS

CentOS 默认基本服务详解

1.使用chkconfig --list来查看安装的服务,比如我这里最小化安装后的一些服务 [[email protected] ~]# chkconfig --list auditd          0:off   1:off  2:on    3:on    4:on   5:on    6:off crond           0:off   1:off  2:on    3:on    4:on   5:on    6:off ip6tables       0:off  1:off

MySQL 执行计划explain详解

MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的. 调用EXPLAIN 在select之前添加explain,mysql会在查询上设置一个标记,当执行查询计划时,这个标记会使其返回关于执行计划中每一步的信息,而不是执行它.它会返回一行或多行信息,显示出执行计划中的每一部

HTTPD服务详解

HTTPD服务详解 目录 一.httpd的程序版本 二.httpd的特性 三.httpd的功能特性 四.httpd使用 1.httpd的安装 2.程序环境 Httpd-2.2 (Centos6) http-2.4 (Centos7) 五.http配置相关说明 1.修改监听的ip和port 2.持久连接 3.MPM 4.DSO配置指令模块加载 5.定义Main'server文档页面路径 6.站点访问控制 文件系统路径 URL路径 7.<Directory> 中基于源地址实现访问控制 Option

PHP mysql与mysqli事务详解

官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 在PHP中,mysqli 已经很好的封装了mysql事务的相关操作.如下示例: $sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDeta

CentOS5启用Telnet服务详解(转载)

CentOS5启用Telnet服务详解 配置步骤如下: 一.安装telnet软件包(通常需要两个) 1. telnet(或 telnet-client),这个软件包提供telnet 客户端程序: 2. telnet-server,这个软件包提供telnet 服务器端程序: 安装之前先检查系统是否已安装这些软件包,方法如下: [[email protected] /]#rpm –qa |grep telnet 如果没有检测到软件包,则需要进行安装.CentOS5默认已安装了telnet软件包,te