MySQL主从复制、搭建、状态检查、中断排查及备库重做 实战手册

合集下载

MySQL主从复制配置与管理教程

MySQL主从复制配置与管理教程

MySQL主从复制配置与管理教程MySQL主从复制是一种常见的数据库复制技术,它可以实现将一个MySQL服务器数据复制到其他多个MySQL服务器的功能。

在实际应用中,主从复制广泛用于分布式数据库架构、数据备份和读写分离等场景。

本文将详细介绍MySQL主从复制的配置和管理教程,帮助读者快速掌握相关知识。

一、概述MySQL主从复制是指将一个MySQL数据库服务器作为主服务器,其他MySQL服务器作为从服务器,并通过二进制日志来同步主服务器的数据更新操作到从服务器上。

主从复制的目的是实现数据的冗余备份、提高数据库的读性能以及实现高可用性。

二、环境准备在开始配置MySQL主从复制之前,我们需要确保满足以下条件:1. 在主服务器和从服务器上都已经安装了MySQL数据库软件,并且版本一致。

2. 主服务器和从服务器之间可以互相访问,并且网络连接可靠稳定。

3. 确保主服务器和从服务器的配置文件中都正确设置了主机名、IP地址和端口号等信息。

4. 主服务器上已经有需要复制的数据库,并且该数据库已经开启了二进制日志功能。

三、主从复制的基本原理MySQL主从复制的实现依赖于MySQL的二进制日志(Binary Log)和复制线程(Replication Thread)。

当在主服务器上执行一条更新操作时,会将该操作记录到主服务器的二进制日志中。

从服务器连接到主服务器,并通过复制线程将主服务器的二进制日志同步到从服务器上执行,从而实现主从数据的一致性。

四、主服务器配置1. 配置主服务器的f文件,开启二进制日志功能:在f文件中找到[mysqld]部分,在其中添加以下配置:```log-bin=mysql-binbinlog-format=ROWserver-id=1```其中,log-bin=mysql-bin表示指定二进制日志的命名前缀;binlog-format=ROW表示选择以行格式记录二进制日志;server-id=1表示主服务器的唯一标识符。

MySQL主从复制的配置和管理指南

MySQL主从复制的配置和管理指南

MySQL主从复制的配置和管理指南引言MySQL是一种颇为流行的关系型数据库管理系统,广泛应用于互联网开发和企业信息化系统中。

在应用中,数据库的高可用性和读写分离是非常关键的。

而MySQL主从复制(Master-Slave Replication)则是一种常用的实现方式,通过配置和管理主从复制,可以提高数据库的可用性、负载均衡和故障恢复能力。

一、MySQL主从复制的基本原理MySQL主从复制是一种异步事件复制机制,通过将主数据库上的数据变更以事件的形式复制到从数据库上,并实时保持主从数据库之间的数据一致性。

主从复制的基本原理可以分为以下几个步骤:1. 主数据库上的Binlog日志:MySQL主数据库会将写入操作记录到二进制日志(Binlog)中,包括插入、更新和删除等操作。

2. 从数据库的IO线程:从数据库上的IO线程连接到主数据库,定期读取主数据库的Binlog日志,并将读取到的日志复制到从数据库的Relay Log中。

3. 从数据库的SQL线程:从数据库上的SQL线程负责执行Relay Log中的事件,即将主数据库上的操作在从数据库上重新执行一遍,以实现数据的复制。

4. 从数据库的复制状态:从数据库会维护一个复制状态,记录从数据库当前复制到的Binlog文件和位置,以确保数据的一致性。

二、MySQL主从复制的配置步骤配置和管理MySQL主从复制,一般需要以下几个关键步骤:1. 确认主数据库的配置:确保主数据库正确配置了Binlog日志功能,并且开启了二进制日志(log-bin)和唯一服务器ID(server-id)。

2. 配置从数据库的参数:在从数据库上设置唯一的服务器ID,并配置relay log 的位置和文件名格式等参数。

3. 设置主从数据库的连接权限:在主数据库上创建一个用于复制的用户,并为其赋予复制权限。

4. 启动从数据库的IO线程和SQL线程:在从数据库上启动IO线程和SQL线程,使其可以连接到主数据库,并实时复制数据。

MySQL怎么设置主从复制_MySQL主从复制有哪些方法

MySQL怎么设置主从复制_MySQL主从复制有哪些方法

MySQL怎么设置主从复制_MySQL主从复制有哪些方法MySQL是一个关系型数据库管理系统,在WEB 应用方面,MySQL是最好的RDBMS 应用软件。

下面由店铺为大家整理的MySQL主从复制的方法,希望大家喜欢!MySQL主从复制的方法设置主从复制:1、确保在主服务器和从服务器上安装的MySQL版本相同,并且最好是MySQL的最新稳定版本。

2、在主服务器上为复制设置一个连接账户。

该账户必须授予REPLICATION SLAVE权限。

如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。

mysql> GRANT REPLICATION SLAVE ON *.*-> TO 'replication'@'%' IDENTIFIED BY 'slavepass';3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句:mysql> FLUSH TABLES WITH READ LOCK;保持mysql客户端程序不要退出。

开启另一个终端对主服务器数据目录做快照。

shell> cd /usr/local/mysql/shell> tar -cvf /tmp/mysql-snapshot.tar ./data如果从服务器的用户账户与主服务器的不同,你可能不想复制mysql数据库。

在这种情况下,应从归档中排除该数据库。

你也不需要在归档中包括任何日志文件或者或文件。

当FLUSH TABLES WITH READ LOCK所置读锁定有效时(即mysql客户端程序不退出),读取主服务器上当前的二进制日志名和偏移量值:mysql > SHOW MASTER STATUS;+---------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+---------------+----------+--------------+------------------+ | mysql-bin.003 | 73 | test | manual,mysql |+---------------+----------+--------------+------------------+ File列显示日志名,而Position显示偏移量。

MySQL主从复制的配置和常见问题解决

MySQL主从复制的配置和常见问题解决

MySQL主从复制的配置和常见问题解决导语:MySQL是世界上最流行的开源关系数据库管理系统之一,它提供了强大的功能和灵活性。

MySQL主从复制是MySQL中一种常用的高可用性和数据备份机制。

