`
wbj0110
  • 浏览: 1596783 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Ubuntu下MySQL搭建Master Slave

阅读更多

一、背景知识

(一) Replication

MySQL的replication是异步的,适用于对数据实时性要求不是特别关键的场景。slave端的IO线程负责从master读取日志,SQL线程专门负责在slave端应用从master读过来的日志。 使用replication必须启用binary log,MySQL用binary log向slave分发更新。

(二) 复制级别

1.      Row Level:5.1.5开始支持。mater记录每行数据的更改日志,slave根据日志逐行应用。优点:数据一致性更有保障。缺点:可能造成日志文件比较大;

2.      Statement Level:master记录每个执行的query语句以及一些上下文信息,slave节点根据这些信息重新在slave上执行。优点:binary log比较小。缺点:某些情况下数据一致性难以保障;

3.      Mixed Level:MySQL根据情况选择哪种复制方式。5.1.8开始支持。

(三) 常用架构

1.      Master-Slaves:通常都采用这种方式;

2.      Dual Master(Master-Master):2个master节点互相同步更新。因为MySQL的异步复制方式,为了防止数据冲突造成的不一致性,一般仅将其中一台用于写操作,另一台不用或仅用于读操作。目的是其中一台master停机维护或者故障中断时可以使用另一台master;

3.      级联复制(Master-Slaves-Slaves):在Master Slaves中,如果slaves过多replication将增加master的负载,这时可以让master只向其中几台slave分发更新日志,这几台slave作为一级节点再向下级节点分发更新日志。

4.     总结

3个线程:2个IO线程,1个sql线程;

2种日志:binlog,realylog;

1种实现:全程异步;

 

二、测试环境与内容

环境:Ubuntu 10.04.2 LTS + MySQL5.1.41-3ubuntu12.10-log

主服务器(Master):192.168.1.126

从服务器(Slave):192.168.1.145

由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的 MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。

搭建主从服务器需要完成下面两个步骤:

1)     MySQL启用Binary Log

2)     配置主服务器(Master)

3)     配置从服务器(Slave)

4)     测试插入数据

 

三、搭建过程

(一) MySQL启用Binary Log

Binary Log的运作原理很简单,它只是单纯的将所有会修改到数据库内容的操作记录在 Log 文件中,然后通过这个Binary Log 你就可以重新执行所有会修改到数据库内容的操作。

在vim /etc/mysql/my.cnf的 [mysqld] 区块中加上 log-bin=mysql-bin 选项,然后重新启动 MySQL Server:service mysql restart

查看日志:show master logs;

(图:设置Binary Log之前)

(图:设置Binary Log之后)

启用后你应该可以在 MySQL 的 Data Dir 里面发现如下的文件:mysql-bin.00000X

(图:日志文件目录:/var/lib/mysql 日志文件:mysql-bin.000001)

 

(二) 配置主服务器(Master)

1.     编辑数据库配置文件my.cnf

一般在/etc/mysql/my.cnf,执行#vim /etc/mysql/my.cnf

在[mysqld]的下面加入下面代码:

log-bin=mysql-bin

server-id=1

innodb_flush_log_at_trx_commit=1

sync_binlog=1

binlog_do_db=weibo

binlog_ignore_db=mysql

说明:

1)     log-bin=mysql-bin启用Binary Log;

2)     server-id=1中的1可以任定义,只要是唯一的就行;

3)     innodb_flush_log_at_trx_commit=1

4)     sync_binlog=1

5)     binlog_do_db=weibo是表示只备份weibo;(binlog-do-db)

6)     binlog_ignore_db=mysql表示忽略备份mysql;
不加binlog_do_db和binlog_ignore_db,那就表示备份全部数据库。

2.     重启MySQL

#service mysql restart

3.     登录MySQL服务器

#mysql –u root -p

在主服务器新建一个用户赋予“REPLICATION SLAVE”的权限。你不需要再赋予其它的权限。

mysql>CREATE USER viajar@ '192.168.1.145' IDENTIFIED BY '123456';

mysql>GRANT REPLICATION SLAVE ON *.* TO viajar@ '192.168.1.145' IDENTIFIED BY '123456';

 

省略了几个步骤(可以补上)

 

4.     再次连接数据库进入mysql命令行查看master状态

mysql>SHOW MASTER logs;

mysql>SHOW MASTER STATUS;

记下File及Position的值,后面做从服务器操作的时候需要用.

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000004 |      583 | weibo        | mysql            |

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

 

(三) 配置从服务器(Slave)

1.     编辑数据库配置文件my.cnf

在[mysqld]的下面加入下面代码:

server-id=2

可以自己定义,只要保证唯一的就行。

2.     重启MySQL

#service mysql restart

 

3.     登录MySQL服务器

#mysql –u root -p

执行以下命令:

mysql>CHANGE MASTER TO

MASTER_HOST='192.168.1.126',

MASTER_USER='viajar',

MASTER_PASSWORD='123456',

MASTER_PORT=3306,

MASTER_LOG_FILE='mysql-bin.000004',

MASTER_LOG_POS=583,

MASTER_CONNECT_RETRY=10;

说明:

MASTER_HOST:主服务器的IP;

MASTER_USER:配置主服务器时建立的用户名;

ASTER_PASSWORD:用户密码;

ASTER_PORT:主服务器mysql端口,如果未曾修改,默认即可。

或者是执行:

mysql> change master to master_host='192.168.1.126', master_user='viajar', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=106;

4.     启动Slave进程

mysql>START SLAVE;

5.     查看MySQL的日志

mysql的日志,一般在/var/log/目录下的mysql.log,如果启动成功,你应该会看到类似下面的日志:

6.     主从同步检查

mysql>show slave status\G;

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。\G的好处就是以下图的格式进行显示,\g是没有这个效果的。

 

(四) 测试插入数据

使用SQLyog链接到192.168.1.126(以下用126表示)与192.168.1.145(以下用145表示),在126上执行插入操作:

INSERT INTO `blog` (`TaskID`, `Content`, `Quote`, `Author`, `Time`, `Url`, `ImageUrl`, `Transmits`, `Comments`, `Hash`, `AddOn`)

VALUES('5','fefef','fefef','efef','2012-02-03 11:30:40',

'http://www.cnblogs.com/zgx/archive/2011/09/13/2174823.html',NULL,'0',

'0','33333333','2012-02-04 11:30:54');

(图:126)

(图:145)

当在145上执行:TRUNCATE TABLE blog;(SQLyog按F8执行)之后,在126上执行插入的时候,只有新的数据会传递到145上;

(图:126)

(图:145)

 

四、补充

查看帮助:mysql>help

查看slave帮助:mysql>help slave

       查看slave状态:show slave status\G;

查找当前有哪些二进制日志文件:mysql> show binary logs;

删除mysql-bin.000018之前的所有二进制日志文件:mysql> purge binary logs to 'mysql-bin.000018';

从 MySQL 5.1.12 开始,能够用以下三种形式来告终:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混杂形式复制(mixed-based replication, MBR)。相应地,binlog的款式也有三种:STATEMENT,ROW,MIXED。MBR 形式中,SBR 形式是默认的。

#binlog_format="STATEMENT"
#binlog_format="ROW"
#binlog_format="MIXED"

当然了,也能够在运行时动态修正binlog的款式。例如

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

MySQL同步故障:Slave_SQL_Running:No

mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;

 

五、疑问

1.      如果导入导出数据库数据?

2.      Master/Slave的深入知识是什么?需要注意什么设置选项(包括Linux和MySQL的选项)?性能如何评估?延时多少?Binary Log应该设置多大为合适?

3.      [mysqld] log-bin = /var/lib/mysql/mysql-bin.* 这样设置有什么不一样?

4.      binlog-do-db=weibo与binlog_do_db=weibo会有不同嘛?

5.      查看MySQL的日志好像里面的内容为空?

6.      尝试Master-Slave-Slave模式,性能有相差很大?

7.      另外你可能需要设置主服务器的数据库二进制日志的过期时间,可以在配置文件/etc/mysql/my.cnf中使用参数expire_logs_days来设定。mysql-bin.00000X(mysql的日志文件、二进制日志文件)的增长规律是什么?每天一个文件?重启一次生成一个新文件?

8.      如果slave报错或者宕机一段时间,那么应该如何重新同步宕机时间master的数据到slave呢?

9.      如何设置、查看复制的级别?Row Level、Statement Level、Mixed Level?跟Binary Log的关系,本身Innodb的log是不同的,Binary Log的大小要如何设置?

10.   设置了bin-log的起始位置,那么如果设置日志文件最大值,那分了日志后会如何呢?返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;

 

六、参考文献

Linux MySQL主从复制(Replication)配置(大体上正确,目录有问题)

mysql 主从复制读写分离实现(正确的change master)

mysql master/slave 使用感受

mysql 动态生成测试数据

[MySQL管理] mysql主从复制,读写分离 (MySQL Proxy)

MySQL 使用 binary log 回复某段时间区间的资料启用Binary Log)

MySQL数据库灾难恢复启用Binary Log)

Binary Logging of Stored Programs

搭建MySQL的Master/Slave架构(Windows)

MySQL复制级别

MySQL 复制原理与实际操作过程

复制参数binlogformat(日志级别)

mysql log-bin 日志文件(查看日志+删除日志)

检查MySQL的Slave是否正常(脚本)

Slave_SQL_Running: No mysql同步故障解决方法(数据同步)

MySQL-Proxy负载平衡测试遇到的问题及其分析 && MySQL-Proxy工作机制

mysql主从服务器搭建配置(配置例子)

分享到:
评论

相关推荐

    ubuntu完全分布式搭建CDH集群(Cloudera Manager)

    ### Ubuntu 完全分布式搭建 CDH 集群(Cloudera Manager) #### 搭建环境概述 本文档旨在详细介绍如何在 Ubuntu 14.04.3 系统下构建一个完整的 Cloudera Manager (CM) 管理的 CDH 集群。该集群将使用三台物理...

    ubuntu server下安装mysql 以及设置双机热备份

    Ubuntu Server 下安装 MySQL 及设置双机热备份 一、 Ubuntu Server 下安装 MySQL 在 Ubuntu Server 中安装 MySQL 服务器是一件非常简单的事情。我们可以使用 apt-get install 命令来安装 MySQL 服务器。首先,我们...

    ubuntu mysql

    在Ubuntu系统上搭建MySQL数据库是许多开发者和系统管理员的日常任务。MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),适用于各种规模的应用程序,从小型项目到大型企业级系统。本文将详细介绍如何在...

    企业级mysql基于MHA的高可用集群部署

    MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。 知识点2:MHA的工作...

    mysql集群搭建

    ### MySQL集群搭建与负载均衡详解 #### 一、MySQL集群概念及优势 在现代数据库管理领域,MySQL集群技术被广泛采用来提升数据处理能力和系统的稳定性。集群是指将多台计算机组织起来作为一个整体来提供服务的技术...

    基于MySQL Master Slave同步配置的操作详解

    环境:PC:ubuntu 10.10 192.168.1.112(master) 192.168.10.245(slave) MySQL : 5.1.49-1ubuntu8.1-log在master中已经存在数据库test 首先修改mysql配置文件:/etc/mysql/my.cnf[master]#author:zhxia 代码如下...

    Ubuntu10下如何搭建MySQL Proxy读写分离探讨

    在读写分离的设置下,主数据库(Master)主要负责处理事务性操作,确保数据的一致性和完整性,而从数据库(Slave)则处理非事务性的SELECT查询,以减轻主数据库的压力。通过数据库复制,主数据库的更新会实时同步到...

    ubuntu 16.04配置MySQL主从同步的配置方法

    在Ubuntu 16.04上配置MySQL主从同步是一项关键的任务,对于实现高可用性和数据备份至关重要。以下是一个详细的步骤指南: **准备工作** 1. **主从数据库版本一致**:为了确保兼容性和数据一致性,建议主从数据库...

    Ubuntu配置Mysql主从数据库

    对于MySQL 5.1.7之前的版本,可能需要设置`master-host`,但在这个例子中,只需要设置`server-id = 2`。 5. **从数据库的初始化**:登录从数据库,执行SQL命令设置主服务器的信息: ```sql CHANGE MASTER TO ...

    linux上搭建mysql两台mysql服务器.zip

    在Linux系统上搭建MySQL多台服务器的环境,通常是为了实现高可用性、负载均衡或数据库复制等需求。这里提到的场景是配置两台MySQL服务器以及一个Mycat中间件,Mycat是一个开源的分布式数据库系统,常用于解决大数据...

    mysql主从服务器

    ### MySQL主从服务器搭建详解 #### 一、背景与需求分析 随着互联网应用规模的不断扩大,高并发场景下的数据处理成为了一个重要的挑战。对于大型网站而言,仅仅依靠单台数据库服务器难以满足日益增长的数据访问需求...

    如何设置MySQL同步(Replication)

    MySQL同步,也称为复制,是一种将数据库操作从一个服务器(主服务器或Master)实时或几乎实时地复制到另一个服务器(从服务器或Slave)的技术。这种功能对于实现数据冗余、备份、故障恢复以及负载均衡至关重要。以下...

    MySQL-MMM安装指南(Multi-Master Replication Manager for MySQL)

    MySQL-MM (Multi-Master Replication Manager) 是一种用于MySQL数据库的高可用性和负载均衡解决方案,它支持多主复制,允许数据在多个主节点之间双向同步。以下是对MySQL-MMM安装的详细步骤和基本配置的说明。 首先...

    linux下mysql多实例安装部署及主从配置.docx

    - 设置复制源,即指明要从哪个主机实例进行复制:`CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='repl3307', MASTER_PASSWORD='repl3307', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=301;...

    mysql所需的实验环境

    通过这些步骤,你可以搭建出一个完整的MySQL实验环境,并且能够实现主从复制的功能。需要注意的是,实际操作过程中可能会遇到各种问题,因此建议详细记录每一步的操作和结果,以便于排查故障。此外,对于生产环境而...

    高性能Mysql主从架构的复制原理及配置详解.pdf

    环境中,Master 和 slave 的 MySQL 数据库版本同为 5.0.18,操作系统为 Ubuntu 11.10,IP 地址为 10.100.0.100。 在配置复制时,需要注意以下几点: * 主服务器必须激活二进制日志功能。 * 从服务器必须具备足以让...

    Linux系统安装通用MySQL8,及主从配置.zip

    CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='repl', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='file_from_master_status', MASTER_LOG_POS=position_from_master_status; START SLAVE;...

Global site tag (gtag.js) - Google Analytics