MySQL 主从复制,双机热备

一、主从复制mysql

主从复制原理:sql

mysql数据库提供了一种主从备份的机制,其实就是把主数据库的全部的数据同时写到备份的数据库中。实现mysql数据库的热备份。数据库

要想实现双机的热备,首先要了解主从数据库服务器的版本的需求。要实现热备mysql的版本都高于3.2。还有一个基本的原则就是做为从数据库的数据版本能够高于主服务器数据库的版本,可是不能够低于主服务器的数据库版本。vim

固然要实现mysql双机热备,除了mysql自己自带的REPLICATION功能能够实现外,也能够用Heartbeat这个开源软件来实现 主从复制的根本操做就是把从主服务器上所执行过的sql在从机上再执行一遍,只要两个机器的数据库初态(数据库结构,数据,配置)是同样的,那么咱们开启主从复制以后就能保证他们一直都是同样的状态。这些都是mysql本身实现的,咱们就配置一下就能够了。bash

从图中咱们能够看出来了,主服务器须要作的事情很是简单的,就只是把执行的sql语句存储到二进制文件binary-log中,而从服务器须要作的事情比较多,并且还得使用两个线程进行整个事件的监听和处理。服务器

咱们的主从复制一共分为三步:异步

master将改变记录到二进制日志(binary log)。这些记录过程叫作二进制日志事件,binary log events。 slave将master的binary log events拷贝到它的中继日志(relay log)。 slave重作中继日志中的事件,将改变应用到本身的数据库中。 MySQL复制是异步的且串行化的。 基本原则测试

因为主从复制的一些特性,为了保证数据一一致,因此这里有些原则须要遵照:ui

  • 每一个slave只有一个master
  • 每一个slave只能有一个惟一的服务器ID
  • 每一个master能够有多个salve

1.一、环境准备:编码

  • A服务器(主服务器Master):192.0.0.131

  • B服务器(从服务器Slave):192.0.0.188

  • 主从服务器的Mysql版本皆为5.6

  • 这里须要注意防火墙的3306端口要开放

  • 两台服务器数据库的数据表结构,配置都必须是同样的。

1.二、主服务器设置:

登录到主服务器的mysql,并执行以下语句建立用户,授予权限:

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON *.* TO slave@"%" IDENTIFIED BY "123456";
复制代码

修改my.cnf配置文件

log-bin=mysql-bin
server-id=1
复制代码

说明:

    1. log-bin:开启二进制日志,该日志是在事务提交时写日志文件的。默认大小是1G,后面加001,002这样的后缀顺加。
    1. server-id,惟一标识主机,mysql主从每一个mysql实例配置都不同就行。这个值默认是0,若是是0,主服务器拒绝任何从服务器的链接。

其余配置(不是必须配置的):

  • 一、binlog-do-db=db_001(主数据库配置)       #指定mysql的binlog日志记录哪一个db,配置须要同步的数据库,能够配置多个,若是没有此配置项则同步所有。

  • 二、binlog-ignore-db=mysql(主数据库配置)    #配置不一样步的数据库,能够配置多个。

  • 三、binlog_format = mixed     #配置binlog的格式

  • 四、read-only = 0                   #配置是否只读  0表明不仅读,1表明只读

  • 五、auto-increament-increment = 10    #用于设定双主状况下自增列的ID冲突使用的,主要用来设置自增步长

  • 六、auto-increment-offset = 1               #表示这台服务器的序号,从1开始,不超过auto-increament-increment

重启数据库

systemctl restart mysqld.service
复制代码

1.三、从服务器设置:

配置my.cnf

server-id=2
replicate-do-db=test
skip-slave-start=true
复制代码

注意:若是你使用的是虚拟机,并且从机是从master主机克隆出来的,那么你就须要进行这一步的操做了。

进入咱们mysql的数据库目录下:

#这是默认的地址,根据本身配置的datadir便可
cd /var/lib/mysql

vim auto.cnf
复制代码

修改里面的uuid为一个不一样的便可。

重启数据库

systemctl restart mysqld.service
复制代码

1.四、配置从服务器认主

获取binlog的信息

咱们先到主(master)服务器上获取binlog的信息,在mysql的命令界面输入:

show master status;
复制代码