本文将详细介绍MySQL主从复制的配置过程,并分析常见的问题及解决方案,以帮助读者更好地理解和应用MySQL主从复制。

一、MySQL主从复制的概念和原理MySQL主从复制是指通过将一个MySQL服务器(称为主服务器)的数据复制到另一个或多个MySQL服务器(称为从服务器)上来实现数据同步的过程。

主服务器负责处理所有的写操作,而从服务器则复制主服务器上的数据,并负责读取操作。

主从复制的原理主要有以下几个核心组件:1.二进制日志(Binary Log)MySQL主从复制通过二进制日志来记录主服务器上的所有改变,包括插入、更新和删除操作。

二进制日志中的内容会通过网络传输给从服务器,实现数据的同步。

2.主服务器(Server)主服务器是负责处理所有的写操作的MySQL服务器。

它将所有的写操作记录到二进制日志中,并将二进制日志传输给从服务器。

3.从服务器(Slave)从服务器是通过复制主服务器的数据来实现数据同步的MySQL服务器。

它连接到主服务器,并从主服务器上读取二进制日志,然后将这些日志应用到自己的数据中。

4.主从复制的流程:1)主服务器上的写操作会被记录到二进制日志中;2)从服务器连接到主服务器,并请求从指定的二进制日志位置开始复制;3)主服务器将二进制日志中的内容发送给从服务器;4)从服务器将接收到的二进制日志应用到自己的数据中;5)从服务器周期性地从主服务器获取新的二进制日志内容,实现数据的持续同步。

二、MySQL主从复制的配置MySQL主从复制的配置主要包括以下几个步骤:1.确保主服务器的二进制日志开启在主服务器的配置文件f中,确保开启了二进制日志功能。

找到并修改以下参数值:```log_bin = /var/log/mysql/mysql-bin.logserver_id = 1```2.创建从服务器账号在主服务器上创建一个用于复制的账号,并分配相应的权限。

MySQL数据库中数据表(创建、查看、修改、复制、删除)

MySQL数据库中数据表(创建、查看、修改、复制、删除)

MySQL数据库中数据表(创建、查看、修改、复制、删除)查看数据库中的数据表在MySQL中创建好一个数据库后,可以使用 SHOW TABLES 语句查看当前数据库中的表,例如:查看名为onlinedb数据库下的数据表:(1)使用 USE 语句将onlinedb设为当前数据表.其中这个“ Database changed”表示数据库切换成功。

(2)查看数据表。

可以看到我这数据库中有四个数据表,如果在查看数据表示出现“Empty set”这表示这份数据库中是为一个空集,也就是没有数据表。

在数据库中创建数据表接下来使用 CREATE TABLE 语句创建数据表:格式如下:CREATE [TEMPORARY] TABLE 表名(字段定义1,字段定义2,…字段定义N);其中:TEMPORARY:使用该关键字表示创建的表为临时表。

字段定义:数据表中的字段;包括字段名,数据类型,是否允许为空,指定默认值、主键约束、唯一性约束、注释字段、是否伟外键以及字段类型的属性等‘字段定义格式:字段名数据类型 [NOT NULL | NULL] [DEFAULT 默认值] [AUTO_INCREMENT] [ UNIQUE KEY | PRIMARY KEY] [COMMENY “字符串”] [外键定义]其中:NULL (NOT NULL):表示字段是否可以为空。

DEFUALT:指定字段的默认值。

AUTO_INCREMENT:设置字段为自增,只有整型类型的字段才能设置自增。

自整默认从1开始,每个表只能有一个自增字段。

UNIQUE KEY:唯一性约束PRIMARY KEY:主键约束。

COMMENT:注释字段。

外键定义:外键约束例如:我这里创建一个叫test的数据表:然后查看成功没可以看到我们这里创建好的名为test的数据表;查看数据表结构如果想查看该数据表就使用 DESCRIBE 表名;其中:这里的DESCRIBE 也可以缩写为DESC。

MySQL的主从复制步骤详解及常见错误解决方法

MySQL的主从复制步骤详解及常见错误解决方法

