mysql主从复制

简介:

一、mysql异步同步

    怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下:

wKioL1bijwHhWDO_AACki5mAlXk627.jpg

1、主从服务器分别作以下操作

  • 版本一致

  • 初始化表,并在后台启动mysql

  • 修改root的密码

     master:192.168.0.21

     slave  :192.168.0.211

slave数据库的版本不可以比master数据库的版本高

2、修改主服务器master

1
2
3
4
5
6
#vim /etc/my.cnf
[mysqld]
log-bin=master-bin                #[必须]启用二进制日志
log-bin-index=master-bin.index    #二进制日志索引
server- id =1                       #[必须]服务器唯一ID,默认是1,一般取IP最后一段
innodb_file_per_table=1           #innodb分表

3、修改从服务器slave

1
2
3
4
5
6
7
#vim /etc/my.cnf
[mysqld]
relay-log=slave-bin                #[必须]启用二进制日志
relay-log-index=salve-bin.index    #中继日志索引
read -only=YES                      #数据库只读
server- id =2                        #[必须]服务器唯一ID,默认是1,一般取IP最后一段
innodb_file_per_table=1            #innodb分表

4、重启两台服务器的mysql

1
/etc/init .d /mysql  restart

5、在主服务器上建立帐户并授权slave

1
2
mysql>GRANT REPLICATION SLAVE ON *.* to  'mysync' @ '192.168.0.211'  identified by  'q123456' #一般不用root帐号
mysql>flush privileges;

6、登录主服务器的mysql,查询master的状态

1
2
3
4
5
6
7
mysql>show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mater-bin.000004 |      308 |              |                  |
+------------------+----------+--------------+------------------+
1 row  in  set  (0.00 sec)

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave

1
2
3
4
5
6
7
8
#注意不要断开,“308”无单引号。
mysql>change master to master_host= '192.168.0.21' ,master_user= 'mysync' ,master_password= 'q123456' ,
          master_log_file= 'master-bin.,000004' ,master_log_pos=308;   
mysql>flush privileges;               #刷新权限;
show variables like  '' ;               #查看数据库配置信息;
mysql>start slave;                    #启动从服务器复制功能
mysql> START SLAVE IO_Thread;         #可以开启关闭
mysql> START SLAVE SQL_Thread;        #可以开启关闭

8、检查从服务器复制功能状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> show slave status\G
  *************************** 1. row ***************************
                 Slave_IO_State: Waiting  for  master to send event
                    Master_Host: 192.168.0.21     #主服务器地址
                    Master_User: myrync           #授权帐户名,尽量避免使用root
                    Master_Port: 3306             #数据库端口,部分版本没有此行
                  Connect_Retry: 60
                Master_Log_File: mysql-bin.000004
            Read_Master_Log_Pos: 600         #同步读取二进制日志的位置,大于等于>=Exec_Master_Log_Pos
                 Relay_Log_File: ddte-relay-bin.000003
                  Relay_Log_Pos: 251
          Relay_Master_Log_File: mysql-bin.000004
               Slave_IO_Running: Yes         #此状态必须YES
              Slave_SQL_Running: Yes         #此状态必须YES
                     ......

   注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

   以上操作过程,主从服务器配置完成。

9、如果出现Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

    在master那边,执行:

1
2
mysql>flush logs;
mysql>show master status;

    记下File, Position。

    在slave端,执行:

1
2
3
mysql>CHANGE MASTER TO MASTER_LOG_FILE= 'master-bin.000008' ,MASTER_LOG_POS=107;
mysql>slave start;
mysql>show slave status \G

    一切正常。

二、mysql半同步设置

在Master和Slave的mysql命令行运行如下代码:

1
2
3
4
5
6
7
8
9
# On Master  
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME  'semisync_master.so' ;  
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;  
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;  
 
# On Slave  
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so' ;  
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;  
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

在Master和Slave的my.cnf中编辑:

1
2
3
4
5
6
7
8
# On Master  
[mysqld]  
rpl_semi_sync_master_enabled=1  
rpl_semi_sync_master_timeout=1000  # 1 second 
  
# On Slave  
[mysqld]  
rpl_semi_sync_slave_enabled=1

也可通过设置全局变量的方式来设置,如下:

1
set  global rpl_semi_sync_master_enabled=1

取消加载插件

1
2
mysql> UNINSTALL PLUGIN rpl_semi_sync_master;
==============================================