这里展现的就是咱们当前主服务器使用的binlog的文件名,其中position是文件中偏移量,咱们以后配置slave须要用到这些信息,这个文件在每次服务器状态变化后都不一样

进入最关键的一步了,在进入从服务器mysql操做界面后,输入以下指令:

stop slave;          //先停步slave服务线程,这个是很重要的,若是不这样作会形成如下操做不成功,第一次设计主从的话忽略。
复制代码
change master to 
master_host='192.0.0.131',
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000002', 
master_log_pos=1472;
复制代码

这里user和password就是咱们第一步在主服务器上建立的用户名和密码,而后MASTER_LOG_FILE 就是咱们上一步查看到的master在使用的binlog文件(这个文件在每次主服务器状态变化后都不一样),MASTER_LOG_POS   就是binlog的偏移量,用于同步扫描使用。master_log_file对应File, master_log_pos对应Position。Mysql 5.x以上版本已经不支持在配置文件中指定主服务器相关选项。

执行完抛警告的话不要紧,没有异常就能够。

开启从服务器slave线程

start slave;
复制代码

查看(Slave)状态

show slave status\G;
复制代码

看到图中的两个yes,就表示咱们的从服务器已经在彻底运行了。

如今咱们能够在主服务器的数据库上作一个修改数据看看是否同步到从服务器的数据库上来证实可用性。

1.五、主从验证

由于以前数据库的数据都是同样的,如今就都新建个test 库,而且在test 库新建表 user_test.

这里须要注意两个数据库都要执行

#建立新库
CREATE DATABASE test;

#指定编码
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;

#建立新表
create table user_test( id int comment'ID',name VARCHAR(20) comment'名称', create_time timestamp DEFAULT now() comment'建立时间' );
复制代码

准备条件完成,进入测试

主库查询:

从库查询:

如今咱们在主库手动插入一条数据

use test;

insert INTO user_test value(1,"张三",NOW());
复制代码

直接查询从库看有没有数据同步

结果很明显,数据已经同步,说明咱们的主从复制的配置Ok了。

二、双机热备

实现双机热备,原理其实就是作两个机器的互相主从,咱们把上述步骤主从对调,而后作一遍就能实现了双机热备了

仍是使用上面的两台服务器,具体步骤就不写了,直接贴一下两个服务器的配置文件 my.cnf

服务器A配置:

log-bin=mysql-bin
server-id=1

# 双机热备须要添加
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2

复制代码

服务器B配置

log-bin=mysql-bin
server-id=2

# 双机热备须要添加
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2

复制代码

开始测试---------------------------------------------------->

服务器A 删除一条,查看服务器B的数据

服务器B 增长一条,删除一条,查看服务器A的数据

结果能够看到互为主从的双机热备也成功了,以上只是一个实现思路,具体的配置还得根据本身的实际状况,下面贴一些会用到的配置参数:

  • Server-id:ID值惟一的标识了复制群集中的主从服务器,所以它们必须各不相同。Master_id必须为1到232-1之间的一个正整数值,slave_id值必须为2到232-1之间的一个正整数值。

  • Log-bin:表示打开binlog,打开该选项才能够经过I/O写到Slave的relay-log,也是能够进行replication的前提。

  • Binlog-do-db:表示须要记录二进制日志的数据库。若是有多个数据能够用逗号分隔,或者使用多个binlog-do-dg选项。

  • Binglog-ingore-db:表示不须要记录二进制日志的数据库,若是有多个数据库可用逗号分隔,或者使用多binglog-ignore-db选项。

  • Replicate-do-db(从数据库配置):表示须要同步的数据库,若是有多个数据可用逗号分隔,或者使用多个replicate-do-db选项。

  • Replicate-ignore-db(从数据库配置):表示不须要同步的数据库,若是有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项。

  • Master-connect-retry:master-connect-retry=n表示从服务器与主服务器的链接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s)。若是从服务器存在mater.info文件,它将忽略些选项。

  • Log-slave-updates:配置从库上的更新操做是否写入二进制文件,若是这台从库,还要作其余从库的主库,那么就须要打这个参数,以便从库的从库可以进行日志同步。

  • skip-slave-start 从机服务器重启后slave 不会自动开始,要手动执行,防止出错

相关文章
相关标签/搜索