麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
864
2023-07-07
MYSQL增加从库的方法是什么
一、MySQL主从复制
常见的主从架构:
一主一从:一个 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, *** 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状态:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。