mysql主从同步与读写分离

最新推荐文章于 2022-07-23 02:46:28 发布
weixin_33897722 最新推荐文章于 2022-07-23 02:46:28 发布
阅读量152 收藏
点赞数
CC 4.0 BY-SA版权
文章标签: 数据库
原文链接:http://www.cnblogs.com/liucsxiaoxiaobai/p/10753589.html
本文详细介绍了如何通过配置主从数据库实现数据流量均衡和高可用性,包括数据库备份、用户权限设置、binlog日志管理及常见错误处理,并使用keepalived实现故障自动切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了解决数据库服务的高可用问题以及负载均衡问题,

1正常情况下可以互为主从,均衡分担数据流量,

2防止数据库服务器在宕机的情况下可以顺利切换到正常的数据库服务器,减少公司的客户流量损失故公司需要搭建数据库集群以备不时之需。

一主一从

首先准备两台已安装好数据库的服务器:分别为A为主服务器和B从服务器

第一步初始化数据库:

1,备份A数据库服务器中所有的数据

[root@es1 ~]#mysql -uroot -p

mysql> reset master    #重置binlog日志

mysql> quit             #退出数据库

[root@es1 ~]# mysqldump -uroot -p --all-databases >/root/test.sql

[root@es1 ~]# ls         #查看备份结果

2在从库B中导入备份的数据

登录B服务器

[root@es2 ~]#mysql -uroot -p

mysql>drop database text;          # 清除所有测试数据

[root@es1 ~]# scp /root/mytest.sql root@192.168.12.118:/root/   #将数据库A中备份的数据上传至B数据库
root@192.168.12.118's password:
mytest.sql 100% 790 418.8KB/s 00:00

mysql -u root -p < /mytest.sql  将数据备份至B数据库,

第二步配置主从数据库

在AB数据库服务器数据一致,binlog还原点一致的情况下进行配置

1:配置主服务器,修改/etc/my.cnf

[root@es1 ~]# vim /etc/my.cnf

[client]
default-character-set=utf8

[mysqld]

character-set-server=utf8
validate_password_policy=0
validate_password_length=6

log-bin=mysql1-bin
server_id=1
binlog_format=MIXED

[root@es1 ~]# systemctl restart mysqld  #重启数据库

2:新建一个用户授予器复制权限允许其从从服务器slave访问

mysql> grant select replication slave on *.* to 'replicater'@'192.168.12.%' identified by 'pwd123';

mysql> show master status\G  #查看主服务器状态 

注意 :当在授予权限时出现密码安全问题时

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这个就是初始设置密码策略的问题:先查看密码策略

mysql> show variables like 'validate_password%';

解决方案:

mysql> set global validate_password_mixed_case_count=2;  

关于 mysql 密码策略相关参数;
1)、validate_password_length  固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count  整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count  整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;

 

3 配置从服务器

vi /etc/my.cnf

[client]

[client]
default-character-set=utf8   #设置数据库客户端编码utf8

[mysqld]

character-set-server=utf8     #设置服务端编码utf8
validate_password_policy=0    #密码策略密码复杂度
validate_password_length=6  #密码长度

log-bin=mysql2-bin            #bin-log日志前缀
server_id=2            #数据库服务器主机id
binlog_format=MIXED      #日志格式

[root@es2 ~]# systemctl restart mysqld

[root@es2 ~]# mysql -uroot -p

mysql> change master to master_host='192.168.12.119',     #指定主服务器的ip地址
    ->  master_user='replicater',                #指定主库授权用户用户名
    ->  master_password='12345678',               #授权用户密码
    ->  master_log_file='mysql1-bin.0000001',        #主库bin-log日志
    ->  master_log_pos=123;                   #指定备份节点
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> START SLAVE; //启动复制

[root@es2 ~]# ls -lh /var/lib/mysql/        注 :master.info  ,MASTER 主服务器的设置信息自动存为 master.info 文件

mysql> show slave status\G

无论是一主一从,一主多从,互为主从,其原理都是从库指定主库

注意点,就是主从库必须要一致才能同步,否则会受中继日志和bin-log日志中的pos点的影响而无法同步,配置主从同步时4关闭防火墙。

 在配置主从同步可能遇到的问题

 报错一

Last_IO_Errno: 2003

Last_IO_Error: error connecting to master 'coolcloud@XXXX:XX' - retry-time: 60  retries: 86400

 这个就是防火墙的问题了,关闭防火墙即可

systemctl stop firewalld         关闭防火墙

systemctl disable firewalld     开机不启动防火墙

 再重新指定主库

报错二

Last_IO_Errno: 1236                 