MySQL的主从复制步骤详解及常见错误解决⽅法mysql主从复制(replication同步)现在企业⽤的⽐较多,也很成熟.它有以下优点:1.降低主服务器压⼒,可在从库上执⾏查询⼯作.2.在从库上进⾏备份,避免影响主服务器服务.3.当主库出现问题时,可以切换到从库上.不过,⽤它做备份时就会也有弊端,如果主库有误操作的话,从库也会收到命令.下⾯直接进⼊操作.这⾥使⽤的是debian5操作系统,mysql5.0,默认引擎innodb10.1.1.45 主库10.1.1.43 从库1.设置主库1)修改主库f,这⾥主要是server-id⼀定主从不要设置成⼀样的.打开binlog⽇志log-bin = /opt/log.bin/45server-id = 452)在主服务器上建⽴同步账号mysql> grant REPLICATION SLAVE ON *.* TO 'repl'@'10.1.1.43' IDENTIFIED BY 'replpass';注意:mysql的权限系统在实现上⽐较简单,相关权限信息主要存储在⼏个系统表中:er,mysql.db,mysql.host,mysql.table_priv,mysql.columm_priv.由于权限信息的数据量⽐较⼩,访问⼜⾮常频繁,所以mysql在启动的时候,就会将所有的权限信息都加载到内存中,并保存在⼏个特定的结构⾥.这就使得每次⼿动修改了相关权限表之后,都需要执⾏flush privileges,通知mysql重新加载mysql的权限信息.当然,如果通过grants,revoke或drop user 命令来修改相关权限,则不需要⼿动执⾏flush privileges命令.3)在主服务器上导出数据库当时的快照,传给从库上.root@10.1.1.45:mysql# mysqldump -uroot -p --single-transaction --flush-logs --master-data --all-databases > all.sql--single-transaction:这个选项能够让innoDB和Falcon数据表在备份过程中保持不变.这⼀做法的关键在于它是在同⼀个事务⾥来导⼊各有关数据表的.mysqldump使⽤repeatable read事务隔离层来⽣成⼀份稳定⼀致的转储⽂件,同时不会阻塞其他客户(对于⾮事务性表,转储过程可能有变化),它不能与--lock-all-tables选项⼀起使⽤.--flush-logs:在导出⼯作开始之前先清空mysql服务器的⽇志⽂件.这样更容易恢复操作,知道在检查点时间之后创建的⼆进制⽇志⽂件是在备份给定数据库之后完成的.结合使⽤--lock-all-tables或--master-data,只有在所有数据表都锁定之后才清除⽇志.这个选项需要具备reload权限. --master-data:使⽤后mysqldump会在dump⽂件中产⽣changer master to命令,⾥⾯记录了dump时刻所对应的详细的log position信息.root@10.1.1.45:mysql# sed -n '1,40p' all.sql-- MySQL dump 10.11---- Host: localhost Database:-- -------------------------------------------------------- Server version 5.0.51a-24+lenny1-log/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;---- Position to start replication or point-in-time recovery from--CHANGE MASTER TO MASTER_LOG_FILE='45.000064', MASTER_LOG_POS=98;---- Current Database: `bbs`--CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bbs` /*!40100 DEFAULT CHARACTER SET latin1 */;USE `bbs`;---- Table structure for table `davehe`--DROP TABLE IF EXISTS `davehe`;SET @saved_cs_client = @@character_set_client;SET character_set_client = utf8;CREATE TABLE `davehe` (2.设置从库1).修改从库fserver-id = 43 #主从可1对多从各id不能相同2)将主库的快照灌⼊从库root@10.1.1.43:tmp# cat all.sql | mysql -uroot -p3)在从库上设置同步.查看从库状态.mysql> change master to master_host='10.1.1.45', master_user='repl',master_password='replpass',master_log_file='45.000064',master_log_pos=98; Query OK, 0 rows affected (0.01 sec)mysql> start slave;Query OK, 0 rows affected (0.00 sec)mysql> show slave status\G;*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.1.1.45Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: 45.000064Read_Master_Log_Pos: 98Relay_Log_File: mysqld-relay-bin.000002Relay_Log_Pos: 228Relay_Master_Log_File: 45.000064Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 98Relay_Log_Space: 228Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 01 row in set (0.00 sec)ERROR:No query specified测试OK当然这只是最简单的配置还有很多参数可根据环境需求变化.⽐如replicate-do-db=test 过滤拉主⽇志到从只需要这个库和下⾯的表replicate-wild-do-table=test.davereplicate-wild-do-table=test.davehemysql数据库同步跳过临时错误stop slave;set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; (事务类型,可能需要执⾏⼏次)start slave;stop slave IO_THREAD //此线程把master段的⽇志写到本地start slave IO_THREADstop slave SQL_THREAD //此线程把写到本地的⽇志应⽤于数据库start slave SQL_THREADSlave_IO_Running: No错误由于主库的主机192.168.1.1宕机,再次启来后,从库192.168.71.1连接主库发现报错. Slave_IO_Running: Noroot@192.168.71.1:~# mysql -uroot -p --socket=/opt/mysql/3399/3399.sockEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 452723Server version: 5.0.51a-24+lenny2 (Debian)Type 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> show slave status\G;*************************** 1. row ***************************Slave_IO_State:Master_Host: 192.168.1.1Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: 99.000302Read_Master_Log_Pos: 165112917Relay_Log_File: 3399-relay-bin.000013Relay_Log_Pos: 165113047Relay_Master_Log_File: 99.000302Slave_IO_Running: NoSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB: mysqlReplicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 165112917Relay_Log_Space: 165113047Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: NULL1 row in set (0.00 sec)查看错误⽇志mysql@192.168.71.1:/opt/mysql/3399$ cat 192.168.71.1.err140115 1:51:01 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)140115 1:51:01 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log 140115 1:51:01 [Note] Slave I/O thread exiting, read up to log '99.000302', position 165112917根据错误位置,查找主库上log ‘99.000302' 对应的位置 165112917root@192.168.1.1:mysql.bin# mysqlbinlog 99.000302 > /tmp/testroot@192.168.1.1:mysql# tail -n 10 /tmp/test#140115 0:50:25 server id 1176 end_log_pos 165111351 Query thread_id=111 exec_time=0 error_code=0SET TIMESTAMP=1389718225/*!*/;INSERT INTO user_info_db_86.region_info_table_56 (userid, region, gameflag) VALUES (563625686, 0, 2) ON DUPLICATE KEY UPDATE gameflag = (gameflag | 2)/*!*/; # at 165111351#140115 0:50:25 server id 1176 end_log_pos 165111378 Xid = 17877752COMMIT/*!*/;DELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;结果发现主库上位置最后是165111351 ⽐165112917要⼩. 也就是从库同步找的位置⽐主库要⼤,故同步不成功为什么会这样,这是因为这个在sync_binlog=0的情况,很容易出现。

MySQL数据库的主备复制配置与故障处理

MySQL数据库的主备复制配置与故障处理

MySQL数据库的主备复制配置与故障处理引言:MySQL数据库的主备复制是一种常见的数据库高可用性方案,通过将主库的数据同步到备库,实现数据的故障容错和备份。

本文将介绍MySQL数据库主备复制的配置步骤以及常见的故障处理方法。

一、MySQL主备复制的配置步骤1. 确保主备服务器之间网络通畅,可以互相访问。

在进行主备复制配置之前,需要确保主备服务器之间的网络连接正常。

可以使用ping命令或者其他网络工具进行测试,确保主备服务器之间可以正常通信。

2. 配置主库的f文件在主库的f文件中,需要进行以下配置:i. 开启binlog功能:设置log_bin参数为ON,用于记录主库上的变更日志。

ii. 配置server_id:为主库设置一个唯一的server_id,用于标识主库。

iii. 配置binlog_format:设置binlog的格式,默认为ROW格式,该格式记录的是行级别的变更日志,更加详细和安全。

3. 配置备库的f文件在备库的f文件中,需要进行以下配置:i. 配置server_id:为备库设置一个唯一的server_id,用于标识备库。

ii. 配置relay_log和relay_log_index:用于记录备库上的中继日志,relay_log用于记录中继日志的内容,relay_log_index用于记录中继日志的位置。

iii. 配置read_only:将备库设置为只读模式,避免误操作。

4. 在主库上创建用于复制的账户,并授权给备库在主库上创建一个用于复制的账户,并授权给备库执行复制操作的权限。