查看从服务器上的semi_sync是否开启:

1
mysql> SHOW GLOBAL STATUS LIKE  'rpl_semi%' ;

查看主服务器上的semi_sync是否开启,slave需要重启一下io_thread,注意clients 变为1 ,证明主从半同步复制连接成功:

1
mysql> SHOW GLOBAL STATUS LIKE  'rpl_semi%' ;

三、双主同步复制设置

1、在两台服务器上各自建立一个具有复制权限的用户

1
2
3
4
#server1
mysql> GRANT REPLICATION SLAVE ON *.* TO  'slave' @ '192.168.1.211'  IDENTIFIED BY  'slave' ;
#server2
mysql> GRANT REPLICATION SLAVE ON *.* TO  'slave1' @ '192.168.1.21'  IDENTIFIED BY  'slave' ;

2、修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 主服务器上
[mysqld]
server- id  = 10
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 1
 
 
# 从服务器上
[mysqld]
server- id  = 20
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 2

3、如果此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#server1
mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 710
     Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row  in  set  (0.00 sec)
 
#server2
mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 811
     Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row  in  set  (0.00 sec)

4、各服务器接下来指定对另一台服务器为自己的主服务器即可

1
2
3
4
5
#server1
mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE= 'mysql-bin.000003' , MASTER_LOG_POS=811;
 
#server2
mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE= 'mysql-bin.000001' , MASTER_LOG_POS=710;

四、基于GTID的mysql复制

    MySQL 5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。

    要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:

  • binlog-format:二进制日志的格式,有row、statement和mixed几种类型;

    需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;

  • log-slave-updates、gtid-mode、enforce-gtid-consistency、report-port和report-host:用于启动GTID及满足附属的其它需求;

  • master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;

  • sync-master-info:启用之可确保无信息丢失;

  • slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;

  • binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;

  • binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;

  • log-bin:启用二进制日志,这是保证复制功能的基本前提;

  • server-id:同一个复制拓扑中的所有服务器的id号必须惟一;

1、配置主从节点的服务配置文件

1.1、配置master节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mysqld]
binlog- format =ROW
log-bin=master-bin
log-slave-updates= true
gtid-mode=on 
enforce-gtid-consistency= true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync -master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server- id =1
report-port=3306
port=3306
datadir= /mydata/data
socket= /tmp/mysql .sock
report-host=192.168.1.21

1.2、配置slave节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mysqld]
binlog- format =ROW
log-slave-updates= true
gtid-mode=on 
enforce-gtid-consistency= true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync -master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server- id =11
report-port=3306
port=3306
log-bin=mysql-bin.log
datadir= /mydata/data
socket= /tmp/mysql .sock
report-host=192.168.1.211

2、创建复制用户

1
mysql> GRANT REPLICATION SLAVE ON *.* TO slave@192.168.1.211 IDENTIFIED BY  'slave' ;

    说明:192.168.1.211是从节点服务器;如果想一次性授权更多的节点,可以自行根据需要修改;

3、为备节点提供初始数据集

    锁定主表,备份主节点上的数据,将其还原至从节点;如果没有启用GTID,在备份时需要在master上使用show master status命令查看二进制日志文件名称及事件位置,以便后面启动slave节点时使用。

4、启动从节点的复制线程

    如果启用了GTID功能,则使用如下命令:

1
2
3
mysql> CHANGE MASTER TO MASTER_HOST= '192.168.1.21' , MASTER_USER= 'slave' , MASTER_PASSWORD= 'slave'
MASTER_AUTO_POSITION=1
;

    没启用GTID,需要使用如下命令:

1
2
3
4
5
slave> CHANGE MASTER TO MASTER_HOST= '192.168.1.21' ,
-> MASTER_USER= 'slave' ,
-> MASTER_PASSWORD= 'slave' ,
-> MASTER_LOG_FILE= 'master-bin.000003' ,
-> MASTER_LOG_POS=1174;


http://www.linuxidc.com/Linux/2013-10/90800.htm




     本文转自 wzlinux 51CTO博客,原文链接:http://blog.51cto.com/wzlinux/1607016,如需转载请自行联系原作者


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
557 1
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
528 1
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
419 40
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
1004 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
2013 11
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
437 24
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
509 14
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
1820 1
MySQL主从复制原理和使用
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
603 0
Mysql中搭建主从复制原理和配置
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
390 6

推荐镜像

更多