主从复制目的:

主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器。在主从服务器上分开处理用户的请求,读的话,可以直接读取备机数据,可获得更短的响应时间。

主服务器:IP地址192.168.80.129,mysql已经安装,无用户数据。

从服务器:IP地址192.168.80.130,mysql已经安装。

注:数据库版本必须一致。

1.主从复制配置

修改从服务器的配置文件/etc/my.cnf,在mysqld里添加一下属性

[mysqld]

log-bin=mysql-bin //[必须]启用二进制日志
server-id=129 //[必须]服务器唯一ID,默认是1,一般取IP最后一段,如IP:192.168.80.129

2.从服务器也做以上操作,添加完之后,重新启动两个数据库。

主服务器上进行操作

(1)创建用户并授权

1 mysql -u root -p

2 mysql>grant replication slave on *.* to root@192.168.80.130 identified by'mysql';

3 mysql>flush privileges;


(2)查询主数据库的状态

1 mysql> show master status;


记下File以及Position的值,在后面进行从服务器操作的时候需要使用。


2.在从服务器上操作

(1)mysql登录并执行同步的sql语句,最后并启动slave

1 #mysql -uroot -p

2 mysql> change master to master_host='192.168.80.129',master_user='root',master_password='123456',master_log_file='mysql-bin.000025',master_log_pos=990;



3 mysql> start slave;

就启动了slave同步功能

(2)主从同步检查

执行如下语句

1 mysql>show slave status\G


来检查从服务器的同步情况,一个正常的输出结果应该如下面的形式:

Slave_IO进程以及slave_SQL进程都必须正常运行,在状态输出中表现为:“slave”;否则都是不正确的状态(如一个值是Yes,另一个是No则不行)。

如果主数据库服务器已经存在用户数据,那么在进行主从复制时,需要做以下处理。

(1)主数据库锁表操作,不让数据再进行写入动作。

1 mysql>flush tableswithread lock;

(2)查看主数据库的状态

1 mysql>show master status;


记下File以及Position的值,以备从服务器使用。

(3)把主服务器的数据文件复制到从服务器,最好先用tar归档压缩处理一下

(4)取消主数据库锁定

1 mysql>unlock tables;

从服务器的操作和前面的步骤一样,略过。

测试是否实现主从复制

在主数据库服务器上创建库和表,然后插入记录,再登录到从服务器,查看是否也建立相一致的库和表以及记录。

(1)主服务器上的操作

1 mysql>create database first_tb;

①在主数据库服务器创建库first_tb;


2 mysql>create table first_db(idint(3)),name char (10));

②在主数据库服务器创建表first_tb;

3 mysql>insert into first_tb values (001,'myself');


③在主数据服务器的表first_tb中插入记录;

(2)从服务器上查看

1 mysql>show databases;

①数据库first_db自动生成

②表first_tb也自动生成,数据记也录存在。

测试二

导入数据库,在主库上查看现在的数据库

创建数据库buy并且导入数据

在从库上查看,数据库已经完全导入。

2.mysql宕机切换演练

(1)高可用双主热备宕机自动切换演练

通常说的「双机热备」是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。

VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。

环境描述:

  • OS:CentOS6.5_X64
  • MASTER:192.168.80.129
  • BACKUP:192.168.80.130
  • VIP:192.168.80.135 (虚拟IP)
1、配置两台Mysql主主同步

安装mysql的步骤前面有讲,我就不说了。不明白的可以看http://blog.csdn.net/kjsayn/article/details/51320927

编辑my.cnf

# vi /etc/my.cnf #开启二进制日志,设置id

[mysqld]
server-id = 1 #backup这台设置2
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1
slave-skip-errors = all #忽略所有复制产生的错误


#./mysql start

#先查看MASTER下的log bin日志和pos值位置


master配置如下:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.80.130' IDENTIFIED BY 'root'; #130通过root远程访问到他自己
mysql> flush privileges;
mysql> change master to
-> master_host='192.168.80.130',
-> master_user='root',
-> master_password='123456',
-> master_log_file='mysql-bin.000009',
-> master_log_pos=1131; #对端状态显示的值
mysql> start slave; #启动同步

