首页 > 数据库 >mysql主从同步延迟怎么解决

mysql主从同步延迟怎么解决

时间:2022-10-31 10:35:38浏览次数:42  
标签:slave 数据库 MySQL master mysql 服务器 主从 延迟


mysql主从同步是一直进行的吗

有两种方法,一种方法使用mysql的checktable和repairtable的sql语句,另一种方法是使用MySQL提供的多个myisamchk,isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

1.checktable和repairtable

登陆mysql终端:

mysql-uxxxxx-pdbname

checktabletabTest;

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

repairtabletabTest;

进行修复,修复之后可以在用checktable命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2.myisamchk,isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchktablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk-oftablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

-----------------------------

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

[-x/tmp/mysql.sock]&&/pathtochk/myisamchk-of/DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

本回答由提问者推荐

mysql主从同步延迟怎么解决_mysql

Mysql 的主从复制,最多支持多少个数据库同步

主从复制理论上支持无穷大的从库个数,实际情况下,受服务器带宽和读写能力的影响

请参考MySQL官方手册的建议:

理论上,通过使用单个主服务器/多从服务器设置,可以通过添加更多的从服务器来扩充系统,直到用完网络带宽,或者你的更新负载已经增长到主服务器不能处理的点。

在获得的收益开始吃平之前,为了确定可以有多少从服务器,以及可以将你的站点的性能提高多少,需要知道查询模式,并且要通过基准测试并根据经验确定一个典型的主服务器和从服务器中的读取(每秒钟读取量,或者max_reads)吞吐量和写(max_writes)吞吐量的关系。通过一个假设的带有复制的系统,本例给出了一个非常简单的计算结果。

假设系统负载包括10%的写和90%的读取,并且我们通过基准测试确定max_reads是1200–2×max_writes。换句话说,如果没有写操作,系统每秒可以进行1,200次读取操作,平均写操作是平均读操作所用时间的两倍,并且关系是线性的。我们假定主服务器和每个从服务器具有相同的性能,并且我们有一个主服务器和N个从服务器。那么,对于每个服务器(主服务器或从服务器),我们有:

reads=1200–2×writes

reads=9×writes/(N+1)(读取是分离的,但是写入所有服务器)

9×writes/(N+1)+2×writes=1200

writes=1200/(2+9/(N+1))

最后的等式表明了N个从服务器的最大写操作数,假设最大可能的读取速率是每分钟1,200次,读操作与写操作的比率是9。

如上分析可以得到下面的结论:

·如果N=0(这表明没有复制),系统每秒可以处理大约1200/11=109个写操作。

·如果N=1,每秒得到184个写操作。

·如果N=8,每秒得到400个写操作。

·如果N=17,每秒得到480个写操作。

kettle如何进行MySQL数据库与HDFS的实时数据同?ke

kettle做不了实时的 希望我的回答对你有用。

mysql主从同步延迟怎么解决_mysql_02

有什么方案么hbase中的数据想实时往mysql中进行同步?hb

使用Python写个脚本框架,做成实时同步

如何配置两个MySQL数据库之间的主从同步功能

一、概述

MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication进行双机热备的配置。

二、环境

操作系统:Linux 2.6.23.1-42.fc8 # SMP(不安装XEN)

Mysql版本:5.0.45-4.fc8

设备环境:PC(或者虚拟机)两台

三、配置

数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是my.cnf):在本环境下为/etc/my.cnf。

3.1 设置环境:

IP的设置:

A主机 IP:10.10.0.119

Mask:255.255.0.0

B主机 IP:10.10.8.112

Mask:255.255.0.0

在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态

为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。

最终以两台主机可以相互ping通为佳。

3.2 配置A主(master) B从(slave)模式

3.2.1 配置A 为master

、增加一个用户同步使用的帐号:

GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;

GRANTREPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;

赋予10.10.8.112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。

、增加一个数据库作为同步数据库:

create database test;

、创建一个表结构:

create table mytest (username varchar(20),password varchar(20));

、修改配置文件:

修改A的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:

server-id = 1#Server标识

log-bin

binlog-do-db=test #指定需要日志的数据库

、重起数据库服务:

service mysqld restart

查看server-id:

show variable like ‘server_id’;

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id| 1|

+---------------+-------+

1 row in set (0.00 sec)

、用show master status/G命令看日志情况。

正常为:

mysql> show master status/G

*************************** 1. row ***************************

File: mysqld-bin.000002

Position: 198

Binlog_Do_DB: test,test

Binlog_Ignore_DB:

1 row in set (0.08 sec)

3.2.2 配置B 为slave

、增加一个数据库作为同步数据库:

create database test;

、创建一个表结构:

create table mytest (username varchar(20),password varchar(20));

、修改配置文件:

修改B的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:

server-id=2

master-host=10.10. 0.119

master-user=backup#同步用户帐号

master-password=1234

master-port=3306

master-connect-retry=60 #预设重试间隔秒

replicate-do-db=test#告诉slave只做backup数据库的更新

、重起数据库服务:

service mysqld restart

查看server-id:

show variables like ‘server_id’;

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id| 2|

+---------------+-------+

1 row in set (0.00 sec)

、用show slave status/G命令看日志情况。

正常为:

mysql> show slave status/G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.10.0.119

Master_User: backup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqld-bin.000001

Read_Master_Log_Pos: 98

Relay_Log_File: mysqld-relay-bin.000003

Relay_Log_Pos: 236

Relay_Master_Log_File: mysqld-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: test,test

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 98

Relay_Log_Space: 236

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

1 row in set (0.01 sec)

3.2.3 验证配置

分别使用insert, delete , update在A主机进行增删改查数据库;查看B主机的数据库是否与A主机一致;若一致,则配置成功。

3.3双机互备模式

如果在A主机加入slave设置,在B主机加入master设置,则可以做B->A的同步。

、在A主机的配置文件中 mysqld配置项加入以下设置:

master-host=10.10.8.112

master-user=backup

master-password=1234

replicate-do-db=test

master-connect-retry=10

、在B的配置文件中 mysqld配置项加入以下设置:

log-bin

binlog-do-db=test

注意:当有错误产生时,*.err日志文件同步的线程退出,当纠正错误后,要让同步机制进行工作,运行slave start。

重起A、B机器,则可以实现双向的热备份。

四、常见问题及解决

、Slave机器的权限问题,不但要给slave机器File权限,还要给它REPLICATION SLAVE的权限。

、在修改完Slave机器/etc/my.cnf之后,slave机器的mysql服务启动之前,记得要删除掉master.info

、在show master status或着show slave status不正常时,看看.err是怎样说的。

、Slave上Mysql的Replication工作有两个线程, I/O thread和SQL thread。I/O的作用是从

master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更

新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的语句,于是同步

就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/master.info,而决定SQL thread的是/var

/lib/mysql/relay-log.info.

、启动slave,命令用start slave;重新启动用restart slave1. ip的设置:a主机 ip:10.10.0.119;mask:255.255.0.0;b主机 ip:10.10.8.112;mask:255.255.0.0

2. 在ip设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态。

3. 为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。最终以两台主机可以相互ping通为佳。

4. 3.2 配置a主(master) b从(slave)模式;3.2.1 配置a 为master。

5. 增加一个用户同步使用的帐号:

grant file on *.* to ‘backup’@'10.10.8.112' identified by ‘1234’;

grantreplication slave on *.* to ‘backup’@'10.10.8.112' identified by ‘1234’。

6. 赋予10.10.8.112也就是slave机器有file权限,只赋予slave机器有file权限还不行,还要给它replication slave的权限才可以。

7. 增加一个数据库作为同步数据库:create database test;

8. 创建一个表结构:create table mytest (username varchar(20),password varchar(20));

