您好,登录后才能下订单哦!
本篇内容主要讲解“Replication主从复制机制原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Replication主从复制机制原理是什么”吧!
Replication复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。
MySQL 的主从复制原理如下:
从上层来看,复制分成三步:
Master主库在事务提交时,会把数据的更新记录作为时间Events记录在二进制日志文件Binlog中。(Dump线程 - 主库线程)
Master主库推送二进制日志文件Binlog中的日志事件到从库的并且通过写入中继日志Relay Log(I/O线程 - 从库线程)。
Slave从库 读取且重做(重放)中继日志(Relay Log) 中的事件,将改变反映它自己的数据。(SQL线程 - 从库线程)
MySQL复制的有点主要包含以下三个方面:
主库出现问题,可以快速切换到从库提供服务(提供故障切换机制)。
从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力(提高读写分离并且提高高可用和负载以及吞吐)。
从库中执行备份,以避免备份期间影响主库的服务(提高数据的安全性)。
在master 的配置文件(/usr/my.cnf)中,配置如下内容:
mysql 服务ID,保证整个集群环境中唯一
server-id=1
mysql binlog 日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin
log-bin-index = mysql-bin.index(设置二进制日志索引文件名)
binlog_format = mixed (binlog的模式)
STATEMENT:语句复制
ROW:行复制
MIXED:混和复制,默认选项
sync-binlog = 1(是否开启同步方式): 默认为0,为保证不会丢失数据,需设置为1,用于强制每次提交事务时,同步二进制日志到磁盘上。
character-set-server = utf8(字符串编码)
错误日志,默认已经开启
log-err
mysql的安装目录
basedir
mysql的临时目录
tmpdir
mysql的数据存放目录
datadir
是否只读,1 代表只读, 0 代表读写
read-only=0
忽略的数据, 指不需要同步的数据库(逗号分割)
binlog-ignore-db=mysql
指定同步的数据库
binlog-do-db=db01
执行完毕之后,需要重启Mysql:
service mysql restart;
创建同步数据的账户,并且进行授权操作:
grant replication slave on . to 'itcast'@'192.168.192.131' identified by 'itcast'; flush privileges;
为了获取一个一致性的快照,需对所有表设置读锁:
flush tables with read lock;
备份主数据库数据
主库可以停机,则直接拷贝所有数据库文件。
主库是在线生产库,可采用mysqldump备份数据,它对所有存储引擎均可使用。
mysqldump -uroot -ptiger --all-database -e --single-transaction --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql
mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql
主从数据库都是数据都是一致的,直接执行 show master status 查看日志坐标。
show master status;
File : 从哪个日志文件开始推送日志文件
Position : 从哪个位置开始推送日志
Binlog_Ignore_DB : 指定不需要同步的数据库
恢复主库的写操作:
unlock tables;
导入备份数据
mysql -uroot -p < /data/all_db.sql
在 slave 端配置文件中,配置如下内容:
mysql服务端ID,唯一
server-id=2
指定binlog日志
log-bin=/var/lib/mysql/mysqlbin
binlog_format = mixed
log-slave-updates = 0(控制 slave 上的更新是否写入二进制日志,默认为0;若 slave 只作为从服务器,则不必启用;若 slave 作为其他服务器的 master,则需启用,启用时需和 log-bin、binlog-format 一起使用,这样 slave 从主库读取日志并重做,然后记录到自己的二进制日志中;)
relay-log = mysql-relay-bin(设置中继日志文件基本名)
relay-log-index = mysql-relay-bin.index(设置中继日志索引文件名)
read-only = 1(设置 slave 为只读,但具有super权限的用户仍然可写)
slave_net_timeout = 10(设置网络超时时间,即多长时间测试一下主从是否连接,默认为3600秒,即1小时,这个值在生产环境过大,我们将其修改为10秒,即若主从中断10秒,则触发重新连接动作。)
执行完毕之后,需要重启Mysql:
service mysql restart;
执行如下指令 :
change master to master_host='192.168.2.21', master_user='repl', master_password='repl', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=120;
指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。
开启同步操作
start slave;
show slave status;
可以看到图中显示出来的:IO线程和SQL线程都处于运行状态:
Slave_IO_Running:此进程负责 slave 从 master 上读取 binlog 日志,并写入 slave 上的中继日志。
Slave_SQL_Running:此进程负责读取并执行中继日志中的 binlog 日志。
这两个进程的状态需全部为 YES,只要有一个为 NO,则复制就会停止。当 Relay_Master_Log_File = Master_Log_File 且 Read_Master_Log_Pos = Exec_Master_Log_Pos 时,则表明 slave 和 master 处于完全同步的状态。
停止同步操作
stop slave;
在主库中创建数据库,创建表,并插入数据 :
create database db01; user db01; create table user ( id int(11) not null auto_increment, name varchar(50) not null, sex varchar(1), primary key (id) ) engine = innodb default charset = utf8; insert into user(id, name, sex) values (null, 'Tom', '1'); insert into user(id, name, sex) values (null, 'Trigger', '0'); insert into user(id, name, sex) values (null, 'Dawn', '1');
在从库中查询数据,进行验证 :
在从库中,可以查看到刚才创建的数据库:
在该数据库中,查询user表中的数据:
到此,相信大家对“Replication主从复制机制原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。