千家信息网

Mysql主从复制搭建过程

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,这篇文章主要讲解了"Mysql主从复制搭建过程",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Mysql主从复制搭建过程"吧!一、相关概念mysql主从
千家信息网最后更新 2024年09月23日Mysql主从复制搭建过程

这篇文章主要讲解了"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

在实际环境过程中,可能会出现各种各样的异常,在这里就不模拟异常了(实在无法模拟),主要讨论处理方法。

一般主从出现异常之后通过show slave status\G可以看到是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;

下面给大家贴一下主从复制报错然后自动发邮件提醒的脚本

#!/bin/bash


array=($(mysql -u root -pxxxx -e "show slave status\G"|grep "Running" |awk '{print $2}'))
if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ]
then
echo "slave is OK" >/var/lib/mysql/backup/script/sync_log.tmp
else
echo "mysql主从复制出错" >/var/lib/mysql/backup/script/sync_log.tmp
mailx -s "mysql_sync_check" tsl-baijin0829@tasly.com < /var/lib/mysql/backup/script/sync_log.tmp
fi

感谢各位的阅读,以上就是"Mysql主从复制搭建过程"的内容了,经过本文的学习后,相信大家对Mysql主从复制搭建过程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

主从 问题 语句 配置 过程 参数 方法 环境 服务 功能 状态 数据 文件 服务器 网络 逻辑 传输 学习 不同 一致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山西网络时间同步服务器虚拟主机 互联网科技资讯圈 网络管理和软件开发那个好 手机助手怎么绑定id服务器 淮安精诚软件开发业务范围 美国服务器低价 数据库属性建立表 数据库技术与应用唐好魁答案 广州设备维修管理软件开发 自己在卧室搭建迷你服务器 为什么电视机连接不到服务器 网络技术服务行业账务处理 软件开发专利请求书 稀缺的网络技术 一般软件开发需要什么软件 数据库右关联 dayz一个服务器都看不到 java是做软件开发的吗 无法与服务器建立安全连接的 软件服务器怎么取消验证 如何下载阿里云服务器到手机 坚决维护网络安全心得体会 中国汽车网络安全吗 幼儿园网络安全排查表模板 网络安全密钥水杨酸 数据库高级工程师 考证 软件开发和服务需要资质吗 我的世界都有谁开了服务器 阿里云服务器在哪里开启端口 华天软件开发部
0