9. 修改配置文件:修改a的/etc/my.cnf文件。

10. 在my.cnf配置项中加入下面配置:

11. server-id = 1 #server标识

log-bin

binlog-do-db=test #指定需要日志的数据库

12. 重起数据库服务:

service mysqld restart

查看server-id:

show variable like ‘server_id’。

mysql的主从复制通过什么方式完成数据同步

要实现MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

看上去MySQL的Replication原理非常简单,总结一下:

* 每个从仅可以设置一个主。

* 主在执行sql之后,记录二进制log文件(bin-log)。

* 从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。mysql的主从复制开启之后,从数据库会立马复制主数据库中的数据。

然后,对主数据库进行增,删,改操作之后,从数据库也会进行相同的操作。

不过,对从数据库进行增,删,改操作的话,对主数据库是没有任何影响的

标签:slave,数据库,MySQL,master,mysql,服务器,主从,延迟
From: https://blog.51cto.com/yetaotao/5808579

相关文章

  • MySQL的主键(PRIMARY KEY),重要性太高
    一、什么是主键主键(PRIMARYKEY)的又叫做“主键约束”,MySQL主键约束是一个单独的列或者多个列的组合,其值能唯一地标识表中的一行数据。这样的一列或多列称为表的主键,通过它......
  • MySQL的外键约束(FOREIGN KEY),有点小复杂
    一、什么是参照完整性在学习外键之前,我们必须先搞懂一个概念,什么是“参照完整性”。参照的关系中的属性值必须能够在被参照关系找到或者取空值,否则不符合数据库的语义。在实......
  • mysql主从复制三个线程
    mysql主从同步很慢查看是io还是sql经过分析,业务那边在删除一个大表数据,从库单线程处理不过来,且io性能也比较低,造成堆积[mysql@mysql192-168-0-36/data/mysqldata1/relaylog......
  • MySQL数据库的唯一性约束(UNIQUE)
    一、数据库表的唯一性约束是什么MySQL唯一约束(UniqueKey)要求被约束的列中的数据唯一,允许为NULL,但只能出现一个NULL值。唯一约束可以确保一列或者几列不出现重复值。二、如......
  • MySQL的唯一约束(Unique Key),数据库设计必备
    一、数据库表的唯一性约束是什么MySQL唯一约束(UniqueKey)要求被约束的列中的数据唯一,允许为NULL,但只能出现一个NULL值。唯一约束可以确保一列或者几列不出现重复值。二、如......
  • MySQL优点你能说出来几个
    MySQL有诸多特点,你能说出来几个呢?MySQL体积很小(相对于Oracle小的太多了),并且执行速度快,性能高。最重要的是开源免费、成本极低,这也是MySQL流行的最重要原因。MySQL是使⽤C和C......
  • 命令行登录MySQL
    我用工具怎么连接不上mysql数据库的?不是提示了么:不是自己开的服务端不能连接。试着用mysql的命令行连接一下,根据相关的提示进行处理。一般要开放所需要的端口,设置用户的远......
  • MySQL的检查约束(Check),其实什么用也没有
    一、检查约束简介在标准SQL中,检查约束(CHECK)可以通过CREATETABLE或ALTERTABLE语句实现,根据用户实际的完整性要求来定义。例如限定某一列必须大于10小于20,限定某一列只......
  • mysql主从复制延迟解决
    mysql主从配置成功,但是过段时间再操作master,发现slave没有同步更新复制有延迟,slave想要尽可能及时跟上master的进度,可以尝试采用以下几种方法:1、采用MariaDB发行版,它实现了......
  • mysql主从配置及切换
    mysql主从分离是怎么配置的1、在主从服务器上都装上MySQL数据库,windows系统鄙人安装的是mysql_5.5.25.msi版本,Ubuntu安装的是mysql-5.6.22-linux-glibc2.5-i686.tarwindows......