linux复盘:mysql主从

2018-02-03 10:42:12来源:oschina作者:历经35天的选择人点击

分享

MySQL主从又叫做Replication、AB复制。


简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。MySQL主从是基于binlog的,主上须开启binlog才能进行主从。



为什么要做主从复制? 我想这是要在实施以前要想清楚的问题。是为了实现读写分离,减轻主库负载或数据分析? 为了数据安全,做备份恢复?主从切换做高可用? 大部分场景下,以上三个问号一主一从都能够解决,而且任何生产环境都建议你至少要有一个从库,假如你的读操作压力特别大,甚至要做一主多从,还可以不同的slave扮演不同的角色,例如使用不同的索引,或者不同的存储引擎,或使用一个小内存server做slave只用于备份。(当然slave太多也会对master的负载和网络带宽造成压力,此时可以考虑级联复制,即 A->B->C )


还有需要考虑的是,一主一从,一旦做了主从切换,不通过其它HA手段干预的话,业务访问的还是原IP,而且原主库很容易就作废了。于是 主-主 复制就产生了,凭借各自不同的 server-id ,可以避免 “A的变化同步到B,B应用变化又同步到A” 这样循环复制的问题。但建议是,主主复制,其中一个主库强制设置为只读,主从切换后架构依然是可用的。


复制过程是slave主动向master拉取,而不是master去推的,所以理想情况下做搭建主从时不需要master做出任何改变甚至停服,slave失败也不影响主库。



使用场景:


数据备份,主写数据,从上存数据备份


web客户端在从上读数据,不能在从上写,分担主库读的压力



主将更改操作记录到binlog中
从将主的binlog事件(SQL语句)同步到本机并记录在relaylog中
从根据relaylog里面的SQL语句按顺序执行

说明:该过程有三个线程,主上有一个log dump线程,用来和从的i/o线程传递binlog;从上有两个线程,其中i/o线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的SQL语句落地。



配置主master:


vim /etc/my.cnf#增加如下内容
erver-id=131#数字自己定义,和奇偶有关系后面双主也要注意这里
log_bin=quyifan1#指定log前缀
/etc/init.d/mysqld restart
ls -lt /data/mysql/#查看mysql库文件,多了两个quyifan1为前缀的文件,此文件非常重要必须生产
mysqldump -uroot zrlog > /tmp/zrlog.sql #准备一个数据库
mysql -uroot -e "create database quyifan" #创建一个库
mysql -uroot quyifan < /tmp/zrlog.sql #把准备的数据恢复到这个新库中
grant replication slave on *.* to 'repl'@192.168.153.132 identified by 'password';
#创建一个用来同步的用户,关键所在
flush tables with read lock; #锁定数据包,暂时无法写入保持现有状态用于同步
show master status; #记录两个关键数据file和position,为后面backup做准备

配置从backup:


vim /etc/my.cnf
server-id=132#这里和主划分开,数字奇偶性
/etc/init.d/mysqld restart
scp 192.168.153.131:/tmp/*.sql /tmp/
#把主上数据同步到从上超级重要,数据不一致会非常麻烦(ps这里不是太理解为何不只是传输上面备份的数据库就可以呢)
create database quyifan; #从上也创建相同的库
mysql -uroot quyifan < /tmp/zrlog.sql #把准备好的数据恢复备份到库中
☆☆☆☆☆☆☆☆☆☆☆
stop slave; #停止复制
change master to master_host='主IP', master_user='repl', master_password='123456', master_log_file='主file内容', master_log_pos=Position的数字;
#这条重点,用到了主上创建的那个用户和主上最后得到的数据
start slave; #恢复复制
show slave status/G #检查如下部分确定主从搭建完成
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
econds_Behind_Master: 0#为主从延迟的时间
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
都成功了,别急啊兄弟,回主上把锁定的包恢复锁定!!!
unlock tables;
好了主从到这里下面的更精彩

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台