5. 执行主备复制的相关命令在备库上执行如下命令,进行主备复制的相关配置:CHANGE MASTER TO MASTER_HOST='主库IP地址', MASTER_USER='用于复制的账户', MASTER_PASSWORD='账户密码', MASTER_PORT=主库端口号, MASTER_LOG_FILE='主库的binlog文件名', MASTER_LOG_POS=主库的binlog位置;START SLAVE;6. 验证主备复制是否配置成功可以通过SHOW SLAVE STATUS命令查看备库的复制状态,如果Slave_IO_Running和Slave_SQL_Running都为YES,则表示主备复制配置成功。

MySQL中的主备复制和故障切换技巧

MySQL中的主备复制和故障切换技巧

MySQL中的主备复制和故障切换技巧导言数据库的高可用性是保障系统稳定运行的重要因素之一。

而主备复制和故障切换是实现数据库高可用性的常用方法之一。

MySQL作为一种流行的关系型数据库管理系统,也提供了主备复制和故障切换的功能。

本文将为读者介绍MySQL中的主备复制和故障切换技巧,帮助读者了解如何搭建一个稳定可靠的MySQL数据库系统。

一、主备复制的原理主备复制是通过将主数据库上的操作记录(二进制日志)传递给备数据库来实现数据同步的过程。

主备复制的原理可以简单概括为以下几个步骤:1. 主库记录操作日志:主库将所有的增删改操作记录在二进制日志中。

2. 备库读取并应用日志:备库通过主库的二进制日志传输工具(如binlog传输或GTID)读取主库的二进制日志,并将读取到的日志应用到备库。

3. 备库复制主库操作:备库将主库的操作应用到自身数据库中。

通过上述步骤,主备之间的数据保持同步,从而实现了主备复制的功能。

二、搭建MySQL主备复制系统1. 配置主库首先,在主库上配置二进制日志。

编辑MySQL配置文件,添加以下配置:```[mysqld]log-bin=mysql-binserver-id=1```其中,log-bin指定了二进制日志的存放位置和文件名,server-id指定了主库的标识。

然后,重启MySQL服务使配置生效。

2. 配置备库在备库上配置与主库相同的二进制日志配置,并添加以下配置:```[mysqld]log-bin=mysql-binserver-id=2relay-log=mysql-relay-binread-only=1```其中,relay-log指定了备库的中继日志的存放位置和文件名,read-only设置备库为只读模式,确保备库不处理任何写操作。

重启MySQL服务使配置生效。

3. 设置主备连接在主库上创建用于备库连接的用户,并赋予复制权限。

打开MySQL命令行,执行以下命令:```GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';```其中,slave_user为连接备库时使用的用户名,password为密码。

MySQL数据库的主从复制与链式复制配置教程

MySQL数据库的主从复制与链式复制配置教程

MySQL数据库的主从复制与链式复制配置教程引言:MySQL是当前最为流行的关系型数据库管理系统之一,其主从复制和链式复制是常用的数据备份和容灾解决方案。

本文将介绍MySQL数据库的主从复制和链式复制的配置教程,帮助读者了解和实践这两种复制技术。

1. 主从复制的基本概念和原理主从复制是指将一个数据库的变更操作(增删改)自动复制到其他的数据库,其中一个数据库为主数据库,其他数据库为从数据库。

主从复制的原理是通过二进制日志(binary log)来实现,主数据库将变更操作记录到二进制日志中,从数据库通过读取二进制日志的内容来同步数据。

2. 主从复制的配置步骤(1)在主数据库中开启二进制日志功能;(2)在从数据库中配置主数据库的连接信息;(3)从数据库连接主数据库并开始复制。

3. 链式复制的概念和应用场景链式复制是指将一个数据库的变更操作不仅复制到从数据库,而且再次将变更操作复制到其他从数据库,形成一个复制链。

链式复制的应用场景主要包括数据多副本备份和分级灾备解决方案。

4. 链式复制的配置步骤(1)在主数据库中开启二进制日志功能;(2)在从数据库1中配置主数据库的连接信息;(3)在从数据库2中配置从数据库1的连接信息;(4)以此类推,直至配置完所有从数据库。

5. 主从复制和链式复制的优缺点比较主从复制的优点在于简单、易配置,适用于数据备份和读写分离等场景。

缺点在于单点故障、性能和数据一致性等方面。

链式复制的优点在于多副本备份、数据分级灾备等场景,可以提高系统的可用性和容灾能力。

缺点在于管理复杂、同步延时和网络传输等方面。

6. 主从复制和链式复制的性能优化(1)优化读写分离:可以将读操作分发到从数据库,减轻主数据库的负载;(2)优化网络传输:可以使用压缩算法减少网络传输的数据量;(3)优化同步延时:可以使用并行复制技术提高同步速度。

7. 注意事项和常见问题解决(1)配置文件的正确设置:主数据库和从数据库的配置文件需要正确设置参数,如服务器地址、端口号、用户权限等;(2)网络连接的稳定性:主从数据库之间的网络连接需要稳定,避免因为网络故障导致数据同步失败;(3)日志监控和故障处理:定期监控主从数据库的日志,及时处理同步延时或其他故障。

MySQL主从复制的常见问题与解决方案

MySQL主从复制的常见问题与解决方案

MySQL主从复制的常见问题与解决方案MySQL主从复制是一种常见的数据库复制技术,它可以将一个数据库(主库)的变更同步到其他多个数据库(从库),使得数据的读写操作可以同时在多个数据库中进行。

这种技术在分布式系统中广泛应用,能够提高数据库的性能和可用性。

然而,在实际应用中,MySQL主从复制也会遇到一些常见的问题。

本文将重点讨论这些问题并提供解决方案。

一、延迟复制问题MySQL主从复制的一个常见问题是延迟复制。

由于主库和从库之间的网络延迟或从库的负载过重,导致从库上的数据更新与主库有一定的时间差。

这种延迟可能会导致数据不一致问题,严重影响业务的正确性和稳定性。

解决方案:1. 优化网络连接:检查主从库之间的网络连接,并确保网络带宽足够大,延迟尽可能小。

2. 优化从库性能:如果从库的负载过重,可以考虑增加从库的内存和CPU资源,或者升级硬件设备。

3. 使用并行复制:MySQL 5.6及以上版本支持并行复制,在从库开启并行复制模式,可以提高复制的效率和减少延迟。

