一主一从:一个 master,一个 slave
一主多从:一个 master,多个 slave
具体,参考下图:
实现细节mysql 在主从同步时,其底层实现细节又是什么?为此后分析主从延迟原因以及优化方案,做好理论准备。
总结来说,mysql 的主从复制:异步单线程。
master上 1 个io线程,负责向slave传输 binary log(binlog)
slave上 2 个线程:io 线程和执行sql的线程,其中:
io线程:将获取的日志信息,追加到relay log上;
执行sql的线程:检测到relay log中内容有更新,则在slave上执行sql;
特别说明:mysql 5.6.3 开始支持「多线程的主从复制」,一个数据库一个线程,多个数据库可多个线程。
完整的 master & slave 之间主从复制过程:
二、增加一个slave需求:目前我的master上有一个数据库ucenter,需要为其增加一台slave(目前有一台slave)
分析:
我这里有一个前一天的4:00的数据库备份。
有一台已存在的ucenter的slave
重点是寻找binlog的时间点
操作:
1、在slave机器上配置slave信息,修改mysql.cfg配置并重启slave数据库
在[mysqld]中添加
replicate-do-db = ucenter #同步的数据库名字slave-skip-errors=all #同步是忽略错误server-id = 1112 #和master与其他slave保持不通
2、查找数据库前一天的备份,将其copy到新增的slave机器上,并导库
[root@ucenter_slave /data]# mysql ucenter < ucenter_20171102.sql[root@ucenter_slave /data]# du -sh ucenter_20171102.sql 24g ucenter_20171102.sql
3、定位binlog时间戳(重点)
在master上查找binlog
[root@ucenter /data/mysqldata]# ll -t *bin*-rw-rw---- 1 mysql mysql 30709744 nov 2 21:32 mysql-bin.000268-rw-rw---- 1 mysql mysql 171 nov 2 19:41 mysql-bin.index-rw-rw---- 1 mysql mysql 1021101094 nov 2 19:41 mysql-bin.000267-rw-rw---- 1 mysql mysql 1073742415 oct 30 06:07 mysql-bin.000266-rw-rw---- 1 mysql mysql 1073742062 oct 26 12:03 mysql-bin.000265-rw-rw---- 1 mysql mysql 1073742636 oct 22 19:21 mysql-bin.000264-rw-rw---- 1 mysql mysql 1073741961 oct 18 22:49 mysql-bin.000263-rw-rw---- 1 mysql mysql 1073742141 oct 15 12:47 mysql-bin.000262-rw-rw---- 1 mysql mysql 1073742284 oct 11 10:18 mysql-bin.000261-rw-rw---- 1 mysql mysql 1073742184 oct 7 09:49 mysql-bin.000260
我的备份时间是2号4点开始,所以应该在mysql-bin.000267里查找2号4点前的pos,开始定位
[root@ucenter /data/mysqldata]# /usr/local/mysql/bin/mysqlbinlog mysql-bin.000267 |grep '3:59:' |grep -v '13:59:'#171102 3:59:58 server id 21323 end_log_pos 824385760 query thread_id=3023086382 exec_time=0 error_code=0#171102 3:59:58 server id 21323 end_log_pos 824386335 query thread_id=3023086386 exec_time=0 error_code=0#171102 3:59:58 server id 21323 end_log_pos 824386363 intvar#171102 3:59:58 server id 21323 end_log_pos 824386698 query thread_id=3023086386 exec_time=0 error_code=0#171102 3:59:58 server id 21323 end_log_pos 824387706 query thread_id=3023086388 exec_time=0 error_code=0#171102 3:59:58 server id 21323 end_log_pos 824387734 intvar#171102 3:59:58 server id 21323 end_log_pos 824388209 query thread_id=3023086388 exec_time=0 error_code=0#171102 3:59:58 server id 21323 end_log_pos 824388534 query thread_id=3023086398 exec_time=0 error_code=0
所以定位到最后 end_log_pos 824388534
4、在另外一台slave上查看master.info
[root@ledupass02/data/mysqldata]# cat master.info 15mysql-bin.00026811367810192.168.100.70omsyncom@123330660000
5、在slave 配置slave,进行同步
在slave上配置相关设置,以便告诉slave如何去连接master,这包括主机地址,登陆凭证等等
[root@ucenter_slave /data]# mysqlwelcome to the mysql monitor. commands end with ; or \g.your mysql connection id is 6server version: 5.1.51-community-server-log sourcecopyright (c) 2000, 2010, oracle and/or its affiliates. all rights reserved.this software comes with absolutely no warranty. this is free software,and you are welcome to modify and redistribute it under the gpl v2 licensetype 'help;' or '\h' for help. type '\c' to clear the current input statement.mysql (none)>change master to master_host='192.168.100.70',master_port=3306,master_user='omsync',master_password='om@123',master_log_file='mysql-bin.000267',master_log_pos=824388534;
开启slave
mysql (none)>start slave;
查看slave状态:
以上就是mysql增加从库的方法是什么的详细内容。