概述
复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志文件重新执行,从而得从库和主库的数据保持同步
mysql支持一台主库同时向多台从库进行复制,从库同时也可以作为其他服务器的主库,实现链状复制
原理
1、Master主库在事务提交时,会把数据变更作为时间Events记录在二进制日志文件Binlog中
2、主库推送二进制日志文件Binlog中的日志事件到从库中继日志Relay Log
3、slave重做中继日志的事件,将改变反映它自己的数据
优势
主库出现问题,能快速切换到从库提供服务
主库进行更新,从库进行查询,实现读写分离,降低主库访问压力
可以在从库中执行备份,避免备份期间影响主库的服务
搭建
配置master
在master的配置文件my.cnf中配置
#mysql服务id,保证整个集群环境中唯一
server-id=1
#mysql binlog日志的存储路径和文件名
log-bin=/usr/local/mysql/mysqlbin
#是否只读 1代表只读,0代表读写
read-only=0
#忽略的数据,指不需要同步的数据库,mysql是管理
binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01
重启mysql: service mysql restart;
创建同步数据的账户,并且进行授权操作
grant replication slave on *.* to 'username'@'172.16.228.105' identified by 'username';
flush privileges;
查看master状态 show master status;
File:从哪个日志文件开始推送日志文件
Position:从哪个位置开始推送日志
Binlog_Ignore_DB:指定不需要同步的数据库
配置slave
在slave配置文件中配置
#mysql服务端ID,唯一
server-id=2
#指定binlog日志
log-bin=/usr/local/mysql/mysqlbin
配置完成后重启Mysql:service mysql restart;
执行命令
#指定连接的主库
change master to master_host= '172.16.xxx.xxx' , master_user='masterSynusername' ,master_password='masterSynuserpassword'
#指定binlog日志文件及偏移量
master_log_file='mysqlbin.000001' , master_log_pos=413;
开启同步操作
start slave;
show slave status\G;
#关注这两项
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
停止同步
stop slave;