二、主从数据不一致问题MySQL主从复制过程中,可能会遇到数据不一致的问题,即从库上的数据与主库不一致。

常见的原因包括:网络故障,主库宕机,复制中断等。

这种问题往往需要及时解决,以避免数据丢失和业务异常。

解决方案:1. 检查主从状态:使用MySQL的命令SHOW SLAVE STATUS检查主从状态,确保主从复制处于正常运行状态。

2. 检查复制延迟:通过比较主库和从库的binlog位置,判断是否存在复制延迟。

如果延迟较大,可以考虑重启从库,重新建立主从复制连接。

3. 检查复制中断原因:如果发现复制中断,可以通过查看错误日志或者SHOW SLAVE STATUS输出,找到中断原因并进行相应的处理。

常见的中断原因有:主库宕机、从库空间不足、主库binlog日志满等。

4. 数据修复:如果数据不一致,可以通过手动修复或者重新同步数据来解决。

可以使用工具如pt-table-checksum和pt-table-sync进行数据校验和修复。

MySQL中的主从复制和故障切换技术

MySQL中的主从复制和故障切换技术

MySQL中的主从复制和故障切换技术引言MySQL作为最流行的开源数据库管理系统之一,广泛应用于各种规模的企业和项目中。

其中,主从复制和故障切换技术是MySQL的两个重要特性,可以提高数据库的可靠性和可用性。

本文将详细介绍MySQL中的主从复制和故障切换技术的原理、应用场景以及注意事项。

一、主从复制技术的原理主从复制(Master-Slave Replication)是一种数据库复制技术,在MySQL中被广泛使用。

其原理如下:当一个数据库服务器作为主服务器(Master)时,它可以将自己的数据变更记录在二进制日志(Binary Log)中。

而作为从服务器(Slave)的数据库服务器,则可以通过读取并解析主服务器的二进制日志来获取数据变更,并相应地在自己的数据库中进行更新。

这样,主从服务器之间的数据保持一致,从服务器可以用于读取查询,减轻主服务器的负载。

主从复制技术的应用场景多种多样。

例如,在高并发读写的场景下,通过将读操作分散到从服务器上,可以提高整体系统的并发能力。

另外,通过配置多个从服务器,还可以实现数据备份和灾难恢复的目的。

值得注意的是,主从复制技术并不适用于需要强一致性和实时性要求较高的应用场景。

二、主从复制技术的配置和使用注意事项在配置和使用主从复制技术时,需要注意以下几点。

1. 配置主服务器和从服务器的网络通信:主从服务器之间需要建立可靠的网络通信,以便进行数据同步。

可以使用本地局域网或者通过VPN等方式进行网络连接。

2. 确保主从服务器的数据库版本一致:为了确保主从服务器之间的数据同步正常,需要确保它们的数据库版本一致。

如果主服务器的版本较高,则需要降级或者升级从服务器的数据库版本。

3. 配置数据库参数:在配置主从复制技术时,需要根据具体需求调整数据库的参数。

例如,可以通过配置binlog_format参数来指定二进制日志格式,通过配置master_log_file和master_log_pos参数来指定主服务器的二进制日志文件和位置等。

MySQL如何查看复制信息与排查复制问题

MySQL如何查看复制信息与排查复制问题
Skip_Counter:0
上述错误信息并不是一个完整的错误信息描述,可以在error log中看到更完成的信息描述,以及发生错误的时间。
2017-04-18T03:19:00.037806Z23[ERROR] Slave SQLforchannel'': Worker0failed executing transaction'0c1b77a7-c113-11e6-9bd6-d4ae52a34783:4'at masterlogbinlog001.000002, end_log_pos605; Error'Can't create database'mydb3'; databaseexists' on query. Default database: 'mydb3'. Query: 'create database mydb3', Error_code: 1007
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 313885
SQL线程执行到的relay log的文件名和该relay log中的位置。
Relay_Master_Log_File: mysql-bin.000002
Exec_Master_Log_Pos: 316585
2.查看错误日志
进一步确认发生错误的原因,部分原因只会记录在错误日志中,不会在show slave status中展示。比如空间不足导致IO线程出错、比如网络中断导致IO线程异常等等。查看是否是由于其他用户正常关闭复制或者kill复制相关的线程导致复制不可用。
查看发生错误时,是否为刚刚启动复制、发生错误的语句是否为首条复制执行的语句。如果为首条语句,则需要考虑是否由于搭建复制错误的原因导致复制异常,是否由于意外宕机等其他因素导致复制相关二进制日志文件不正确。

MySQL主从复制、搭建、状态检查、中断排查及备库重做 实战手册

MySQL主从复制、搭建、状态检查、中断排查及备库重做 实战手册

美河学习在线MySQL主从复制MySQL主从复制、搭建、状态检查、中断排查及备库重做本文档主要对MySQL主从复制进行简单的介绍,包括原理简介、搭建步骤、状态检查、同步中断及排查、备库重建。

目录一、MySQL主从复制概述 (2)1、主从复制简介 (2)2、主从复制原理、机制 (2)3、主从复制原理图 (3)二、MySQL主从复制搭建 (4)1、Master端配置部署 (4)2、Slave端配置部署 (4)3、建立主从同步 (4)三、主从复制状态检查及异常处理 (6)1、主从复制状态检查 (6)2、IO_thread异常 (7)3、sql_thread异常 (8)4、主从复制延迟 (9)一、MySQL主从复制概述1、主从复制简介MySQL主从复制就是将一个MySQL实例(Master)中的数据实时复制到另一个MySQL实例(slave)中,而且这个复制是一个异步复制的过程。

实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(sql_thread和IO_thread),另外一个进程在 Master(IO进程)上。

2、主从复制原理、机制要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。

因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

复制的基本过程如下:1)、Slave上面的IO_thread连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;2)、Master接收到来自Slave的IO_thread的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO_thread。

返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log file的以及bin-log pos;3)、Slave的IO_thread接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;4)、Slave的Sql_thread检测到relay-log中新增加了内容后,会马上解析relay-log 的内容成为在Master端真实执行时候的那些可执行的内容,并在本数据库中执行。

MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

MySQL主从复制原理及配置详细过程以及主从复制集群⾃动化部署的实现⼀、复制概述Mysql内建的复制功能是构建⼤型,⾼性能应⽤程序的基础。

