MySQL主从复制原理及配置
来源:互联网 发布:摩尔定律失效 知乎 编辑:程序博客网 时间:2024/06/18 11:02
复制的基本原理
MySQL复制是异步的切串行化的。首先,master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件(binary log events)。slave将master的binary log events拷贝到它的中继日志(relay log), slave重做中继日志中的事件,将改变应用到自己的数据库中。复制最大的问题就是造成了延时。
复制的基本原则
每个slave只有一个master。
每个slave只能有一个唯一的服务器ID。
每个master可以有多个slave。
另外,应保持主从mysql版本的一致。
一主一从常见配置
修改主机my.ini配置文件
服务器唯一ID,例如:sverver-id = 1。
启动二进制日志(log-bin=自己本地的路径/mysql-bin)
基本上配置这两项就可以了,下面还有一些可选的配置项。
根目录:basedir=”自己本地MySql安装路径”,例如,basedir=”D:/mySoft/MySQLServer5.5/”。
临时目录:basedir=”自己本地MySql安装路径”。
数据目录:datadir=”自己本地MySql安装路径/Data/”,例如,datadir=”D:/mySoft/MySQLServer5.5/Data/”
read-only=0,表示主机读写都可以。
设置不要复制的数据库:binlog-ignore-db=mysql。
设置需要复制的数据库:binlog-do-db=数据库名称。
从机配置文件修改
Slave的配置与master类似,server_id是必须的,而且唯一。slave可以开启二进制日志,但是没有必要。
注意,我们修改了配置文件之后,需重启mysql服务,然后关闭防火墙。Windows系统上可手动关闭防火墙,Linux上可以使用命令(service iptables stop)关闭。
建立账户并授权slave
在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。
命令如下:
mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'zhangsan'@’10.100.0.200’ IDENTIFIED BY ‘12345’;
建立一个帐户zhangsan,并且只能允许从10.100.0.200这个地址上来登陆,密码是12345。
执行上面命令后,再执行flush privileges;命令,刷新一下mysql配置。
再接着运行SHOW MASTER STATUS;,输出如下:
这表示我们要从哪个文件的哪个位置开始复制,这些信息后面我们马上要配置到slave中。
配置需要复制的服务器
接下来就是让slave连接master,并开始重做master二进制日志中的事件。在从机上执行下面的命令:
次命令中的具体数字以及值就是上面通过SHOW MASTER STATUS命令查看得到的,执行命令时我们应填上相应的具体值。
紧接着我们使用start slave;启动从服务的复制功能。
最后,使用SHOW SLAVE STATUS语句来查看slave的设置是否正确:
在这里主要是看:
- Slave_IO_Running=Yes
- Slave_SQL_Running=Yes
这两项必须为Yes,否则需要重新配置。
至此,我们的配置就完成了。注意,如果配置出现问题需要重新配置,那么我们可能需要使用命令(stop slave;)来停止从服务器的复制功能。
添加新slave服务器
如果我们想对新安装的slave进行数据同步。此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。Slave与master同步时,需要三样东西:
master的某个时刻的数据快照;
master当前的日志文件、以及生成快照时的字节偏移。这两个值确定了一个二进制日志的位置。如前面所述,你可以用SHOW MASTER STATUS命令找到这两个值;
- master的二进制日志文件。
可以通过以下几中方法来克隆一个slave:
冷拷贝(cold copy):停止master,将master的文件拷贝到slave;然后重启master。
热拷贝(warm copy):如果你仅使用MyISAM表,你可以使用mysqlhotcopy拷贝,即使服务器正在运行。
使用mysqldump,使用mysqldump来得到一个数据快照可分为以下几步:
锁表:如果你还没有锁表,你应该对表加锁,防止其它连接修改数据库,否则,你得到的数据可以是不一致的。如:mysql> FLUSH
TABLES WITH READ LOCK;在另一个连接用mysqldump创建一个你想进行复制的数据库的转储: shell> mysqldump –all-databases –lock-all-tables >dbdump.db
对表释放锁。mysql> UNLOCK TABLES;
最后,关于5.6以后版本mysql的主从复制配置稍有不同,可以参看这里。
- 【MySQL】主从复制原理及配置
- Mysql主从复制原理及配置
- mysql主从复制原理及配置步骤
- Mysql主从复制原理及配置
- MySQL主从复制原理及配置
- MySQL主从复制原理及基本配置
- Mysql主从复制原理及配置
- Mysql主从复制原理及配置
- MySQL主从复制原理及配置
- Mysql主从复制原理及配置
- mysql主从复制的原理及配置实现
- mysql主从复制的原理及配置实现
- Mysql主从架构的复制原理及配置详解 .
- mysql 主从架构的复制原理及配置详解
- 主从 mysql (master slave) 复制原理及配置
- Mysql主从架构的复制原理及配置
- MySQL主从复制的原理及配置方法
- CentOS6.5下Mysql的主从复制原理及配置
- [bzoj2152]:聪聪可可(点分治)[洛谷P2634]
- Qt Quick 和qml介绍
- shell总结:进程、环境变量、文件权限
- 大型网站架构之分布式消息队列
- ThinkPHP集成App支付(微信,支付宝)
- MySQL主从复制原理及配置
- 线程池的基本使用
- java中数组常用方法总结
- java中的基本类
- 【设计模式】-抽象工厂
- POJ1009:Edge Detection
- 线程
- 基于ssm框架的个人博客(7)--博客类别管理(增、删、改、刷新)
- linux编译ko文件(不同内核源码版本)