backup配置如下:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.80.129' IDENTIFIED BY 'root';
mysql> flush privileges;
mysql> change master to
-> master_host='192.168.80.129',
-> master_user='root',
-> master_password='root',
-> master_log_file='mysql-bin.000029',
-> master_log_pos=107; #对端的状态显示值
mysql> start slave;

#主主同步配置完毕,查看同步状态Slave_IO和Slave_SQL是YES说明主主同步成功。(两边都要是yes,如果一边yes另一边识别不到pos就无法同步)


在master插入数据测试下:


在backup查看是否同步成功:


可以看到已经成功同步过去,同样在backup插入到user表数据,一样同步过去,双主就做成功了。

主主配置常见报错:

注:如果其中一边提示连接中,关闭防火墙即,或者对应IP不对,请注意查看salve的IP。其中一个显示NO,查底下报错,显示por值匹配不到的,则说明你其中一边的bin-log不一致,关闭salve,重新配置即可。


2、配置keepalived实现热备

keepalived安装过程 我就不说了,网上很多,我是直接安装编译完成的。(源码不会编译的网上搜索一下)

keepalived编译配置文件

# vi /etc/keepalived/keepalived.conf

!ConfigurationFileforkeepalivedglobal_defs{notification_email{1111111@qq.com#接收报警邮箱地址}notification_email_from1111111@qq.comsmtp_server127.0.0.1smtp_connect_timeout30router_idMYSQL_HA #标识,双主相同}vrrp_instanceVI_1{stateBACKUP#两台都设置BACKUPinterfaceeth0virtual_router_id51 #主备相同priority100 #优先级,backup设置90advert_int1nopreempt #不主动抢占资源,只在master这台优先级高的设置,backup不设置authentication{auth_typePASSauth_pass1111}virtual_ipaddress{192.168.0.204}}virtual_server192.168.0.2043306{delay_loop2#lb_algorr#LVS算法,用不到,我们就关闭了#lb_kindDR#LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQLpersistence_timeout50#同一IP的连接60秒内被分配到同一台真实服务器protocolTCPreal_server192.168.0.2023306{#检测本地mysql,backup也要写检测本地mysqlweight3notify_down/usr/local/keepalived/mysql.sh#当mysq服down时,执行此脚本,杀死keepalived实现切换TCP_CHECK{connect_timeout3 #连接超时nb_get_retry3#重试次数delay_before_retry3#重试间隔时间}}


  • 采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;

#backup服务器只修改priority为90、nopreempt不设置、real_server设置本地IP。

1 启动keepalived

#./keepalived start

3.测试高可用性

1、通过Mysql客户端通过VIP连接,看是否连接成功。

2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。


master数据库宕的时候,VIP就会自动切换到另一台上,实现主主自动切换。远程连接数据库的虚拟IP是可以连接的,实现应用切换的效率。部署应用的时候配置VIP即可共享数据库资源。

3.注意:当宕库恢复的时候,要启动keepalived,否则VIP无法自动切换回来。





更多相关文章

  1. 2、MySQL 8.0参考手册 连接到服务器并断开连接
  2. 如何启用对MySQL服务器的外部访问?
  3. 阿里云服务器MySQL远程连接问题
  4. 与MySQL服务器进行大量睡眠连接的可能原因?
  5. 客户端处理和服务器端处理,哪个比较快?
  6. 返回JsonResult会导致500内部服务器错误
  7. 从服务器(任何服务器)获取当前日期和时间。仅限javascript
  8. 简单数据的最佳服务器端数据存储方法
  9. 具有iOS Swift请求时间输出的Express.js服务器

随机推荐

  1. 常用的android弹出对话框
  2. 2014.01.16(2) ——— android 关于适配的
  3. Android存储之SharedPreferences和File
  4. [gitbook] Android框架分析系列之Android
  5. Android电话秀(三)
  6. 安卓开发之去标题栏
  7. AndroidStudio3.6.3新版本遇到的坑
  8. android ndk 入门2 - 基本方法实现
  9. 安卓报错:java.lang.RuntimeException: Un
  10. android webview 截图快照