MySQL复制的概述、安装、故障、技巧、工具
来源:Asp之家 发布时间:2011-04-11 08:36:00
同MongoDB,Redis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂!
概述
首先主服务器把数据变化记录到主日志,然后从服务器通过I/O线程读取主服务器上的主日志,并且把它写入到从服务器的中继日志中,接着SQL线程读取中继日志,并且在从服务器上重放,从而实现MySQL复制。具体如下图所示:
MySQL复制
整个过程反映到从服务器上,对应三套日志信息,可在从服务器上用如下命令查看:
mysql> SHOW SLAVE STATUS;
Master_Log_File & Read_Master_Log_Pos:下一个传输的主日志信息。
Relay_Master_Log_File & Exec_Master_Log_Pos:下一个执行的主日志信息。
Relay_Log_File & Relay_Log_Pos:下一个执行的中继日志信息。
理解这些日志信息的含义对于解决故障至关重要,后文会详细阐述。
安装
先在主服务器上创建复制账号:
mysql> GRANT REPLICATION SLAVE ON *.*
TO '<SLAVE_USER>'@'<SLAVE_HOST>'
IDENTIFIED BY '<SLAVE_PASSWORD>';
注:出于安全性和灵活性的考虑,不要把root等具有SUPER权限用户作为复制账号。
然后设置主服务器配置文件(缺省:/etc/my.cnf):
[mysqld]
server_id = 100
log_bin = mysql-bin
log_bin_index = mysql-bin.index
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
innodb_support_xa = 1
注:一定要保证主从服务器各自的server_id唯一,避免冲突。
注:如果没有指定log_bin的话,缺省会使用主机名作为名字,如此一来一旦主机名发生改变,就会出问题,所以推荐指定log_bin(从服务器的relay_log存在一样的问题)。
注:sync_binlog,innodb_flush_log_at_trx_commit,innodb_support_xa三个选项都是出于安全目的设置的,不是复制的必须选项。
接着设置从服务器配置文件(缺省:/etc/my.cnf):
[mysqld]
server_id = 200
log_bin = mysql-bin
log_bin_index = mysql-bin.index
relay_log = mysql-relay-bin
relay_log_index = mysql-relay-bin.index
read_only = 1
skip_slave_start = 1
log_slave_updates = 1
注:如果用户有SUPER权限,则read_only无效。
注:有了skip_slave_start,除非使用START SLAVE命令,否则从服务器不会开始复制。
注:设置log_slave_updates,让从服务器记录日志,有助于在必要时把从切换成主。
下面最重要的步骤是如何克隆一份主服务器的数据:
如果数据库使用的是MyISAM表类型的话,可按如下方式操作:
shell> mysqldump --all-databases --master-data=1 > data.sql
注:master-data选项缺省会打开lock-all-tables,并写入CHANGE MASTER TO语句。
如果数据库使用的是InnoDB表类型的话,则应该使用single-transcation:
shell> mysqldump --all-databases --single-transaction --master-data=1 > data.sql
有了数据文件,传输到从服务器上并导入:
shell> mysql < data.sql
如果数据量很大的话,mysqldump会非常慢,此时直接拷贝数据文件能节省不少时间:
在拷贝之前要先锁定数据,然后再获得相关的日志信息(FILE & POSITION):
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
接下来拷贝数据文件时,如果是MyISAM表类型的话,直接拷贝即可;如果是InnoDB表类型的话,一定要先停止MySQL服务再拷贝,否则拷贝文件可能无法使用。把拷贝的数据文件直接复制到从服务器的数据目录。
猜你喜欢
- 蜗牛很慢。蜗牛快递会怎样?答案是:当然也会很慢。但是蜗牛尽了他的全力,为了它的兔子朋友,以生命在奔跑。每天都是24个小时,快的只是速度,却不
- mysql中using的用法为:using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条
- SessionMiddleware 激活后,每个传给视图(view)函数的第一个参数``HttpRequest`` 对象都有一个 sessi
- 本文实例讲述了python打开文件并获取文件相关属性的方法。分享给大家供大家参考。具体分析如下:下面的代码通过open函数打开文件,并输出文
- 统计分析常常会出错、存在偏见或过于狭隘。数字崇拜者常因专注于统计分析而把可用性研究引入歧途。强调洞察力和定性研究更为重要。用户研究有两种类型
- 用re或者string.find.以下是re代码import re#文本所在TXT文件file = '123.txt'#关键
- 引言少年,你在怀着非法的心态看一篇简短的硬核科普!先抛问题:如何杀掉一个正在等待 TCP 连接的 Thread?由于众所周知的原因,在国内使
- 一、PyTorch 检查模型梯度是否可导当我们构建复杂网络模型或在模型中加入复杂操作时,可能会需要验证该模型或操作是否可导,即模型是否能够优
- 1.我们看到字典形式的数据如下所示list=[["2891-1", "D"],["2892
- 在开发中我们经常遇到这样的需求,需要用户登录后才可以访问该页面,如果用户没有登录点击该页面时则自动跳转到登录页面,登录后又跳转到链接的页面而
- 前言通过pandas的使用,我们经常要交互式地展示表格(dataframe)、分析表格。而表格的格式就显得尤为重要了,因为大部分时候如果我们
- 在PHP界谈模板引擎,必不可免的要拿Smarty开刀, 这个无比傻帽的却又带有一点点官方色彩的模板引擎, 如果没有我这样人富有正义感又富有创
- 使用 sorted() 函数使用 sorted() 函数对字典进行排序,将其转换为元组列表,再按照指定的键或者值进行排序。按照键排序的示例代
- 本文实例讲述了JS实现淘宝支付宝网站的控制台菜单效果。分享给大家供大家参考。具体如下:这是一款支付宝网站中的控制台总菜单,可实现动画效果的显
- 前言最近有人问我装饰器是什么,我就跟他说,其实就是装饰器就是类似于女孩子的发卡。你喜欢的一个女孩子,她可以有很多个发卡,而当她戴上不同的发卡
- 一、旧式的字符串格式化% 操作符参考以下示例:>>> name = "Eric">>>
- 前言今天的文章比较基础,但却是必须掌握的,而且本文有些内容,也许你之前没想过。希望这篇文章能够让你理解环境变量并掌握 Go 环境变量相关操作
- 本文实例讲述了Python计算两个日期相差天数的方法。分享给大家供大家参考,具体如下:#!/usr/bin/pythonimport tim
- 在安装mha4mysql时,大概步骤是:解压,perl Makefile.PL,make, make install。在执行 perl Ma
- 学习关键语句:vue连接mysql数据库vue项目连接后台数据库配置vue通过node连接MySQL数据库写在前面为了快速学习nodejs制