Last_IO_Error: Got fatal error 1236 from master when reading dat

 这个问题时因为从库在指定主库配置的时候   master_log_pos=123; #指定pos节点错误导致需查看

解决方案是:

查看主库中的状态
mysql> show master status\G 

在从库中

mysql>stop slave

change master to master_host='192.168.12.119',
 master_user='replicater',
 master_password='pwd123',
 master_log_file='mysql1-bin.000006',   # 需重新根据主库指定
 master_log_pos=154;  # 需重根据主库新指定

再启动 

 mysql>start slave

 三:总结(更多报错)

1、须在主、从服务器配置文件 /etc/my.cnf指定
server_id (任意,建议指定不易混淆,有规律,有逻辑的)
binlog日志(一般不指定时日志名称默认为主机名-bin.00000x)
binlog-format="mixed" (指定日志格式,一般为混合格式“mixed”,根据需求而定)
注意: 如果以上没有指定,都会报错错;
2、在主库上面授权:允许用户对主库有复制权限 (replication:复制)
grant replication slave on . to 用户名@"服务器地址" identified by "密码";
必须要授权(从库无法指定主库并复制)
3指定组服务器:(缺一不可)
登录数据库
change master to master_host="主服务器地址"
master_user=“主库上的授权用户“
master_password="授权账户密码“
master_log_file= " 主服务器binlog日志名称“
master_log_pos=”binlog日志偏移量”
最后启动主从复制start slave
查看重服务器状态
Slave_IO_Running: (负责与主机的io通信)
Slave_SQL_Running: (负责自己的slave 数据库进程)
如果不出问题的话,主从同步就部署成功了,

但是这世界并不太平,如果IO线程启动失败
以下是我遇到的问题:
1、主服务器的防火墙没关,导致从服务器同步失败
解决方案:关闭防火墙;
2、主从服务器数据库中数据不一致,(部署主从服务时)
先将不同的部分备份到对方的数据库中保证数据的一致
(不建议删库删库删表)
3、binlog日志偏移量不对,从服务器找不到同步节点
打开主服务器binlog日志文件,找到数据偏移量,重新指定就可以了。
如果是SQL线程启动失败:
我碰到的情况如下:
1、Last_SQL_Error: Error 'Operation DROP USER failed for 'yy'@'192.168.4.10'' on query. Default database: 'alldb'. Query: 'drop user yy@192.168.4.10'
就是没有同步之前的的主库授权用户,在部署完之后发现从库上没有之前主库上的授权用户,然后我撤销了,从库的SQL线程就断了,所以要谨慎操作。
解决办法:一般都不是删除、撤销、当然就是在从库上做同样的授权。
2、Slave failed to initialize relay log info structure from the repository
当出现这种报错时:一般原因是默认中继日志relay_log被服务器上另一个mysql slave占用了;
解决方案:

  1、初始化中继日志, 即删除relay-log.info中继日志文件
  2、在配置文件/etc/my.cnf 中指定中继日志名称
  3、当配置高可用集群时,SQL线程启动失败报错如下
3、Master command COM_REGISTER_SLAVE failed: Access denied for user 'monitor'@'%' (using password: YES) (Errno: 1045)
当出现这种报错时:
  1主服务器的级联复制功能未开启
解决方案:在配置文件中log_slave_updates # 允许级联复制,重起服务,还有是主库必须添加授权用户。
  2还有就是删除授权用户,(不建议)。
综上所述:部署主从同步时对数据库服务器具有高度的统一性。

第三步 使用keepalived实现数据库集群的故障切换功能,实现数据库的高可用

1下载安装keepalived 

安装依赖  yum install -y pcre-devel openssl-devel popt-devel

 [root@es1 ~]# wget https://www.keepalived.org/software/keepalived-2.0.15.tar.gz

 [root@es1 ~]# tar -axvf  keepalived-2.0.15.tar.gz

 [root@es1 ~]# cd  keepalived-2.0.15

[root@es1 keepalived-2.0.15]# ./configure  --prefix=/opt/keepalived

[root@es1 keepalived-2.0.15]#make  && make install

[root@es1 keepalived-2.0.15]#systemctl start keepalived 

报错如下

journalctl -xe 查看具体原因   如图因为未找到keepalived配置文件导致

 

解决方案

[root@es1 ~]# cp -r /opt/keepalived/etc/keepalived /etc/

2keepalived配置:

keepalived配置手册:https://www.keepalived.org/manpage.html

 cat keepalived.conf  #注意主从均需安装配置keepalived  

