Mysql主从复制搭建步骤
发布时间:2022-01-20 14:18:10 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要讲解了Mysql主从复制搭建过程,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习Mysql主从复制搭建过程吧! 一、相关概念 mysql主从复制的官方概念可自行百度,在这里谈一下个人理解以及它和Data
这篇文章主要讲解了“Mysql主从复制搭建过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql主从复制搭建过程”吧! 一、相关概念 mysql主从复制的官方概念可自行百度,在这里谈一下个人理解以及它和DataGuard的区别(理解有误请指正)。 主库通过mysql引擎将master库中执行的所有sql语句转储到一个二进制log文件中(binlog),然后将这个binlog通过网络传输到slave端,然后解析binlog中的语句成sql语句,再在备库中执行,由此可见,mysql的主从复制功能是基于sql语句逻辑的传输方法,所以在配置mysql主从复制的过程中,参数一定要优化得当,否则就会出现由于参数限制的问题出现各种各样的报错。。。 -和DataGuard的比较 DataGuard(太懒,下面简称DG)中文名称叫做数据卫士,是oracle提供的一种容灾解决方案。DG一般称主库为primary(对应mysql中的master),备库叫standby(对应mysql中的slave),它有三种模式,分别是物理standby、逻辑standby和快照standby,我们一般采用物理standby的配置方法,优点是配置简单,不易出错,对参数方面优化较少,是通过将归档日志通过网络传输到备库,再通过block-to-block(块对块的复制)的方式在备库端进行应用(注意:这里区别于mysql的是,并不涉及sql语句,采用数据块复制的方法呈现的),优点是维护简单,不涉及sql语句的逻辑,适用于绝大多数生产环境。(mysql这方面和DG相比还是略逊一筹,好了废话不多说,下面开始配置) 二、试验环境(其实这是个真实的生产环境,已脱敏) 平台:Hyper-V OS:CentOS 6.5 DB: Mysql 5.6 三、开始搭建 前提条件 -操作系统以及数据库安装完毕 -版本一致 -关闭iptables、selinux 修改master配置文件 -主库 vi /etc/my.cnf [mysqld] log-bin=mysql-bin //开启binlog功能 server-id=1 //service-id 主从要区别开 -从库 vi /etc/my.cnf [mysqld] log-bin=mysql-bin //开启binlog功能 server-id=2 //service-id 主从要区别开 建立同步账号并授权slave mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'mysync'; 锁定主库 mysql>flush tables with read lock; 确定master库状态值 mysql>show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000039 | 308 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化 配置从库slave mysql>change master to master_host='xx.xx.xx.xx',master_user='mysync',master_password='mysync',master_log_file='mysql-bin.000089',master_log_pos=592700228; Mysql>start slave; //启动从服务器复制功能 解锁主库 mysql>unlock tables; 检查主从复制状态 mysql> show slave status G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.9.40.70 Master_User: mysync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000089 Read_Master_Log_Pos: 182083231 Relay_Log_File: mysqld-relay-bin.000100 Relay_Log_Pos: 182083394 Relay_Master_Log_File: mysql-bin.000089 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: …………………………………………………… SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec) 注:标红的IO和SQL状态均为yes,主从配置完成! 四、Troubleshooting 在实际环境过程中,可能会出现各种各样的异常,在这里就不模拟异常了(实在无法模拟Mysql主从复制搭建过程),主要讨论处理方法。 一般主从出现异常之后通过show slave statusG可以看到是IO的问题还是SQL执行的问题,如果IO为NO,请检查主从之间的网络是否存在异常或者防火墙是否开启。 如果是SQL选项为NO,那就要具体问题具体分析了,在Last_SQL_Error中会提示哪个sql语句卡主,注意。。。这里的坑比较多,如果是参数问题导致卡sql,那么优化指定参数文件之后重启mysql服务应该就没有问题了,如果从库有写入导致不一致的情况只能跳过错误了。曾经在某项目遇到过执行一个表的update一直被卡,无论怎么跳过也不行,参数也没有问题,被坑了好久之后发现原来这个库连着一个备用的应急环境,里面的job会每隔一段时间进行更新,由于环境不同导致初始值不同所以update必然失败,但如果是block-to-block的复制方式就会屏蔽这个错误。解决方法:将这个库的应用服务停掉就ok了。 -处理主从报错的通用方法: start slave; set global sql_slave_skip_counter=1; start slave; 感谢各位的阅读,以上就是“Mysql主从复制搭建过程”的内容了,经过本文的学习后,相信大家对Mysql主从复制搭建过程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。 (编辑:丽水站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |