【转载】MySQL主从服务器配置

摘要: 1、配置主服务器 2、配置从服务器 3、主从服务器状态查看及问题处理

MySQL的主从同步架构是当前比较流行的一种数据库架构,利用MySQL的主从配置,可以实现读写分离,减轻主数据库的访问压力,提升网站性能。MySQL的主从服务器的基本原理如下:

大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致。主从同步的详细过程如下:

1. 主服务器验证连接。

2. 主服务器为从服务器开启一个线程。

3. 从服务器将主服务器日志的偏移位告诉主服务器。

4. 主服务器检查该值是否小于当前二进制日志偏移位。

5. 如果小于,则通知从服务器来取数据。

6. 从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。

7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。

8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。

更多资料参考:http://blog.chinaunix.net/uid-20639775-id-3254611.html

例如现在我们有两台服务器,172.17.22.187和172.17.22.188, 现在把188服务器的MySQL数据库配为主服务器,187数据库配为从服务器(Slave),当然,Slave可以有多个。MySQL主从服务器一般使用方法为主服务器(Master)负责网站的NonQuery操作,从服务器(Slave)负责Query操作,我们可以根据网站功能模块的特性来指定访问的服务器,比如前台项目列表,投融资记录查询等模块可以指定访问Slave,投标,项目审核等等交易性的操作访问Mater,也可以写个池或队列,自由为请求分配从服务器连接。

1、配置主服务器

上面主从同步的原理大致可以理解为主从服务器通过IO线程上的Binary Log复制,和SQL语句的重放实现数据的同步,当然复制时主服务器返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置,这个过程的更多资料可以搜“MySQL Replication 线程”,如:

http://blog.csdn.net/bengda/article/details/7852889

在上面权限管理的小结中也提到了,有一个叫”REPLICATION SLAVE”的权限,它是服务器管理中的复制权限,有这个权限slave才能从master服务器上复制binlog日志。所以我们需要创建一个数据库用户,并给他赋予replication权限,创建并赋权的sql如下:

GRANT REPLICATION SLAVE,FILE ON *.* TO ‘repl‘@‘172.17.%.%‘ IDENTIFIED BY ‘123456‘;

角色创建好了以后,要在主服务器的配置文件上加上log-bin配置,开启Binary Log功能,否则无法实现replication复制,配置文件的路径为/usr/my.cnf,不同机子或系统可能路径不一样,可以用find / -name my.cnf查找一下,找到后修改加入如下内容:

server-id=1

log-bin=master-bin

log-bin-index=master-bin.index

Server-id主服务器配为1,从服务器配置时要注意不能与主服务器冲突了,不然到时候会出现莫民其妙的问题,因为同步的时候会会根据server-id做判断,如果server-id一样就不进行同步了,my.cnf的其它各项配置的介绍可以参考:http://database.51cto.com/art/201108/285365.htm

需要注意的是:每次修改配置文件需要重启mysql服务才能生效:

service mysql restart;//重启mysql服务

同步之前我们可以先将原主库里面的数据备份到从库上,可以使用mysqldump,语法如下:

mysqldump -uroot -p --lock-tables --events --triggers --routines --flush-logs --master-data=2 --databases authority_test rep_test_db replication > db.sql

--databases后面跟的authority_test等为数据库,将它们的快照保存到db.sql文件中。

将db.sql文件移到从服务器上后,可以用:mysql -uroot -p < db.sql 将主库的数据内容备份到从库。

2、配置从服务器

1) 找到从服务器的配置文件my.cnf,加入如下配置:

server-id=2

relay-log-index=slave-relay-bin.index

relay-log=slave-relay-bin

2) 重启从服务器mysql服务:service mysql restart。

3) 登录从服务器数据库,要连接上Master,使用如下sql:

change master to master_host=‘172.17.22.188‘, master_port=3306, master_user=‘repl‘,master_password=‘123456‘, master_log_file=‘master-bin.000001‘, master_log_pos=0;

4) 在mysq里使用sql语法:start slave。启动slave

3、主从服务器状态查看及问题处理

可以使用show slave status\G,查看slave的运行状态:

在 slave status 的状态中,有两项:Slave_IO_Running 和 Slave_SQL_Running, 必须都为 Yes 才说明正常运行了。

如果是slave_io_running no了,那么就我个人看有三种情况,一个是网络有问题,连接不上,第二个是有可能my.cnf有问题.

