MySQL双机热备份配置
双机热备份,即能够把主数据库中所有的数据同时写到备份的数据库中,从而实现MySQL数据库的热备份。
MySQL Replication是MySQL提供的一种主从备份的机制,并且整个复制备份过程是异步进行的,其高效的性能设计,也让复制的延时非常小。
MySQL复制功能在实际的应用场景中被广泛的应用于保证数据系统数据的安全性和扩展设计中。
一、MySQL Replication设计原理
MySQL的复制(replication)是一个异步的复制,从一个MySQLinstance(称为Master)复制到另一个MySQLinstance(称为Slave)。
整个复制操作主要由三个进程完成,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在Master(IO进程)上。
要实施复制,首先必须打开Master端的binarylog(bin-log)功能,否则无法实现。整个复制过程就是Slave从Master端获取该日志后再在自己身上完全顺序的执行日志中所记录的各种操作。
复制的基本过程如下:
1、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2、Master接收到来自Slave的IO进程请求后,通过负责复制的IO进程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回信息已经到Master端的bin-log文件的名称以及bin-log的位置。
3、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的某个位置开始往后的日志内容,请发给我”。
4、Slave的Sql进程监测到relay-log中新增加了内容后,会马上解析relay-log的内容成为Master端真实执行时候的那些可执行的内容,并在自身执行。
二、MySQL Replication详细配置
2.1 系统环境
主服务器和从服务器使用的操作系统和数据库版本都是相同的,具体信息如下所示:
2.1.1主服务器(Master)
1、操作系统:Ubuntu16.04 64位;
2、MySQL版本:5.7.25,for Linux(x86_64)
3、IP:192.168.0.1
2.1.2从服务器(Slave)
1、操作系统:Ubuntu16.04 64位;
2、MySQL版本:5.7.25,for Linux(x86_64)
3、IP:192.168.0.2
2.1.3 数据库相关配置
MySQL安装后,在主服务器和从服务器上,创建相同的数据库和表。
创建数据库:
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;
此时已经创建了数据库名为my_db的库:
在my_db库中创建测试版:
create table tb_mobile( mobile VARCHAR(20), time timestamp DEFAULT now());
此时数据库my_db中已经创建了tb_mobile表:

主服务器和从服务器,数据库和表的创建是一样的,所以从服务器上也如上所示创建my_db数据库和tb_mobile表。
2.2 主服务器Master配置
2.2.1 创建同步用户
进入mysql操作界面,在主服务器上为从服务器建立一个连接账户,该账户必须授予Replication Slave权限。
首先登录mysql,指令为:mysql –uroot –p,
输入密码后,进入mysql操作界面,输入grant指令:
grant replication slave on *.* to 'replicate'@'192.168.0.2' identified by '123456';
如下图所示:

其中replicate为账号,192.168.0.2表示具体slave的IP,这样只要账号和密码正确,则能够登录到主服务器数据库。
打开从服务器(Slave)终端 ,输入以下命令:
mysql –h192.168.0.2–ureplicate –p
输入密码后,出现如下图所示,则表示连接成功,能够进行双机热备份:

注:创建同步用户时,出现了错误,具体错误及解决方法,见下方第三部分说明。
2.2.2 修改mysql配置文件
首先找到mysql配置的目录,mysql默认安装在/etc目录下面,这里默认安装在/etc/mysql目录。在mysql目录下,可以看到相关的配置文件my.cnf,
打开后,文件内容如下:

按照上面引用的路径在/etc/mysql/mysql.conf.d目录下,找到配置文件mysqld.cnf,然后修改此文件下的[mysqld]如下所示:
[mysqld]
server-id = 1 //唯一的id
log_bin = /var/log/mysql/mysql-bin.log //本来就有,可以不动
binlog_do_db = my_db //记录日志的数据库,有多个库可以继续添加
binlog_ignore_db = mysql //不记录日志的数据库
2.2.3 重启mysql服务
修改完文件,保存后,重启一下MySQL服务,命令为:Service mysql restart
2.2.4 查看主服务器状态
进入mysql服务器,可以查看Master状态,输入以下命令:
Show master status\G
具体如图所示:

其中File和Position,在从服务器(Slave)配置主从关系会用到;Binlog_Do_DB是要记录日志的数据库,Binlog_Ignore_DB是不记录日志的数据库,这两个参数在mysqld.cnf中配置。
注:操作完此步骤后不再改变主服务器MySQL,防止主服务器在状态值变化。
2.3 从服务器Slave配置
这里以主—从方式实现mysql双机热备,所以不需要在从服务器创建同步账户了,直接打开配置文件相关相关参数即可,同样是修改mysqld.cnf文件。
2.3.1 修改配置文件
打开mysqld.cnf文件,修改[mysqld]下的参数:
[mysqld]
server-id = 2
log-bin=/var/log/mysql/mysql-bin.log //原有存在的,不需更改
replicate-do-db = my_db
replicate-ignore-db = mysql,information_schema,performance_schema
2.3.2 重启mysql服务
修改配置文件,保存后,重启一下mysql服务:Service mysql restart
2.3.3用change master 语句指定同步位置
在进入mysql 操作界面后,输入以下命令进行关联:
change master to master_host='192.168.0.1',master_user='replicate',master_password='123456',master_log_file=' mysql-bin.000006 ',master_log_pos=1322;
输入命令 如下:

发生错误,如下图所示:

上图所示,提示要先停止slave服务器线程。
使用命令:stop slave 停止。

然后再输入上面change to命令,就可以配置成功。
注:master_log_file, master_log_pos由主服务器(Master)查出的状态值中确定。也就是刚刚叫注意的。master_log_file对应File, master_log_pos对应Position。Mysql 5.x以上版本已经不支持在配置文件中指定主服务器相关选项。
最后,输入指令:start slave,至此从服务器(Slave)配置完成。
2.3.4 查看服务器状态
使用命令show slave status\G,具体如下:

查看下面两项值均为Yes,即表示设置从服务器成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
2.4 测试同步
在主服务器(Master)192.168.0.1的数据库my_db的tb_mobile表插入一条数据,
然后看从服务器(Slave)192.168.0.2上相应的表中是否也更新了这条数据。
主服务器(Master)192.168.0.1

从服务器(Slave)192.168.0.2

可以看到主服务器和从服务器的tb_mobile表都是空的。
接下来,在主服务器tb_mobile表中插入一条数据,如下图所示:
主服务器(Master)192.168.0.1

主服务器显示表tb_mobile中成功插入了一条数据。
然后看从服务器(Slave)192.168.0.2:

从上图可以看到,从服务器上的表tb_mobile中已经同步了一条与主服务器中一模一样的数据。
至此,双机热备操作完成。
三、错误解决方法
3.1 此次配置,在2.2.1 创建同步用户时遇到一个问题,在输入mysql -h192.168.0.1 -ureplicate -p时,出现错误,如下所示:

解决方法:
[mysqld]
bind_address=127.0.0.1
把这行注释掉 #bind_address=127.0.0.1
3.2 其他可能情况
以下为网友遇到的其他解决情况。
1、网络连接问题
远程ping xxx.xxx.xxx.xx ,能ping通,排除此情况
[mysql@vvmvcs0 ~]$ ping xxx.xxx.xxx.xx
2、主服务器(Master)上my.cnf配置问题
排查可能由于主服务器(Master)上my.cnf里配置了skip_networking或者bind_address,只允许本地socket连接
2.1 在[mysqld]下设置skip_networking,
知识说明: 这使用MySQL只能通过本机Socket连接(socket连接也是本地连接的默认方式),放弃对TCP/IP的监听
当然也不让本地java程序连接MySQL(Connector/J只能通过TCP/IP来连接)。
2.2 可能使用了bind_address=127.0.0.1(当然也可以是其他ip)
[mysqld]
bind_address=127.0.0.1
请把这行注释掉 #bind_address=127.0.0.1
3、DNS解析问题
检查是否设置了: skip_name_resolve。 这个情况肯定不可能,因为我用的是ip,不是主机名。
[mysqld]
skip_name_resolve
知识说明:这个参数加上后,不支持主机名的连接方式。
4、用户和密码问题
其实用户和密码的错误,不会出现111的,所以排除用户密码问题
ERROR 1045 (28000): Access denied for user 'root'@'XXXX' (using password: YES)
5、检查—port问题
有可能85的MySQL port不是默认3306, 这样我远程连接时,没有指定--port,用的是3306, 而85上没有对3306进行监听。
netstat -nplt | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 11107/mysqld
测试连接: mysql -u root -p -h xxx.xxx.xxx.85 --port 3306
6、防火墙问题
检查防火墙状态
[root@iZ288zn7gymZ ~]# service iptables status
MySQL双机热备份配置的更多相关文章
- MYSQL双机热备份的配置实施(问题总结)
为了实现MYSQL数据库的冗灾.备份.恢复.负载均衡等功能,喻名堂这两天一直在学习和研究mysql的双机热备,其实MYSQL的双机热备就是使用MYSQL同步功能两种方式里面的“主-主”同步方式实现的. ...
- MySQL双机热备份
系统: CentOS release 6.6 (Final) MySQL: mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) ...
- mysql双机热备份的实现步骤
MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾.备份.恢复.负载均衡等都是有极大帮助的.本文描述了常见的同步设置方法.<?xml:namespace prefix = o /> ...
- CentOS系统MySQL双机热备配置
1 概述 在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux.Windows以及UNIX.其中Linux备受青睐的主要原因有两个: 首先,Linux作为自由软件有两个 ...
- MySQL数据库双机热备份
MySQL数据库双机热备份 1.mysql 数据库没有增量备份的机制 当数据量太大的时候备份是一个很大的问题.还好 mysql 数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备 ...
- 学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践
双机热备的概念简单说一下,就是要保持两个数据库的状态 自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换 ...
- Mysql的热备份[转载]
学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始 ...
- mysql双机热备的实现
转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...
随机推荐
- 「APIO 2019」桥梁
题目 三天终于把\(APIO\)做完了 这题还是比较厉害的,如果不知道这是个分块应该就自闭了 考虑一个非常妙的操作,按照操作分块 我们设一个闸值\(S\),把\(S\)个边权修改操作分成一块,把所有的 ...
- POJ 1584 /// 判断圆(点)在多边形内 判断凸包
题目大意: 给定n,n边形 给定圆钉的 半径r 和圆心(x,y) 接下来n行是n边形的n个顶点(顺时针或逆时针给出) 判断n边形是否为凸包 若不是输出 HOLE IS ILL-FORMED 判断圆心和 ...
- 【Oracle】如何在查询视图时使用索引
通常我们使用hint来固定查询计划选择走表的索引 固定表的连接等等,但是如果第一层查询的是视图呢? yang@rac1>CREATE TABLE TA (ID NUMBER, NAME VARC ...
- java 测试时 程序的 运行时间
检测一个JAVA程序的运行时间方法:long startTime = System.currentTimeMillis();//获取当前时间//doSomeThing(); //要运行的java程 ...
- Java开发系列-Cookie与Session会话技术
概述 会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一 ...
- Matlab神经网络验证码识别
本文,将会简述如何利用Matlab的强大功能,调用神经网络处理验证码的识别问题. 预备知识,Matlab基础编程,神经网络基础. 可以先看下: Matlab基础视频教程 Matlab经典教程--从 ...
- Luogu P3802 小魔女帕琪(期望)
P3802 小魔女帕琪 题意 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组 ...
- 中国剩余定理模数互质的情况模板(poj1006
http://poj.org/problem?id=1006 #include <iostream> #include <cstdio> #include <queue& ...
- Java 生成pdf表格文档
最近在工作做一个泰国的项目,应供应商要求,需要将每天的交易生成pdf格式的报表上传到供应商的服务器,特此记录实现方法.废话不多说,直接上代码: THSarabunNew.ttf该文件是泰国字体自行网上 ...
- 如何使用C++获取 进程的 绝对路径
DWORD GetProcessId(IN PCHAR szExeName) { DWORD dwRet = 0; DWORD dwCount = 0; HANDLE hSnapshot = Crea ...