现在需要将上述redis节点配置为主从复制。
在redis的配置文件中加上 slaveof <host> <port> 即可实现。
配置前,查看m161p114中的内容如下:
如下,在服务器192168161115节点的redis的配置文件中增加如下配置:
之后重启redis服务:
此时查看m161p115中的key:
这与m161p114中的内容一致。这说明配置生效,启动从库数据会直接同步。
此后,从库m161p115将变为只读状态,无法再set内容:
将配置文件中新增的slaveof 注释掉,再重启redis,则主从复制就会关闭,不过从库中的数据不会清除。
当然,主从复制也可以不在配置文件中配置,而直接在命令行中执行命令:
这样数据就会同步过来。
通过info可以看到主从建立成功:
从节点的断开
在从节点执行,slaveof no one 即可。
之后从节点就会变成master状态,但是数据不会清除。如果要清除数据,需要执行flashall
从建立主从复制到断开过程的日制:在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的。譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止。介于这种情况,我们来学习一下mysql主从复制。
使用mysql主从复制的好处有:
1、采用主从服务器这种架构,稳定性得以提升。如果主服务器发生故障,我们可以使用从服务器来提供服务。
2、在主从服务器上分开处理用户的请求,可以提升数据处理效率。
3、将主服务器上的数据复制到从服务器上,保护数据免受意外的损失。
环境描述:
新企业要搭建架构为主从复制的mysql数据库。
主服务器(mysql-master):IP地址:19216848128,mysql已安装,没有用户数据。
从服务器(mysql-slave):IP地址:19216848130,mysql已安装,没有用户数据。
主从服务器均可正常提供服务。
主从复制配置如下:
在主服务器上 *** 作:
1)、确保/etc/mycnf中有如下参数,没有的话需手工添加,并重启mysql服务。
[mysqld]
log-bin=mysql-bin 启动二进制文件
server-id=1 服务器ID
2)、登录mysql,在mysql中添加一个backup的账号,并授权给从服务器。
[root@localhost ~]# mysql -uroot –p123456 登录mysql
mysql> grant replication slave on to 'backup'@'19216848130' identified by 'backup'; 创建backup用户,并授权给19216848130使用。
3)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。一、 概述
MySQL从32315版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication进行双机热备的配置。
二、 环境
*** 作系统:Linux 26231-42fc8 # SMP(不安装XEN)
Mysql版本:5045-4fc8
设备环境:PC(或者虚拟机)两台
三、 配置
数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是mycnf):在本环境下为/etc/mycnf。
31 设置环境:
IP的设置:
A主机 IP:10100119
Mask:25525500
B主机 IP:10108112
Mask:25525500
在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态
为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。
最终以两台主机可以相互ping通为佳。
32 配置A主(master) B从(slave)模式
321 配置A 为master
、增加一个用户同步使用的帐号:
GRANT FILE ON TO ‘backup’@'10108112' IDENTIFIED BY ‘1234’;
GRANTREPLICATION SLAVE ON TO ‘backup’@'10108112' IDENTIFIED BY ‘1234’;
赋予10108112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
、增加一个数据库作为同步数据库:
create database test;
、创建一个表结构:
create table mytest (username varchar(20),password varchar(20));
、修改配置文件:
修改A的/etc/mycnf文件,在mycnf配置项中加入下面配置:
server-id = 1 #Server标识
log-bin
binlog-do-db=test #指定需要日志的数据库
、重起数据库服务:
service mysqld restart
查看server-id:
show variable like ‘server_id’;在配置DNS主从服务器同步的时候,bind服务默认是允许任何人进行同步的,但是这样容易造成安全隐患。bind服务支持通过限制IP和key认证两种方式来对同步的来源Ip进行限制,限制IP的方法已经在此前的文章中演示多次,因此本文着重描述如何使用key认证来限制从服务器的来源。
本次实验我使用了两台虚拟机进行测试,分别是:
相关的主从服务器的配置此处不多细说,可参考我此前的文章; >本次环境:虚拟机下
服务器:Ubuntu
1404
LTS
数据库:
5537
端口:3306
主IP:19216863133
从IP:19216863134
授权账号:
user:suxh
password:111111
好了交代完环境:我们直接配置:
第一步:主从两台服务器要有同样的数据库(需要同步的)这里用的是backup
数据库(不多说了,在同步开始前,把主库的复制一份到从库就行了)
第二步配置主(master)数据库
编辑/etc/mycnf
主要是开启二进制日志
和设置要同步的数据库
等一些参数
#
binary
logging
format
-
mixed
recommended
binlog_format=mixed
binlog-ignore-db=mysql
binlog-do-db=backup
#
required
unique
id
between
1
and
2^32
-
1
#
defaults
to
1
if
master-host
is
not
set
#
but
will
not
function
as
a
master
if
omitted
server-id
=
1
参数解释下:
server-id
这个是唯一的不能跟从服务器相同。
binlog_format
二进制文件的格式
binlog_ignore-db
忽略的数据库
binlog-do-db
要同步的数据库
设置完了以后
重启数据库就可以了。
第三步从数据库:
同样修改/etc/mycnf
在mysql
版本517
不支持master-host”类似的参数;
所以这里只要配置server-id=2
就可以了
然后登陆从数据库设置
change
master
to
master_host='19216863133',
master_user='suxh',
master_password='111111';
slave
start;
基本配置就好了。这是我的简要笔记。MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维 护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那 时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。
为什么使用主从复制?
1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新,这样可能引起冲突。
3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。
MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服 务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,从服务器使用此线程读取中继日志并执行日 志中包含的更新。SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。
默认中继日志使用host_name-relay-binnnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序 列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。默认中继日志索引文件名为 host_name-relay-binindex。在默认情况,这些文件在从服务器的数据目录中被创建。中继日志与二进制日志的格式相同,并且可以用 mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后,中继日志将会被自动删除。
从服务器在数据目录中另外创建两个状态文件--masterinfo和relay-loginfo。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
设置主从复制:
1、确保在主服务器和从服务器上安装的MySQL版本相同,并且最好是MySQL的最新稳定版本。
2、在主服务器上为复制设置一个连接账户。该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。
mysql> GRANT REPLICATION SLAVE ON
-> TO 'replication'@'%yourdomaincom' IDENTIFIED BY 'slavepass';
3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句:
mysql> FLUSH TABLES WITH READ LOCK;
保持mysql客户端程序不要退出。开启另一个终端对主服务器数据目录做快照。
shell> cd /usr/local/mysql/
shell> tar -cvf /tmp/mysql-snapshottar /data
如果从服务器的用户账户与主服务器的不同,你可能不想复制mysql数据库。在这种情况下,应从归档中排除该数据库。你也不需要在归档中包括任何日志文件或者masterinfo或relay-loginfo文件。
当FLUSH TABLES WITH READ LOCK所置读锁定有效时(即mysql客户端程序不退出),读取主服务器上当前的二进制日志名和偏移量值:
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin003,偏移量为73。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标,从服务器应从该点开始从主服务器上进行新的更新。
如果主服务器运行时没有启用--logs-bin,SHOW MASTER STATUS显示的日志名和位置值为空。在这种情况下,当以后指定从服务器的日志文件和位置时需要使用的值为空字符串('')和4
取得快照并记录日志名和偏移量后,回到前一中端重新启用写活动:
mysql> UNLOCK TABLES;
4、确保主服务器主机上mycnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值。例如:
[mysqld]
log-bin
server-id=1
如果没有提供那些选项,应添加它们并重启服务器。
5、停止从服务器上的mysqld服务并在其mycnf文件中添加下面的行:
[mysqld]
server-id=2
slave_id值同Master_id值一样,必须为1到232–1之间的一个正整数值。并且,从服务器的ID必须与主服务器的ID不相同。
6、将数据备据目录中。确保对这些文件和目录的权限正确。服务器 MySQL运行的用户必须能够读写文件,如同在主服务器上一样。
Shell> chown -R mysql:mysql /usr/local/mysql/data
7、启动从服务器。在从服务器上执行下面的语句,用你的系统的实际值替换选项值:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
8、启动从服务器线程:
mysql> START SLAVE;
执行这些程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。
9、如果出现复制错误,从服务器的错误日志(HOSTNAMEerr)中也会出现错误消息。
10、从服务器复制时,会在其数据目录中发现文件masterinfo和HOSTNAME-relay-loginfo。从服务器使用这两个文 件跟踪已经处理了多少主服务器的二进制日志。不要移除或编辑这些文件,除非你确切知你正在做什么并完全理解其意义。即使这样,最好是使用CHANGE MASTER TO语句。一、主从服务器
1、两台服务器。主服务器Master复制数据的更新、插入、删除等 *** 作; 从服务器Slave负责查询(读写分离,减缓服务器压力)
2、主服务器更新数据的同时更新从服务器的数据(数据备份)
3、当主服务器出现文件时,可用从服务器代替主服务器,保证网站的正常运行,同时检测主服务器存在的问题。注意:从服务器仍然只有查询功能,如银行系统更新时只能查询余额,不能存取款。(服务器可用性)
4、当把从服务器真正设置为主服务器时(即主从服务器设置调换),拥有更新数据的功能。
5、MyISAM不支持事务,但查询性能比InnoDB强;InnoDB支持事务,更新 *** 作性能比MyISAM强。因此,主服务器可以设置成MyISAM存储引擎,从服务器可以设置成InnoDB存储引擎(灵活设置存储引擎)
二、负载均衡
1、多台服务器。一个域名映射到多台服务器IP。
2、用户发出请求,提交到负载均衡服务器,由负载均衡服务器发送请求到不同的服务器。
3、负载均衡服务器选取服务器方法(负载均衡算法):
1、轮询:每台服务器轮换
2、加权轮询:为了应对某些服务器性能好,可以让他们的权重高一点,被选中的几率大一些。
3、最少连接:哪台服务器处理的连接少,就发给哪台服务器。
4、随机
4、存在的问题:客户端存在缓存,如果服务器出现故障,客户端报错。
5、分类:DNS负载均衡、>
一. 准备服务器
准备两台主机,分别安装好Mysql (要相同版本),确定版本无误,确保mysql服务正常启动,确保两台主机处于同一个局域网中,确定好哪台做为主、备机器,假设A为主机,B为备机,假设:
A主机IP地址为:172161690 端口3306
B主机IP地址为: 172169998 端口3306
二. Mysql建立主-从服务器热备配置步骤
1 创建同步用户
进入MySql *** 作界面,在主服务器上为从服务器建立一个连接帐户,该帐户必须授予REPLICATION SLAVE权限。
*** 作指令如下:
1) grant select,replication slave on to 'replicate'@'172169998' identified by '1234567';
2) flush privileges;
2 修改Mysql配置
如果上面的准备工作做好,就可以进行对Mysql配置文件进行修改了,首先找到主服务器Mysql安装文件所有在目录,找到myini文件用记事本打开。在[mysqld]下增加如下内容:
server-id = 1
log-bin=mysql-bin
binlog-do-db =test #需要备份的数据库,多个写多行
binlog-ignore-db = mysql #不需要备份的数据库,多个写多行
3 重启mysql服务
修改完配置文件保存后,重启一下mysql服务。
4 查看主服务器状态
进入A服务器Mysql 客户端输入命令
1)Show master STATUS;
2)返回结果如下:
注意看里面的参数,特别前面两个File和Position,在从服务器(Slave)配置主从关系会有用到的。
5 从服务器Slave配置修改配置文件
因为这里面是以主-从方式实现mysql双机热备的,所以在从服务器就不用在建立同步帐户了,直接打开配置文件myini进行修改即可,道理还是同修改主服务器上的一样,只不过需要修改的参数不一样。
如下:
[mysqld]
server-id = 2
log-bin=mysql-bin
replicate-do-db = test
replicate-ignore-db =mysql
6 重启mysql服务
修改完配置文件保存后,重启一下mysql服务。
7 配置从服务器
先停止slave服务线程,这个是很重要的,如果不这样做会造成下面 *** 作不成功,再用change mster 语句指定同步位置, *** 作如下:
1) stop slave;
2) change master to master_host='172161690',
master_user='replicate',master_password='1234567',master_port=3306,
master_log_file='mysql-bin000001',master_log_pos=98;
3) start slave
4) show slave status
查看下面两项值均为Yes,即表示设置从服务器成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)