一旦io为no了先看err日志,看看有什么错,很可能是网络,也有可能是包太大收不了,这个时候从机上改max_allowed_packet这个参数。

Slave_SQL_Running 为 No 时:

解决办法一

1.程序可能在slave上进行了写操作

2.也可能是slave机器重起后,事务回滚造成的.

一般是事务回滚造成的:

解决办法:

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> slave start;

推荐使用该办法.

set GLOBAL SQL_SLAVE_SKIP_COUNTER=N,用来跳过备机的一条或N条出错的复制语句。

在show slave status 中会有出错的语句。

set GLOBAL SQL_SLAVE_SKIP_COUNTER=1 一次后会发现跳过了一条语句。

如果设置完后发现还有错误语句。要多执行几次。

解决办法二

首先停掉Slave服务:stop slave。

到主服务器上查看主机状态:

记下File和Position对应的值

登录master

使用sql语法:show master status查看master运行状态:

然后到slave服务器上执行手动同步:

change master to master_host = ‘172.17.22.188‘,master_port = 3306,master_user = ‘repl‘,master_password=‘123456‘,master_log_file=‘master-bin.000007‘,master_log_pos=120;

重新定位日志文件和日志位置。

然后: start slave,启动slave。

问题都处理完了以后可以尝试在master上进行各种增删改操作,可以发现,slave数据库上会同步更新,与master保持一致。

? 著作权归作者所有

时间: 2024-10-05 13:21:33

【转载】MySQL主从服务器配置的相关文章

mysql主从服务器配置

假如一个业务场景,测试后,读写比列为1:20,根据读写比例,合理设置优化方案. 读写比列: 写数据/读数据比例,    insert/update/delete    /  select 从"读写分离"概念推导实现基本要素: 一般来说,读服务器就是指写服务器的数据镜像. 从服务器端看:要有N台从服务器和主服务器保持数据一致. 从客户端看:比如有一条insert语句和一条select语句, 则要区分读/写语句,并且分别请求从/主服务器. 服务器端读写分离的具体技术 1:数据库集群技术 集

mysql 主从服务器配置

当遇到磁盘读写的事务锁 导致的系统读写能力下降的问题,可以使用主从读写分离的模式进行优化.不过读写分离会导致数据读取的延时性. mysql的主从复制 主要依赖于数据库的二级制文件进行数据库的同步功能. 参考链接: http://blog.csdn.net/cutesource/article/details/5710645 http://blog.itpub.net/29870867/viewspace-1304862/ 1.安装mysql  我的master 用的是win10系统  mysql

mysql主从数据库复制

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

搭建mysql主从服务器

搭建mysql主从服务器: //注:注释掉my.cn文件中的skip-federated字段[[email protected] ]# /bin/cp -r /usr/local/mysql/share/mysql/my-huge.cnf  /etc/my.cnf 配置主服务器:修改my.cnf文件server-id=1 //每个数据库服务器都要指定唯一一个server-id log-bin=mysql-bin //mysql进行主从复制时通过二进制日志文件来进行的,所以必须开启mysql日志功

mysql 主从原理及配置

MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少. MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql instance(instance英文为实例)(我们称之为Master)复制到

mysql 主从配置(master slave)

mysql主从复制(超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:  1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修改主服务器master:   #vi /etc/my.cnf       [mysqld]       log-bin=mysql-bin   //[必须]启用二进制日志       server-id=222      //[必须]服务器唯一ID,默认是1,一般取IP

《高可用MySQL》读书笔记2 – 单机版MySQL主从配置

这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图如下所示: 建立基本的主从复制可以总结为以下三个基本步骤: 配置master服务器 配置slave服务器 将slave连接到master 在配置完成之后,我们会做一个简单的测试,测试复制是否正常. 本文所涉及的master和slave服务器均位于同一台单机上,使用不同的端口号区分,基本的环境为:Window 7 旗舰版 32位,MySQL的版本为5.6.21 .上一

MySQL主从同步、读写分离配置步骤

现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master) 192.168.0.2 (Slave) MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1 1.登录Master服务器,修改my.cnf,添加如下内容: server-id = 1 //数据库ID号,

学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践

简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到另一个. 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量.  对于异地热备,尤其适合灾备.废话不多说了.我们直接进入主题. 我们会主要介绍两部分内容: 一, mysql 备份工作原理 二, 备份实战 我们开始. 我使用的是my