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

MySQL Master/Slave 集群

阅读更多

 

MySQL Master/Slave 集群

2010.05.25

    

安装

1.  下载mysql-5.1.40源码

2.  编译

#配制

Shell> ./configure --prefix=/vogins/lib/mysql --with-charset=utf8 --with-mysqld-user=mysql --with-plugins=max

--prefix : 主安装目录

--with-charset : 数据库默认编码

--with-mysqld-user : 指定运行mysqld 精灵进程的用户

--with-plugins : 支持的数据引擎插件

#编译

Shell> make

#安装

Shell> make install

3.  在其它服务器上执行步骤2

配制

1.      初始化数据库

#转到mysql主目录

Shell> cd /vorgins/lib/mysql

#初始化数据库

Shell> bin/mysql_install_db --user=mysql

2.      在其它服务器上执行步骤1

3.      编辑Master数据库的my.cnf文件

#拷贝my-large.cnf/etc/my.cnf 。默认的配制已经主持Master/Slave复制。

cp share/mysql/my-large.cnf  /etc/my.cnf

4.  启动Master

#使用mysql来运行mysqd daemon

bin/mysqld_safe –user=mysql &

5.  修改Master数据库root密码:

Shell> mysqladmin -uroot -p password 'lark@vogins'

6.      登陆Master数据库

Shell> mysql –uroot –plark@vogins

7.      设置复制帐户(该帐户必需授予REPLICATION SLAVE权限)

Mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.vogins.com' IDENTIFIED BY 'repl@vogins';

8.      Master做快照(如果是新安装的数据库,这一步可以不做)

#语句清空所有表和块写入语句,对于InnoDB引擎,还回锁定COMMIT操作

Mysql> FLUSH TABLES WITH READ LOCK ;

# tar工具创建数据备份 (别开窗口,不要将mysql客户端窗口关闭,保持表全局读## 锁)

Shell> tar –cvf /tmp/master-snapshot.tar ./var/

# 将此文件传到Slave数据库服务器上的/tmp,解压文件,并有需要的数据库目录文### 件拷贝到Slave 的数据库主目录下的/var/目录下。

Shell> tar –xvf /tmp/master-snapshot.tar

Shell> cp your-db $MYSQL/var/  

# 回到Master数据库中,取消全局读锁

Mysql> UNLOCK TABLES ;

#对于InnoDB,最好是在锁定表后关闭Master后再做快照。方法基本一致,只是在锁定## 后关闭数据,快照后重新启动数据库。

Shell>bin/mysqladmin –uroot –plark@vogins shutdown

9.  设置Slave数据库的my.cnf文件

#拷贝my-large.cnf/etc/my.cnf

cp share/mysql/my-large.cnf  /etc/my.cnf

#调整Slave配制文件参数

#注释掉二进制日志,从服务器不需要

Vim > #log-bin=mysql-bin

Vim> #binlog_format=mixed

#修改server-id,且不能与Master及其它Slave相同

Vim> server-id = 2

Vim> master-host = lark.vogins.com

Vim> master-user = repl

Vim> master-password = repl@vogins

#排除不需要同步的数据库

Vim> replicate-ignore-db = mysql,test

#其它配制不做调整。

10.  启动 Slave

#使用mysql来运行mysqd daemon

# 请注意要确保Master允许 Slave来访问 3306端口。

bin/mysqld_safe –user=mysql &

11.  修改Master数据库root密码:

Shell> mysqladmin -uroot -p password 'loon@vogins'

12.  登陆Slave数据库

Shell> mysql –uroot –ploon@vogins

13.  查看Slave运行状态

Mysql> show slave status

管理

3.1 管理Master服务器

Ø      PURGE MASTER LOGS

PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。

例如:

PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';

BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。MASTERBINARY是同义词。

如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

要清理日志,需按照以下步骤:

1.    在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。

2.    使用SHOW MASTER LOGS获得主服务器上的一系列日志。

3.    在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。

4.    制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)

5.    清理所有的日志,但是不包括目标日志。

 

Ø      RESET MASTER

可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个新的二进制日志文件。

Ø      SET SQL_LOG_BIN

SET SQL_LOG_BIN = {0|1}

如果客户端使用一个有SUPER权限的账户连接,则可以禁用或启用当前连接的二进制日志记录。如果客户端没有此权限,则语句被拒绝,并伴随有错误。

 

Ø      SHOW BINLOG EVENTS

