`
neatchenheng
  • 浏览: 24483 次
  • 性别: 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] ... ]
 

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

相关推荐

    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 Galera集群的选择与性能测试

    No Master-Slave Failover(失效备援) Operations or Use of VIP • 热备份 故障转移期间没有停机时间(因为没有故障转移)。 • 自动节点配置 不需要手动备份数据库并将其复制到新节点。 • 支持InnoDB。 • 透明的...

    MySQL分布式集群部署

    为5台机器全部安装64位centos6.4并...数据库Master主服务器(两台):10.18.12.152,10.18.12.153 数据库Slave从服务器(两台,即sql及存储节点):10.18.12.154,10.18.12.155 MySQL-Proxy调度服务器:10.18.12.157

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    ├─新版MySQL DBA 课件ppt │ 第一课数据库介绍篇.pdf │ 第七课MySQL数据库设计.pdf │ 第三十一课percona-toolkits 的实战及自动化.pdf │ 第三课MySQL授权认证.pdf ...│ mysql-master-05-25_11-10-39.log

    MySQL高可用架构MMM简单介绍.docx

    MySQL-MMM架构的基础:master1和master2之间双向复制,同时Master1和Slave1之间是主从复制。这样整个体系中存在两个Master,正常情况下只有一个master对外提供写服务。如果对外提供服务的master意外宕机了,这是...

    为MySQL安装配置代理工具Kingshard的基本教程

    本文仅作为最小实验环境,因此不使用master, slave模式. 单机上使用mysql_mutil运行二个mysql实列 初始化数据目录 # mysql_install_db --datadir=/var/lib/mysql2/ --user=mysql # mysql_install_db --datadir=/var...

    MyCat+MySql集群安装步骤

    一 .MyCat+MySql集群安装步骤 —-两个主和两个从————— 1.安装master(主)mysql 步骤1:安装单机mysql 步骤2:修改/etc/my.cnf[参考my.cnf文件夹下my.cnf使用文件] # vim /etc/my.cnf –> server-id=1 –>log_bin...

    MHA实施文档.zip

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

    MHA实施文档.pdf

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

    详解mysql集群:一主多从架构实现

    实验环境: 1、三台CentOS 7 服务器 2、mysql5.7.26(三台都通过yum安装) 服务器列表 7.100.222.111 master 47.103.211.5 slave1 ...slave2 ...如果还没安装mysql请看安装教程:mysql安装 ...二、搭建集群

    mysql读写分离实现.doc

    database集群采用mysql的master-slave的replication方案。 适合人群:对mysql有一定基础的朋友 使用场景及目标:当数据库访问并发量非常大,性能急剧下降时,先进行读写分离。通过本次案例实战,掌握mysql读写分离的...

    使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

    > 部署 MySQL 5.7 集群 master & slave (仅测试用) 镜像版本 5.7 1、创建 overlay 网络 docker network create --driver overlay common-network --attachable 2、编辑两个配置文件 master.cnf 与 slave.cnf ...

    mysql5.7 主从配置docker配置文件

    记录file和pos,用在slave中的master_log_file和master_log_pos中。 在slave中执行: change master to master_host='192.168.1.147',master_user='user1',master_password='1',master_port=3336,master_log_...

    MySQL slave_net_timeout参数解决的一个集群问题案例

    2015-02-03 15:44:51 19633 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and ...

    mysql读写分离实现

    在本次实战中,应用程序client基于c3p0连接后端的database proxy。database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba。database集群采用mysql的master-slave的replication方案。

    利用MySQL Cluster 7.0 + LVS 搭建高可用环境

    以前我们的大部分高可用方案其实还存在一定缺陷,例如 MySQL Replication 方案,Master 是否存活检测需要一定时间,而和 Slave 的切换也需要时间,因此其高可用程度较大依赖监控软件或自动化管理工具。而早先的 ...

    mysql角色服务器,用于实现数据库主从复制,mysql集群搭建所用服务器

    主库Master:主要进行的是数据的"更新操作" 从库Slave: 实时备份主库的更新信息 二进制日志: 实时记录主库的更新操作,并且形式二进制码. 中继日志: 保存主库的更新信息 调用原理 1.当主库更新数据后,会实时的写入到...

    kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统

    kingbus是一个基于raft强一致协议实现的分布式MySQL binlog 存储系统...它能够充当一个MySQL Slave从真正的Master上同步binglog,并存储在分布式集群中;同时又充当一个MySQL Master将集群中的binlog 同步给其他Slave。

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、mysql高可用集群搭建与管理、mysql服务器性能和服务监控等方面多...

Global site tag (gtag.js) - Google Analytics