MySQL主从复制详解

实验环境:
Master:version:MySQL5.5   ip:192.168.1.102
Slave: version:MySQL5.5   ip:192.168.1.103
一、复制解决的问题
1.数据分布
MySQL的复制通常不会对带宽造成很大压力,并且可以随意启动和停止。
因此对于在不同地方维护数据拷贝很有作用。
2.负载均衡
MySQL复制可以把读取分布在不同的服务器上,这对读取密集型的应用效果很好。
3.备份
复制对备份很有帮助,但是从服务器既不是备份,也不是备份的替代品。
4.高可用性和故障转移
可以采用双主的结构避免单点故障而影响存储。
可以采用多从的负载均衡避免读取故障。
5.测试MySQL升级
一个常见的实践就是把所有的服务器升级到新版本之前,使用从服务器安装MySQL升级版本,
然后用它来测试查询。确保查询按照想要的方式来工作。
二、复制如何工作
1.Master把数据更改记录到二进制日志中。这叫做二进制日志实践(Binary Log Events)。
2.Slave把Master的二进制日志事件拷贝到自己的中继日志(Relay Log)中。
3.Slave重放中继日志中的事件,把更改应用到自己的数据上。
三、创建复制
1.在每一台服务器上建立复制账号
 mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*
           -> TO shop@'192.168.1.%' IDENTIFIED BY '123qwe';
2.配置主从服务器
在主服务器上需要打开二进制日志并定义一个服务器ID。
在主服务器的MySQL配置文件/etc/mysql/my.cnf中配置如下:
server-id = 102
log_bin   = /var/log/mysql/mysql-bin
配置完成需要重启MySQL。为验证二进制文件已被创建,
可以运行SHOW MASTER STATUS命令进行查看,如图所示:


从服务器也需要和主服务器类似的配置,并且也需要在从服务器上重启MySQL。
server-id         = 103
log_bin           = /var/log/mysql/mysql-bin
relay_log         = /var/log/mysql/mysql-relay-bin
log_slave_updates = 1
read_only         = 1
从服务器一般是不需要开启二进制日志文件的,开启之后我们可以把从服务器变为主服务器。
但必须同时开启log_slave_updates(使从服务器把复制的事件记录到自己的二进制日志中)。
这样做的好处可以使从服务器成为其他服务器的主服务器。
3.启动复制
使用CHANGE MASTER TO命令,这个命令完全代替了相应的my.cnf命令。
此命令可以让你在以后把从服务器指向不同的主服务器,并且不用停止服务。
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.102',
          -> MASTER_USER='shop', MASTER_PASSWORD='123qwe';
配置好此命令后就可以查看从服务器的状态了。

Slave_IO_State、Slave_IO_Running和Slave_SQL_Running列显示从服务进程没有运行。
运行START SLAVE命令后再次查看:


从服务器IO线程和SQL线程正在运行,这意味着它已经提取了主服务器的二进制日志。
表示一些事件已经被提取并执行。如果在主服务器上做一些更改,在从服务器上可以
看到数据的更改。

Master:


Slave:


还可以在主从服务器的进程列表中看到复制线程。
在主服务器上可以看到从服务器IO线程创建的连接:


在从服务器上可以看到两个线程。一个是IO线程,另外一个是SQL线程。


这些线程总是运行在system user账户下,其余列的值会不同。
例如当SQL线程正在重放事件的时候,Info列将会显示正在执行的语句。
IO线程的Time代表运行的时间,SQL线程的Time代表空闲的时间。

4.复制文件
mysql-bin
二进制文件
mysql-bin.index
开启了二进制日志的服务器有一个和二进制文件同名,但后缀是.index。
该文件记录了磁盘上的二进制日志文件。文件中的每一行包含了二进制
日志文件的文件名。
mysql-relay-bin
中继日志,复制主服务器上的二进制文件,用以在从服务器上进行回放。
mysql-relay-bin.index
这个文件是中继日志的索引文件,作用和二进制文件的索引文件相同。
master.info
这个文件包含了从服务器连接主服务器的信息,不能删除。
否则从服务器在重启之后就不知如何连接主服务器。
relay-log.info
该文件包含了从服务器当前二进制日志和中继日志的坐标,例如从服务器在主服务器的位置。
此文件同样不能删除,否则从服务器在重启之后就会忘记复制的位置,并有可能重复复制。
5.复制过滤
复制过滤可以只复制一部分数据。有两种过滤器:
第一种是主服务器上把事件从二进制日志中过滤掉的过滤器。
binlog_do_db
binlog_ignore_db
第二种是从服务器上把事件从中继日志中过滤掉的过滤器。
在从服务器上,replicate_*在从服务器SQL线程从中继日志读取事件的时候进行过滤。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值