SHOW BINLOG EVENTS
   [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

用于在二进制日志中显示事件。如果您不指定'log_name',则显示第一个二进制日志。

 

Ø      SHOW MASTER LOGS

SHOW MASTER LOGS
SHOW BINARY LOGS

用于列出服务器中的二进制日志文件。

 

Ø      SHOW MASTER STATUS

SHOW MASTER STATUS

用于提供主服务器二进制日志文件的状态信息。

 

Ø      SHOW SLAVE HOSTS

SHOW SLAVE HOSTS

用于显示当前使用主服务器注册的复制从属服务器的清单。不以--report-host=slave_name选项为开头的从属服务器不会显示在本清单中。

 

3.2 管理Slave服务器

Ø      CHANGE MASTER TO

CHANGE MASTER TO master_def [, master_def] ... 
master_def:
      MASTER_HOST = 'host_name'
    | MASTER_USER = 'user_name'
    | MASTER_PASSWORD = 'password'
    | MASTER_PORT = port_num
    | MASTER_CONNECT_RETRY = count
    | MASTER_LOG_FILE = 'master_log_name'
    | MASTER_LOG_POS = master_log_pos
    | RELAY_LOG_FILE = 'relay_log_name'
    | RELAY_LOG_POS = relay_log_pos
    | MASTER_SSL = {0|1}
    | MASTER_SSL_CA = 'ca_file_name'
    | MASTER_SSL_CAPATH = 'ca_directory_name'
    | MASTER_SSL_CERT = 'cert_file_name'
    | MASTER_SSL_KEY = 'key_file_name'
    | MASTER_SSL_CIPHER = 'cipher_list'

可以更改从属服务器用于与主服务器进行连接和通讯的参数。

MASTER_USER, MASTER_PASSWORD, MASTER_SSL, MASTER_SSL_CA, MASTER_SSL_CAPATH,MASTER_SSL_CERT, MASTER_SSL_KEYMASTER_SSL_CIPHER用于向从属服务器提供有关如何与主服务器连接的信息。

 

Ø      LOAD DATA FROM MASTER

LOAD DATA FROM MASTER

本命令用于对主服务器进行快照,并拷贝到从属服务器上。它可以更新MASTER_LOG_FILEMASTER_LOG_POS的值,这样,从属服务器就可以从正确的位置开始进行复制。使用--replicate-*-do-*--replicate-*-ignore-*选项指定的表和数据库排除规则均被兑现。--replicate-rewrite-db没有被考虑。这是因为使用本选项,用户就可以设置一个例如--replicate-rewrite-db=db1->db3--replicate-rewrite-db=db2->db3的非唯一映射。当从主服务器载入表时,该映射会使从属服务器发生混淆。

本语句的使用受以下条件的制约:

·         只对MyISAM表起作用。如果试图载入一个非MyISAM表,会导致以下错误:

·                ERROR 1189 (08S01): Net error reading from master

·         当拍摄快照时,会获得对主服务器的全局读取锁定。在载入操作期间,该锁定会阻止对主服务器的更新。

如果您正在载入大表,您可能必须对主服务器和从属服务器均增加net_read_timeoutnet_write_timeout值。

LOAD DATA FROM MASTER不从mysql数据库拷贝任何表。这可以更容易地让主服务器和从属服务器拥有不同的用户和权限。

LOAD DATA FROM MASTER语句要求用于连接主服务器的复制帐户,以便让主服务器拥有RELOADSUPER权限,并让所有您想要载入的主服务器表拥有SELECT权限。所有的用户不拥有SELECT权限的主服务器表均被LOAD DATA FROM MASTER忽略。这是因为主服务器会对用户隐藏它们:LOAD DATA FROM MASTER会调用SHOW DATABASES以了解要载入的主服务器数据库,但是SHOW DATABASES只会返回用户有部分权限的数据库。在从属服务器方面,发布LOAD DATA FROM MASTER的用户应拥有授权,以取消或创建被复制的数据库和表。

 

Ø      LOAD TABLE tbl_name FROM MASTER

LOAD TABLE tbl_name FROM MASTER

用于把表的拷贝从主服务器转移到从属服务器。本语句的主要作用是调试LOAD DATA FROM MASTER。它要求用于连接主服务器的帐户拥有对主服务器的RELOADSUPER权限,并拥有对要载入的主服务器表的SELECT权限。在从属服务器方面,发布LOAD TABLE FROM MASTER的用户应拥有取消和创建表的权限。

用于LOAD DATA FROM MASTER的条件也适用于这里。举例说明,LOAD TABLE FROM MASTER仅对于MyISAM表起作用。对LOAD DATA FROM MASTER的暂停注意也适用。

 

Ø      MASTER_POS_WAIT()

        SELECT MASTER_POS_WAIT('master_log_file', master_log_pos)

这实际上是一个函数,而不是一个语句。它被用于确认,从属服务器已读取并执行了到达主服务器二进制日志的给定位置。

Ø      RESET SLAVE

RESET SLAVE

用于让从属服务器忘记其在主服务器的二进制日志中的复制位置。本语句被用于进行一个明确的启动:它会删除master.inforelay-log.info文件,以及所有的中继日志,并启动一个新的中继日志。

注释:所有的中继日志被删除,即使它们没有被从属服务器SQL线程完全的执行。(如果您已经发布了一个SLAVE语句或如果从属服务器的载入量很大,则这对于一个复制从属服务器是一个很可能出现的情况。)

存储在master.info文件中的连接信息通过使用在对应的启动选项中指定的值,被立即重新设置了。此信息包括主服务器主机、主服务器接口、主服务器用户和主服务器 密码等值。当从属服务器SQL线程被中止时,它位于正在复制的临时表的中间,并且发布了RESET SLAVE,则已被复制的临时表在从属服务器中被删除。

 

Ø      SET GLOBAL SQL_SLAVE_SKIP_COUNTER

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n

从主服务器中跳过后面的n个事件。要复原由语句导致的复制中止,这是有用的。

仅当从属线程没有正在运行时,本语句时有效的。否则,会产生一个错误。

 

Ø      SHOW SLAVE STATUS

SHOW SLAVE STATUS

用于提供有关从属服务器线程的关键参数的信息。如果您使用mysql客户端发布此语句,则您可以使用一个\G语句终止符来获得更便于阅读的竖向版面,而不是使用分号:

 

Ø      START SLAVE

START SLAVE [thread_type [, thread_type] ... ]
START SLAVE [SQL_THREAD] UNTIL
    MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
    RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos
 
thread_type: IO_THREAD | SQL_THREAD

不含选项的START SLAVE会同时启动两个从属服务器线程。I/O线程从主服务器中读取查询,并把它们存储在中继日志中。SQL线程读取中继日志并执行查询。START SLAVE要求SUPER权限。

如果START SLAVE成功地启动了从属服务器线程,则会返回,不会出现错误。但是,即使在此情况下,也有可能出现这样的现象——服务器线程启动了,然后又停止了(例如,因为它们没有成功地连接到主服务器上,或者没有能读取二进制日志,或者出现了其它问题)。START SLAVE对此不会发出警告。您必须检查从属服务器的错误日志,查看是否有由从属服务器线程产生的错误消息,或者使用SHOW SLAVE STATUS检查它们是否运行正常。

您可以把IO_THREADSQL_THREAD选项添加到语句中,指明哪些线程将要启动。

可以添加一个UNTIL子句,指定从属服务器应启动并运行,直到SQL线程达到主服务器二进制日志中的一个给定点为止。当SQL线程达到此点时,它会停止。如果在该语句中指定了SQL_THREAD选项,则它只会启动SQL线程。否则,它会同时启动两个从属服务器线程。如果SQL线程正在运行,则UNTIL子句被忽略,并发布一个警告。

对于一个UNTIL子句,您必须同时指定一个日志文件名和位置。不要把主服务器和中继日志选项混合在一起。

UNTIL条件由一个后续的STOP SLAVE语句,或一个不包括UNTIL子句的START SLAVE语句,或一个服务器重启命令重新设置。

UNTIL子句对于调试复制操作是有用的,或者可用于促使复制操作继续,直到接近一个特定的点时为止,在此点,您想要避免让从属服务器复制一个语句。举例说明,如果在主服务上执行了一个不明智的DROP TABLE语句,您可以使用UNTIL来告知从属服务器,执行到此点就停止,不要再继续了。要查找该事件是什么,需对主服务器日志或从属中继日志使用mysqlbinlog,或通过使用SHOW BINLOG EVENTS语句。

如果您正在使用UNTIL,让从属服务器成段地处理已复制的查询,则建议您使用--skip-slave-start选项来启动从属服务器,以防止当从属服务器启动时,SQL线程运行。最好在一个选项文件中使用此选项,而不是在命令行中使用,这样,如果发生了意料外的服务器重新启动,它也不会被忘记。

SHOW SLAVE STATUS语句包括了输出字段。这些字段显示了UNTIL条件的当前值。

在以前版本的MySQL中,本语句被称为SLAVE START。在MySQL 5.1中仍然接受这种用法,以便与以前版本兼容。但现在不赞成使用。

 

Ø      STOP SLAVE

TOP SLAVE [thread_type [, thread_type] ... ]
 

支持请点击这里
分享到:
评论

相关推荐

    ActiveMQ Master/Slave 主从配置

    ActiveMQ是Apache软件基金会下的一个开源消息代理项目,主要提供了消息队列...当原先的Master节点恢复后,会重新加入集群中,并回到Slave角色,继续进行数据同步操作。这种配置可以有效提高消息系统的可靠性和扩展性。

    Mysql-master-slave.rar_Master/Slave_slave mysql

    MySQL的主从复制是数据库高可用性...通过理解并熟练掌握MySQL的主从复制,你可以构建一个高效、可靠的数据库集群,为大规模应用提供稳定的服务。阅读“Mysql主从、主主复制详解.pdf”将进一步深化你对这一主题的理解。

    搭建MySQL的MasterSlave架构

    - 测试集群功能,例如在Master上创建表并插入数据,然后在Slave上验证这些更改是否已同步。 5. **注意事项** - 要确保Master和Slave之间的网络连接稳定,因为复制过程依赖于持续的数据流。 - 可以通过`replicate...

    MySQL Master Slave构架 spring3 整合

    MySQL Master Slave 集群构架和spring整合,里面实现的是动态切换数据源,大家都是知道,spring2之后添加AbstractRoutingDataSource这个东西,这个就可以实现切换数据源,实现思路是:先按照搭建MySQL的MasterSlave...

    joeywang310#mysql-master-slave#Mysql主从复制集群搭建-基于DockerCompose1

    如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave mysql容器配置配置Dockerfile设置server_id,一般设置为

    mysql 8 MGR集群

    MySQL 8 MGR 集群 MySQL 8 MGR 集群是一种高可用性的数据库解决方案,通过在多个服务器上部署多个 MySQL 实例,实现数据库的高可用性和负载均衡。本文将详细介绍 MySQL 8 MGR 集群的原理、安装、配置和部署。 一、...

    ActiveMQ 集群——JDBC Master Slave + Broker Cluster

    ActiveMQ 集群——JDBC Master Slave + Broker Cluster ActiveMQ 集群是指将多个 ActiveMQ 服务器组合在一起,以提高系统的可扩展性和可靠性。在这个集群中,我们可以使用 JDBC Master Slave 模式和 Broker Cluster...

    MYSQL的masterslave数据同步配置.rar

    主从架构是指在一个MySQL集群中,有一个主服务器(Master)负责处理所有写操作,而一个或多个从服务器(Slave)接收并应用主服务器的更新。这种设计模式提高了系统的可用性和性能,因为读操作可以分散到从服务器上...

    mysql数据库各集群优缺点

    集群通常包括多种不同的配置模式,如Master-Slave/Multi-Master复制等,每种模式都有其特定的应用场景和优势。 #### 二、Master-Slave复制详解 **1. 工作原理** - **Master-Slave复制**:在这种架构中,存在一个...

    mysql集群主从安装总结

    CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306, MASTER_USER='slave', MASTER_PASSWORD='cfca1234', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=487; START SLAVE; SHOW SLAVE STATUS \...

    MYSQL 集群

    在配置 MYSQL 集群之前,我们需要准备好两个服务器:主服务器(Master)和从服务器(Slave)。在本例中,我们将使用两个 CentOS 服务器,分别命名为 192.168.0.150 和 192.168.0.142。 第二步:安装 MYSQL 在两个...

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

    MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点(监控)上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它...

    Mysql MHA高可用集群架构1

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

    proxysql-basics-master-slave:为MasterSlave拓扑设置ProxySQL的基本教程

    通过这个教程,你将了解到如何在Master-Slave拓扑中配置和使用ProxySQL,包括安装、配置、添加MySQL服务器、设置路由规则、监控以及故障切换。掌握这些知识,能帮助你构建一个更加健壮和高效的MySQL集群。

    mysql高可用集群部署项目1

    MySQL 主从同步是指将一个 MySQL 实例(master)中的数据实时同步到另一个 MySQL 实例(slave)中,以实现数据的高可用性和灾难恢复。该项目中,MySQL 主从同步是通过配置 MySQL 的 Binlog 和 Replication 机制来...

    mysql-master-master

    MySQL的主主复制(Master-Master Replication)是一种高可用性解决方案,它允许两个或多个数据库服务器互相复制数据,形成一个集群。在这种模式下,每个节点既是主节点,也是从节点,可以接受读写操作。当一个节点...

    MySQL galera 集群搭建

    在Galera集群中,所有的节点都是主节点,可以同时进行读写操作,这与传统的Master-Slave模式不同,后者通常只有一个主节点负责写入,其他从节点进行读取。 **2.1 Galera Cluster介绍** Galera Cluster是由Galera...

    搭建mysql-cluster集群.docx

    搭建MySQL Cluster集群 MySQL Cluster是适用于分布式计算环境的高可用、高冗余版本的MySQL,其技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应...

Global site tag (gtag.js) - Google Analytics