将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某⼀台主机的数据复制到其它主机(slaves)上,并重新执⾏⼀遍来实现的。

复制过程中⼀个服务器充当主服务器,⽽⼀个或多个其它服务器充当从服务器。

主服务器将更新写⼊⼆进制⽇志⽂件,并维护⽂件的⼀个索引以跟踪⽇志循环。

这些⽇志可以记录发送到从服务器的更新。

当⼀个从服务器连接主服务器时,它通知主服务器从服务器在⽇志中读取的最后⼀次成功更新的位置。

从服务器接收从那时起发⽣的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进⾏复制时,所有对复制中的表的更新必须在主服务器上进⾏。

否则,你必须要⼩⼼,以避免⽤户对主服务器上的表进⾏的更新与对从服务器上的表所进⾏的更新之间的冲突。

⼆、MySQL⽀持复制的类型也就是⼆进制⽇志格式:1. 基于语句的复制:在主服务器上执⾏的SQL语句,在从服务器上执⾏同样的语句。

MySQL默认采⽤基于语句的复制,效率⽐较⾼2. 基于⾏的复制:把改变的内容复制过去,⽽不是把命令在从服务器上执⾏⼀遍. 从mysql5.0开始⽀持3. 混合类型的复制: 默认采⽤基于语句的复制,⼀旦发现基于语句的⽆法精确的复制时,就会采⽤基于⾏的复制。

三、复制的特点:数据分布负载均衡备份⾼可⽤性和可⽤⾏四、复制进程的实现:Mysql的复制(replication)是⼀个异步或半同步的复制,从⼀个Mysql 实例(称之为Master)复制到另⼀个Mysql 实例(称之Slave)。

实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外⼀个进程在 Master(IO进程)上。

要实施复制,⾸先必须打开Master端的binary log(bin-log)功能,否则⽆法实现。

MySQL主从复制配置与管理指南

MySQL主从复制配置与管理指南

MySQL主从复制配置与管理指南引言MySQL是一种常见的关系型数据库管理系统,被广泛应用于各种Web应用和企业级软件中。

在实际应用中,经常需要对数据库进行高可用性配置和管理。

MySQL主从复制是一种常用的数据复制技术,可以提供数据备份、负载均衡和故障恢复等功能。

本文将介绍MySQL主从复制的配置与管理方法。

一、MySQL主从复制概述MySQL主从复制是指将一个MySQL数据库的数据同步到另一个MySQL数据库的过程。

其中,原始数据库被称为主数据库(Master),复制数据库被称为从数据库(Slave)。

主从复制主要包含两个步骤:1)主数据库将变更记录写入二进制日志(Binary Log);2)从数据库连接主数据库,并读取并应用主数据库的二进制日志,将变更应用到从数据库中。

通过这种方式,主数据库可以实时同步数据到从数据库,实现数据的备份和故障恢复。

二、MySQL主从复制的配置步骤1. 确保主数据库与从数据库的MySQL版本一致,以及操作系统和硬件的兼容性。

2. 在主数据库上开启二进制日志功能,在配置文件中设置`log-bin`参数,并重启MySQL服务。

3. 在主数据库上创建用于复制的用户,并给予适当的权限,以便从数据库能够连接并读取二进制日志。

4. 在从数据库上配置相应的主从复制参数,包括`server-id`、`master-host`、`master-port`、`master-user`和`master-password`等,并重启MySQL服务。

5. 在从数据库上执行启动复制命令,开始与主数据库进行数据同步。

这可以通过`CHANGE MASTER TO`命令来实现。

三、MySQL主从复制的管理方法1. 监控主从复制状态通过执行`SHOW SLAVE STATUS`命令,可以查看主从复制的状态信息,包括复制是否正常运行、延迟情况、错误日志等。

这些信息对于检测主从复制是否正常运行以及及时定位问题非常有帮助。

MySQL如何查看复制信息与排查复制问题

MySQL如何查看复制信息与排查复制问题

MySQL如何查看复制信息和排查复制问题复制作为MySQL原生的数据同步功能,在MySQL高可用架构中起着至关重要的作用。

本文梳理了在运维本公司MySQL高可用产品UDB的过程中遇到的复制问题,并总结了当复制发生异常时,排查复制异常的方法。

错误排查01收集复制信息在复制发生异常时,我们首先要收集复制相关的信息以及错误相关的信息,主要通过如下手段收集。

1.查看show slave status执行命令"show slave status"查看复制相关信息。

主要关注以下几条信息:Master_Log_File: mysql-bin.000063Read_Master_Log_Pos: 9IO线程读取到的主库的binlog文件名和该binlog中的位置。

这两个字段代表复制过程中binlog由主库传输到备库的进度。

Relay_Log_File: mysql-relay.000002Relay_Log_Pos: 313885SQL线程执行到的relay log的文件名和该relay log中的位置。

Relay_Master_Log_File: mysql-bin.000002Exec_Master_Log_Pos: 316585SQL线程执行到的relay log对应的主库中的binlog文件名和该binlog的位置。

这四个字段代表复制过程中,主库的数据在备库上重放的进度。

Slave_IO_Running: YesSlave_SQL_Running: No当前发生问题的是哪个线程,IO线程或者时SQL线程。

Retrieved_Gtid_Set: ed7c5ee4-762d-11e6-ab9e-6c92bf24c36a:14-3920163 Executed_Gtid_Set: 04ffb4f5-762e-11e6-81e4-6c92bf26c5c2:1这两个字段在开启GTID后才有意义。

MySQL的复制与迁移方案及其实施方法

MySQL的复制与迁移方案及其实施方法

MySQL的复制与迁移方案及其实施方法引言随着信息技术的快速发展,数据库的复制和迁移已经成为企业数据管理中的重要环节。

MySQL作为最流行的关系型数据库之一,其复制与迁移方案也备受关注。

本文将介绍MySQL的复制和迁移方案,以及其实施方法,为读者提供一些有价值的参考。

一、MySQL复制方案MySQL的复制是指将一个MySQL数据库的数据复制到另一个MySQL数据库的过程。

这种复制方式可以实现数据的冗余备份、负载均衡和高可用性。

MySQL的复制方案主要有以下几种:1. 主从复制:主从复制是最常用的MySQL复制方案。