vrrp_script chk_mysql_port {     #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
    script "/opt/chk_mysql.sh"   #这里通过脚本监测
    interval 2                   #脚本执行间隔,每2s检测一次
    weight -5                    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
    fall 2                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
    rise 1                    #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33 #指定虚拟ip的网卡接口,不一定是eth0根据ifconfig确定
    virtual_router_id 51 #路由器标识,MASTER和BACKUP必须是一致的
    priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.11.25
    }
    track_script {
       chk_mysql_port
    }
}

编写监控脚本

cat /opt/chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]
then
    /etc/init.d/keepalived stop
else
   echo "running..." >> /opt/keepalived-running-info.log
   sleep 5000
fi

启动keepalived服务

 systemctl start keepalived

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2017-12-30 18:51:10
 

 

转载于:https://www.cnblogs.com/liucsxiaoxiaobai/p/10753589.html

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
weixin_33897722
关注 关注
  • 0
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
MySQL5.7主从同步Slave I/O错误解决方法
qq_35298337的博客
07-09 1743
MySQL5.7主从同步出现以下error: [ERROR] Slave I/O for channel ‘’: Master command COM_REGISTER_SLAVE failed: Access denied for user ‘sync’@’%’ (using password: YES) (Errno: 1045), Error_code: 1597 解决方法:修改主的授权→GRANT REPLICATION SLAVE ON . TO ‘sync’@’%’ identified b
mysql 5.6 主从提示错误v_MySQL 5.6主从复制及遇到的错误
weixin_36125599的博客
01-19 263
4、测试在master上新建表,MySQL> use blog;Database changedmysql> create table hi_tb(id int(3),name char(10));Query OK, 0 rows affected (0.14 sec)mysql> show tables;+----------------+| Tables_in_blog |+...
参与评论 您还未登录,请先 登录 后发表或查看评论
MySQL Master command COM_REGISTER_SLAVE failed: Access denied for user
小白
10-30 1万+
文章目录背景解决方法 背景 MySQL在从服务器执行start slave命令,启动主从复制功能时报错: 2019-10-30T11:36:56.412700+08:00 2 [ERROR] Slave I/O for channel '': Master command COM_REGISTER_SLAVE failed: Access denied for user 'repl'@'%' (u...
MySQL实战 主从同步(原理+实战)
每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。
04-28 4472
文章目录前言一、基本知识1.1、什么是主从同步?1.2、原理分析1.3、MySQL配置主从的特点二、实操环境背景前提准备主从同步思路1、主从服务器进行配置2、主服务器创建用户账号(用于从服务器订阅)3、配置从库信息(从服务器数据库)主从同步效果演示主从小注意点问题:show slave status时从服务器的slave_IO_running为no分析问题错误1:slave failed to initalize relay log info structure错误2:Fatal error: The sl
Mysql复制错误error_code: 1045 Access denied for user
Kevin's Blog SQL讨论群21426959 Dynamics AX 438084988
04-14 1万+
尝试配置mysql复制的时候使用show slave status\G出现下面的错误:    [ERROR] Slave I/O: Master commandCOM_REGISTER_SLAVE failed: Accessdenied for user 'replica'@'12.34.56.78' (using password: YES) (Errno: 1045), Error_c
关于mysql主从同步时的错误
a26637896的博客
06-17 1681
1.Last_IO_Error: Master command COM_REGISTER_SLAVE failed: Access denied for user 'repl'@'10.224.12.228' (using password: YES) (Errno: 1045)
MySQL主从同步与读写分离配置图文详解
08-11
### MySQL主从同步与读写分离配置详解 #### 一、实验目的 在现代的生产环境中,单一的MySQL服务器往往无法满足对数据处理的安全性、高可用性和高并发的需求。因此,采用**主从同步(Master-Slave Replication)**...
MySQL主从同步与读写分离实战代码解析
标题中提到的关键技术点是“mysql主从同步”和“读写分离”。以下是这些技术点的详细说明: ### MySQL主从同步 MySQL主从同步(Replication)是指将一个MySQL数据库服务器(主服务器)上的数据变化,通过一定的...
Mycat实战:MySQL主从同步与读写分离实现教程
本文档详细介绍了如何利用Mycat这款数据库中间件来实现MySQL主从同步和...这篇文档为读者提供了Mycat在实现MySQL主从同步与读写分离中的实际应用指导,对于理解和操作Mycat的数据库集群解决方案具有很高的实用价值。
mysql主从同步配置
Memory的博客
06-30 441
主 修改my.cnf文件并重启 # vim /etc/my.cnf ## 添加如下 server-id =1 # 保证唯一 log-bin=mysql-bin # 让主机生成二进制SQL日志执行文件 service mysql restart # 重启mysql服务器 重启后登录数据库查询是否生效 > SHOW VARIABLES LIKE 'server_id' value字段是my.cnf设置的server-id值一样即生效 添加连接用户并设置远程登录权限 #
mysql 1597_MySQL复制之时区问题
weixin_35719518的博客
02-01 223
今天接到一需求,说要在国际间为MySQL建立复制。这其实没什么的,网络环境再差,MySQL也是可以应对的。但偏偏出现时区问题的错误!错误如下:[Warning] Slave I/O: Get master clock failed with error: Lost connection to MySQL server during query, Error_code: 2[Warning] Sla...
分析Canal如何支持MySQL主从同步
TheOne的博客
07-23 1844
本文分析Canal如何模拟MySQL主从同步协议,并分析Binlog结构 首先,Canal把自己伪造成一个slave,向Master注册自己的信息,这样Master才会向Canal发送Binlog信息。
mysql server id 冲突_MySQLSlave同一server_id的冲突原因分析
weixin_35056962的博客
02-04 630
今天分析一个诡异问题,一个模拟Slave线程的程序,不断的被Master Server给kill掉,最终发现是因为有两个Slave使用同样一个server id去连接Master Server,为什么两个Slave用同一个server id会被Master Server给Kill呢?分析了源码,这源于MySQL Replication我们首先看看一个Slave注册到Master会发生什么,首先Sl...
mysql-5.6主从复制及遇到的错误
系统运维
09-22 284
mysql的复制过程:每执行一个写操作,它都会往自己的数据库中存一份,与此同时这个写操作也会存储在二进制日志文件中一份,并且把它们保存为事件,所以在这个数据库上,前端数据每执行一个写操作或者有可能引起修改的操作,都会保存一个事件,我们就把这个事件通过mysql服务器3306端口发送给另外一台服务器,另外一台服务器把这个事件接收下来,接受下来以后先保存在本地的日志文件中,而后从这个日志文件中一次读一...
mysql 快速设置主从同步
____
02-27 681
MySQL主从同步用在读写分离或数据备份,快速设置步骤如下: 设置步骤 1.先开启master slave的bin-log 并设置 server-id,然后重启mysql检查 2.得到master的MASTER_LOG_FILE 和MASTER_LOG_POS,在master上运行以下语句: mysql&amp;amp;amp;gt; show master status\G **********************...
两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……
热门推荐
刀刀的专栏
10-16 10万+
两台主机A、B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connecting to master 'usvr_replication@VMS00782:55944'…… 查看错误日志文件 先在A上确认复制用户账户是否存在且是否赋了正确的权限 mysql> mysq
weixin_33897722

博客等级

码龄10年
143
原创
198
点赞
1181
收藏
4517
粉丝
关注
私信

TA的精选

  • 新 快照技术及应用

    1811 阅读

  • 新 设置安卓设备屏幕方向,平板为横屏,手机为竖屏

    1976 阅读

  • 热 IT老司机福利 | 这十多个新姿势你知道吗?

    27094 阅读

  • 热 MATLAB 求系统的单位冲击响应及单位阶跃响应

    23385 阅读

  • 热 微信小程序音频IOS无法播放问题总结

    13797 阅读

查看更多

2019年357篇
2018年663篇
2017年979篇
2016年544篇
2015年426篇
2014年342篇
2013年303篇
2012年286篇
2011年212篇
2010年147篇
2009年145篇
2008年99篇
2007年77篇
2006年33篇
2005年21篇
2004年7篇

大家在看

  • 国内网站SSL证书:DV比OV更划算 837
  • Ping.dll PigRace.dll PicVid.dll PhotoLib10.dll PhotoLib09.dll PhotoLib08.dll PhotoLib07.dll
  • CTFSHOW | phpCVE题解 web311 - web315 473
  • 【Linux】:TCP协议
  • 磁编码器新标杆:MT6826S——高精度、强抗干扰的旋转位置传感器
上一篇:
Java虚拟机之内存
下一篇:
jira,Confluence 的JVM内存优化

目录

展开全部

收起

相关专栏

DataBase

专栏

0 人学习

MySQL持久层数据库语法、MySQL经验分享、Redis内存数据库(缓存数据库)使用和经验分享

技术研发

专栏

10 人学习

技术研发,主要涵盖Java、Python、SpringBoot、Docker、等相关技术文章以及操作规范

《MySQL DBA封神打怪之路》

专栏

88 人学习

《MySQL DBA封神打怪之路》包含以下几方面内容: 1)对数据库的初步认识 2)四种类型的SQL语句基本使用 3)超丰富的多表联查案例 4)事物的核心概念以及底层实现原理 5)深入讲解索引的特性以及底层数据结构原理 6)SQL语句的优化 .....

目录

展开全部

收起

上一篇:
Java虚拟机之内存
下一篇:
jira,Confluence 的JVM内存优化

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值