它通过将一个MySQL数据库指定为主库(Master),将其他MySQL数据库指定为从库(Slave),将主库的数据变更事件以日志的形式传播到从库,从而实现数据的同步复制。

主从复制具有易于配置和部署、高可用性、可扩展性等优势。

2. 级联复制:级联复制是在主从复制的基础上进行的一种扩展。

它允许一个从库再充当下一个从库的主库,从而形成一个复杂的主从链路。

级联复制在多数据中心的场景下具有很大的价值,可以实现地域灾备和异地读写分离。

3. 环形复制:环形复制是主从复制和级联复制的进一步扩展。

它允许多个MySQL数据库之间形成一个环形拓扑结构,数据变更事件可以在环形链路中传播。

环形复制在分布式数据库的场景下具有较大的应用潜力,但也需要解决数据一致性和冲突处理问题。

二、MySQL迁移方案MySQL的迁移是指将MySQL数据库从一个环境迁移到另一个环境的过程。

迁移可以包括数据库的结构迁移和数据的迁移。

MySQL的迁移方案主要有以下几种:1. 基于物理备份的迁移:基于物理备份的迁移是将MySQL数据库的数据文件和日志文件直接拷贝到目标环境中。

这种迁移方式简单快速,适用于较小规模的数据库和紧急迁移需求。

但需要注意的是,源数据库和目标数据库的硬件和操作系统环境要尽可能保持一致。

2. 基于逻辑备份的迁移:基于逻辑备份的迁移是将MySQL数据库的逻辑结构和数据以SQL语句的形式导出,并在目标环境中重新执行这些SQL语句。

MySQL主从同步和复制延迟问题排查

MySQL主从同步和复制延迟问题排查

MySQL主从同步和复制延迟问题排查在MySQL数据库集群中,主从同步和复制延迟是一些常见的问题。

主从同步是一种常用的数据复制方式,用于将主数据库上的数据变更同步到从数据库中。

而延迟问题则指的是主数据库上的数据变更在从数据库上出现的时差。

本文将介绍MySQL主从同步的原理、常见的问题以及如何排查和解决这些问题。

一、MySQL主从同步原理MySQL主从同步是通过binlog和relay log实现的。

主数据库将其数据变更写入到binlog中,从数据库通过读取binlog的内容,并将这些变更应用到自己的数据库中实现数据同步。

主从同步有两种实现方式:基于语句的复制和基于行的复制。

基于语句的复制是指主数据库中的写操作会以SQL语句的形式记录在binlog中,然后从数据库会读取binlog中的SQL语句并在自己上面执行。

而基于行的复制则是主数据库会将变更操作以行的形式记录在binlog中,从数据库则会读取binlog中的行数据并在自己上面重放这些操作。

二、常见的主从同步问题1. 数据延迟主从同步中最常见的问题就是数据延迟。

数据延迟指的是主数据库上的数据变更在从数据库上出现的时差。

造成数据延迟的原因有很多,比如网络延迟、主数据库负载过高、从数据库负载过高等。

2. 主从同步停止有时候主从同步会突然停止,导致从数据库无法及时同步主数据库的数据变更。

主从同步停止的原因有很多,比如网络故障、主数据库故障、从数据库故障等。

三、排查和解决主从同步问题的方法1. 检查网络状态网络状态是导致数据延迟和主从同步停止的常见因素之一。

可以通过ping命令或者其他网络工具检查主从数据库之间的网络连通性和延迟。

如果发现网络延迟较大,可能需要优化网络环境,或者考虑使用更稳定的网络连接方式。

2. 检查主数据库的负载主数据库的负载过高可能导致数据变更写入binlog的速度减慢,进而导致数据延迟。

可以通过查看主数据库的系统负载、CPU使用率、磁盘IO等指标来评估主数据库的负载情况。

MySQL如何查看复制信息与排查复制问题

MySQL如何查看复制信息与排查复制问题

MySQL如何查看复制信息和排查复制问题复制作为MySQL原生的数据同步功能,在MySQL高可用架构中起着相当重要的作用。

本文梳理了在运维本公司MySQL高可用产品UDB的进程中碰到的复制问题,并总结了当复制发生异样时,排查复制异样的方式。

错误排查01搜集复制信息在复制发生异样时,咱们第一要搜集复制相关的信息和错误相关的信息,要紧通过如下手腕搜集。

1.查看show slave status执行命令"show slave status"查看复制相关信息。

要紧关注以下几条信息:Master_Log_File: mysql-bin.000063Read_Master_Log_Pos: 282657539IO线程读取到的主库的binlog文件名和该binlog中的位置。

这两个字段代表复制进程中binlog 由主库传输到备库的进度。

Relay_Log_File: mysql-relay.000002Relay_Log_Pos: 313885SQL线程执行到的relay log的文件名和该relay log中的位置。

Relay_Master_Log_File: mysql-bin.000002Exec_Master_Log_Pos: 316585SQL线程执行到的relay log对应的主库中的binlog文件名和该binlog的位置。

这四个字段代表复制进程中,主库的数据在备库上重放的进度。

Slave_IO_Running: YesSlave_SQL_Running: No当前发生问题的是哪个线程,IO线程或时SQL线程。

Retrieved_Gtid_Set: ed7c5ee4-762d-11e6-ab9e-6c92bf24c36a:14-3920163Executed_Gtid_Set: 04ffb4f5-762e-11e6-81e4-6c92bf26c5c2:1这两个字段在开启GTID后才成心义。

MySQL主从复制的配置与使用方法

MySQL主从复制的配置与使用方法

MySQL主从复制的配置与使用方法MySQL主从复制是一种常见且重要的数据库复制技术,它可以实现数据库数据的备份以及读写分离,提高数据库的可用性和性能。

本文将介绍MySQL主从复制的配置和使用方法,帮助读者理解和应用这一技术。

一、什么是主从复制主从复制是指通过复制主数据库的数据和操作日志到从数据库,使得从数据库与主数据库的数据保持一致。

主从复制的基本原理是主数据库将数据变更写入二进制日志(binary log),从数据库读取并执行这些日志来达到主从数据一致的目的。

主从复制的优点有:1. 数据备份:从数据库作为主数据库的一个副本,可以作为灾难恢复的备份使用;2. 负载均衡:主数据库负责写操作,从数据库负责读操作,提高数据库的整体性能;3. 可用性提高:当主数据库宕机时,从数据库可以顶替其角色,保证系统的正常运行。

二、配置主从复制配置主从复制需要经历以下几个步骤:1. 创建主数据库首先,我们需要创建一个主数据库,并开启二进制日志功能。

在MySQL配置文件(如f)中,设置以下参数:```log_bin = /var/log/mysql/binlog #二进制日志的路径server_id = 1 #设置主数据库的唯一标识```重启MySQL使配置生效。

2. 创建从数据库在从数据库的MySQL配置文件中,设置以下参数:```server_id = 2 #设置从数据库的唯一标识```同样,重启MySQL使配置生效。

3. 设置主数据库的复制账户在主数据库中创建一个用于复制的账户,并给予复制权限。

具体操作如下:```CREATE USER 'replication'@'从数据库IP' IDENTIFIED BY '密码';GRANT REPLICATION SLAVE ON *.* TO 'replication'@'从数据库IP';```其中,'从数据库IP'为从数据库服务器的IP地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

美河学习在线
MySQL主从复制
MySQL主从复制、搭建、状态检查、中断排查及备库重做
本文档主要对MySQL主从复制进行简单的介绍,包括原理简介、搭建步骤、状态检查、同步中断及排查、备库重建。

目录
一、MySQL主从复制概述 (2)
1、主从复制简介 (2)
2、主从复制原理、机制 (2)
3、主从复制原理图 (3)
二、MySQL主从复制搭建 (4)
1、Master端配置部署 (4)
2、Slave端配置部署 (4)
3、建立主从同步 (4)
三、主从复制状态检查及异常处理 (6)
1、主从复制状态检查 (6)
2、IO_thread异常 (7)
3、sql_thread异常 (8)
4、主从复制延迟 (9)
一、MySQL主从复制概述
1、主从复制简介
MySQL主从复制就是将一个MySQL实例(Master)中的数据实时复制到另一个MySQL实例(slave)中,而且这个复制是一个异步复制的过程。

实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(sql_thread和IO_thread),另外一个进程在 Master(IO进程)上。

2、主从复制原理、机制
要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。

因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

复制的基本过程如下:
1)、Slave上面的IO_thread连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2)、Master接收到来自Slave的IO_thread的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO_thread。

返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log file的以及bin-log pos;
3)、Slave的IO_thread接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4)、Slave的Sql_thread检测到relay-log中新增加了内容后,会马上解析relay-log 的内容成为在Master端真实执行时候的那些可执行的内容,并在本数据库中执行。

3、主从复制原理图
二、MySQL主从复制搭建
MySQL主从复制搭建主要步骤有:Master端配置部署、Slave端配置部署、建立主从同步
1、Master端配置部署
a、配置参数:
b、创建用户,并赋予权限:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY PASSWORD '******';
2、Slave端配置部署
a、配置参数:
3、建立主从同步
(重建备库也是使用该方法)
建立主从同步可以从主库上导出数据,也可以从已有的从库上导出数据,然后再导入到新的从库中,change master to建立同步。

3.1 、导出数据
在主库上导出数据:
mysqldump -u*** -p*** -S /data/mysql6001/mysql.sock --default-character-set=utf8 -q
--single-transaction --master-data -A > /tmp/all_database.sql
(或者)在从库上导出数据:
mysqldump -u*** -p*** -S /data/mysql6001/mysql.sock --default-character-set=utf8 -q --single-transaction --dump-slave -A > /tmp/all_database.sql
NOTES:
--master-data和--dump-slave导出的备份中,会包含master_log_file和master_log_pos信息。

3.2 、从库导入数据
mysql -u*** -p*** --default-character-set=utf8 < all_database.sql
NOTES:
此处导入脚本,就已经在从库中执行了以下操作:
3.3 、从库与主机建立同步
指定与主库同步的基本信息后,就可以启动slave进程了:(IO_thread和sql_thread)
三、主从复制状态检查及异常处理
1、主从复制状态检查
主库查看binlog情况:
2、IO_thread异常
IO_thread异常,状态往往是Slave_IO_Running: Connecting 或NO。

IO_thread是向Master发送请求读取master binlog,如果处于Connecting状态,说明无法正确地与Master进行连接,可能的原因有:
a、网络不通(是否打开防火墙)
b、复制用户的密码不对
c、指定的master_port端口不对
d、master上的mysql-bin.xxxxxx被误删
e、主库磁盘空间满了
通过show slave status\G可以看到相关错误信息,例如:
或者通过错误日志看到相关信息,如:
3、sql_thread异常
sql_thread发生异常,状态就会变为Slave_SQL_Running: NO。

sql_thread发生异常的情况非常多,发生异常后,需要通过以下方法排查和解决:
a、对比主库和从库的二进制日志的情况:
b、通过show slave status\G查看错误信息:
c、通过错误日志查看错误信息:
根据这些报错信息,往往就能够定位到发生异常的原因。

如果我们了解产生异常的具体事件,而且能够掌控,可以通过设置sql_slave_skip_counter参数来跳过当前错误。

或者使用slave_skip_errors参数(read only variable),指定跳过某种类型的错误:
遇到错误时,不要一通百度后,然后根据看起来很类似的操作直接来进行操作。

因为网上大部分解决sql_thread异常的方法是:
a、直接set global sql_slave_skip_counter=n; (n设置很大的值,即:跳过所有错误),
b、设置slave_skip_errors=all;跳过所有类型的错误
c、直接查看主库的binlog,然后在从库上直接执行change master to。

这些方法都会导致主从数据不一致。

如果发现从库与主库差异太大,无法通过手动操作或数据修改重新建立同步。

可以参考上述"MySQL主从复制搭建" 重新搭建从库。

4、主从复制延迟
主从复制延迟,可能的原因有:
a、主从同步延迟与系统时间的关系,查看主从两台机器间系统时间差
b、主从同步延迟与压力、网络、机器性能的关系,查看从库的io,cpu,mem及网络压

c、主从同步延迟与lock锁的关系(myisam表读时会堵塞写),尽量避免使用myisam 表。

一个实例里面尽量减少数据库的数量。

d、主从复制发生异常而中断,过很久之后才发现复制异常。

可通过查看master与slave的status估算相差的日志。

如果相差太大,则可以考虑重做从库。

相关文档
最新文档