search
HomeDatabaseMysql TutorialMySQL的Master/Slave集群安装和配置_MySQL

本文讲述MySQL的Master/Slave集群安装和配置,安装的版本是最新的稳定版本GA 5.6.19。

为了支持有限的HA,我们使用Master/Slave简单的读写分离集群。有限的HA是指当Master不可用时,数据不会丢失,但在Master宕机的情况下是不可写的,必须手工处理故障。如果要支持更高的可用性,可以使用两台Master来做热切换。

Master和Slave的MySQL安装是相同的,只是my.cnf的配置不同,需要配置二进制日志文件复制。

没有特殊说明,命名中带#的为root用户操作,带$的为mysql Linux用户的操作。

安装准备

1. 在安装MySQL前,需要确认下面的系统软件已经安装在Linux中。

软件名称

软件描述

gcc-4.4.7

编程语言编译器

gcc-c++-4.4.7

C++语言编译器

cmake-2.6.4-5

跨平台的开源构建系统

ncurses-devel-5.7-3.20090208

控制打印控制台屏幕

2. 创建mysql Linux用户

# groupadd mysql

# useradd -g mysql mysql

# passwd mysql

3. 准备安装目录

创建MySQL安装目录,并赋权限给mysql用户:

# mkdir /usr/local/mysql-5.6.19

# chown mysql:mysql /usr/local/mysql-5.6.19

# chmod -R 770 /usr/local/mysql-5.6.19

4. 创建MySQL数据存储目录:

# mkdir /data

# mkdir /data/mysql

# chown mysql:mysql /data/mysql

5. 授权MySQL解压源码目录/usr/local/src目录的可执行权限给所有用户:

# chmod -R 757 /usr/local/src

安装MySQL

1. 解压缩安装包:

$ cd /usr/local/src

$ tar -xzvf mysql-5.6.19.tar.gz

2. 配置MySQL编译参数

$ cd /usr/local/src/mysql-5.6.19

$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.19\

-DMYSQL_DATADIR=$MYSQL_DATA_PATH\

-DSYSCONFDIR=/usr/local/mysql-5.6.19/conf\

-DDEFAULT_CHARSET=utf8\

-DDEFAULT_COLLATION=utf8_general_ci\

-DWITH_READLINE=1\

-DWITH_INNOBASE_STORAGE_ENGINE=1\

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_PERFSCHEMA_STORAGE_ENGINE=1

备注:

-DCMAKE_INSTALL_PREFIX: 配置MySQL的安装目录。

-DMYSQL_DATADIR: 配置MySQL的数据目录。

-DSYSCONFDIR: 配置MySQL的配置文件目录。

-DDEFAULT_CHARSET: 默认字符集。

-DDEFAULT_COLLATION:设定默认语言的排序规则。

-DWITH_READLINE:支持批量导入mysql数据。

-DWITH_INNOBASE_STORAGE_ENGINE:使用INNOBASE存储引擎。

-DWITH_ARCHIVE_STORAGE_ENGINE:常应用于日志记录和聚合分析,不支持索引。

-DWITH_BLACKHOLE_STORAGE_ENGINE:黑洞存储引擎。

-DWITH_PERFSCHEMA_STORAGE_ENGINE:性能模式引擎。

3. 执行make

$ make

$ make install

4. 修改myql用户的环境变量,增加MYSQL_HOME,并把bin加到PATH:

$ vi ~/.bash_profile

在文件中增加蓝色字体部分:

# User specific environment and startup programs

# MySQL home目录

export MYSQL_HOME=/usr/local/mysql-5.6.19

 

PATH=$PATH:$HOME/bin:$MYSQL_HOME/bin

 

export PATH

$ source ~/.bash_profile

初始化MySQL

1. 安装service脚本

# cp /usr/local/mysql-5.6.19/support-files/mysql.server/etc/init.d/mysqld

# chown mysql:mysql/etc/init.d/mysqld

# chmod 700 /etc/init.d/mysqld

2. 创建mysql权限数据库

$ $MYSQL_HOME/scripts/mysql_install_db--basedir=$MYSQL_HOME --datadir=/data/mysql

3. 创建PID文件目录

$ mkdir $MYSQL_HOME/var

4. 为master配置my.cnf

my.cnf格式不正确,很容易在启动时错误,最好在原有文件的基础上通过vi工具在linux上修改。

如果文件已经损坏,可以通过默认的模板中拷贝:

$ cp $MYSQL_HOME/support-files/my-default.cnf$MYSQL_HOME/my.cnf

编辑my.cnf

$ vi $MYSQL_HOME/my.cnf

在文件中增加蓝色字体部分:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

innodb_buffer_pool_size = 256M

innodb_flush_log_at_trx_commit=1

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

log_bin=master-bin

log_bin_index=master-bin.index

# These are commonly set, remove the # and set as required.

# basedir = .....

datadir = /data/mysql

port = 3306

# first master server id

server_id = 1

socket = /tmp/mysql.sock

pid-file = /usr/local/mysql-5.6.19/var/master.pid

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


5. 为slave配置my.cnf

和master的配置文件一样进行修改,但注意文件中的log文件名、datadir和server_id等内容不同。

编辑my.cnf

$ vi $MYSQL_HOME/my.cnf

在文件中增加蓝色字体部分:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

innodb_buffer_pool_size = 256M

innodb_flush_log_at_trx_commit=1

# Replication

# relay-log=slave-relay-bin

# relay-log-index=slave-relay-bin.index

# These are commonly set, remove the # and set as required.

# basedir = .....

datadir = /data/mysql

port = 3306

# first slave server id of master 1

server_id = 101

socket = /tmp/mysql.sock

pid-file = /usr/local/mysql-5.6.19/var/slave.pid

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


6. 启动MySQL

启动和停止master和slave都完全一样。

$ service mysqldstart

通过下面命令查看是否启动成功:

$ service mysqldstatus

7. 停止MySQL

$ service mysqld stop

管理MySQL安全性

默认MySQL的root的用户密码为空,为了提高安全性,应该设置root用户一个安全的密码。

在服务器上通过mysql用户打开MySQL客户端:

$ mysql –u root

设置一个安全的密码:

mysql> SET PASSWORD FORroot@localhost=PASSWORD('secret');

配置Master和Slave之间的复制

1. 创建执行复制的MySQL用户

在Master上创建一个复制用户,其中secret为用户的密码:

mysql> CREATEUSER repl_user IDENTIFIED BY 'secret';

并赋给复制权限:

mysql>GRANTREPLICATION SLAVE ON *.* TO repl_user;

2. 锁定Master并获取二进制日志位置值

获取读锁:

mysql> FLUSH TABLES WITHREAD LOCK;

显示当前二进制文件名及位置值:

mysql> SHOW MASTER STATUS;

\

3. 通过mysqldump工具获取Master数据快照

在另外一个会话中在Master上执行:

$ mysqldump -u root-p --all-databases --master-data > data_dump.sql

执行后,保存在当前目录中。

4. 释放Master上的读锁

在获取读锁的会话中,执行释放锁命令:

mysql> UNLOCK TABLES;

5. 导入dump数据到Slave中 

通过scp拷贝data_dump.sql到Slave的机器上。

$ scp data_dump.sqlmysql@:/home/mysql

在Slave上通过下面的命令导入到Slave的MySQL中。

$ mysql –u root -p

mysql> source data_dump.sql;

6. 配置Master和Slave之间的复制

mysql> CHANGE MASTER TO MASTER_HOST='',

MASTER_USER='repl_user',

MASTER_PASSWORD='secret',

MASTER_PORT = 3306,

MASTER_LOG_FILE='master-bin.000003',

MASTER_LOG_POS=881;

上面的MASTER_LOG_FILE和MASTER_LOG_POS需要配置6.2中查询到的信息。是Master的IP或主机名。

启动Slave:

mysql> START SLAVE;

7. 验证Master和Slave的状态

在Master上执行:

mysql> SHOW MASTER STATUS;

\

在Slave上执行:

mysql> SHOW SLAVE STATUS;

\

上面信息显示没有任何错误,Slave_IO_State信息为‘Waitigfor master to send event’,说明复制连接配置OK。

至此,两个MySQL的Master/Slave模式的集群已经部署成功,可以在Master上执行数据更新操作,发现可以正常复制到Slave上。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
节点从Proxmox VE彻底撤离及再次加入集群节点从Proxmox VE彻底撤离及再次加入集群Feb 21, 2024 pm 12:40 PM

节点从ProxmoxVE彻底撤离及再次加入集群场景描述当ProxmoxVE集群中有节点损坏无法快速修复时,需要将故障节点干净的从集群踢出,并把残留信息清理干净。否则,新的节点用故障节点曾使用用的IP的地址将不能正常加入集群;同样,从集群中脱离出来的故障节点修复后,虽然与集群已经毫无关系,但访问此单节点的Web管理后台,将出现原ProxmoxVE集群其它节点的信息,非常恼火。从集群中驱逐节点如果ProxmoxVE是Ceph超融合集群,需要登录集群任意节点(欲删除节点除外)宿主系统Debian,命令

PHP高并发环境下数据库的优化方法PHP高并发环境下数据库的优化方法Aug 11, 2023 pm 03:55 PM

PHP高并发环境下数据库的优化方法随着互联网的快速发展,越来越多的网站和应用程序需要面对高并发的挑战。在这种情况下,数据库的性能优化变得尤为重要,尤其是对于使用PHP作为后端开发语言的系统来说。本文将介绍一些在PHP高并发环境下数据库的优化方法,并给出相应的代码示例。使用连接池在高并发环境下,频繁地创建和销毁数据库连接可能会导致性能瓶颈。因此,使用连接池可以

php常见的集群有哪些php常见的集群有哪些Aug 31, 2023 pm 05:45 PM

php常见的集群有LAMP集群、Nginx集群、Memcached集群、Redis集群和Hadoop集群。详细介绍:1、LAMP集群,LAMP是指Linux、Apache、MySQL和PHP的组合,是一种常见的PHP开发环境,在LAMP集群中,多个服务器运行相同的应用程序,并通过负载均衡器将请求分发到不同的服务器上;2、Nginx集群,Nginx是一种高性能的Web服务器等等。

如何使用Docker进行多节点集群的管理和扩容如何使用Docker进行多节点集群的管理和扩容Nov 07, 2023 am 10:06 AM

在当今云计算时代,容器化技术已经成为开源界最受欢迎的技术之一。Docker的出现使得云计算变得更加便捷、高效,成为了开发人员、运维人员不可或缺的工具。而多节点集群技术的应用更是在Docker的基础上被广泛使用。通过多节点集群部署,我们可以更加有效地利用资源,提高可靠性和可扩展性,同时也能更加灵活地进行部署和管理。接下来,我们将为大家介绍如何使用Docker进

如何使用MongoDB实现数据的集群和负载均衡功能如何使用MongoDB实现数据的集群和负载均衡功能Sep 19, 2023 pm 01:22 PM

如何使用MongoDB实现数据的集群和负载均衡功能引言:在当今大数据时代,数据量的快速增长对数据库的性能提出了更高的要求。为了满足这些要求,数据的集群化和负载均衡成为了不可或缺的技术手段。MongoDB作为一种成熟的NoSQL数据库,提供了丰富的功能和工具来支持数据的集群和负载均衡。本文将介绍如何使用MongoDB实现数据的集群和负载均衡功能,并提供具体的代

Workerman文档中的服务器集群实现方法Workerman文档中的服务器集群实现方法Nov 08, 2023 pm 08:09 PM

Workerman是一个高性能的PHPSocket框架,可以使PHP更加高效地处理异步网络通信。在Workerman的文档中,有关于服务器集群实现方法的详细说明和代码示例。为了实现服务器集群,首先需要明确服务器集群的概念。服务器集群是将多台服务器连接到一个网络中,通过共享负载和资源,提高系统的性能、可靠性和可扩展性。在Workerman中,可以通过以下两种

MySQL集群部署与维护项目经验总结MySQL集群部署与维护项目经验总结Nov 02, 2023 pm 01:33 PM

MySQL集群部署与维护项目经验总结MySQL是互联网应用开发中最常用的数据库之一,随着业务规模不断扩大,单机的MySQL已经无法满足需求,因此需要考虑采用MySQL集群方案来扩展数据库的性能和容量。本文总结了在MySQL集群部署与维护过程中的经验和教训,希望能够对大家的MySQL集群部署和维护工作有所帮助。一、MySQL集群的部署和架构设计MySQL集群的

如何配置MySQL数据库的集群环境?如何配置MySQL数据库的集群环境?Jul 12, 2023 pm 02:52 PM

如何配置MySQL数据库的集群环境?引言:随着互联网的发展和数据量的不断增长,数据库成了每个企业都必备的核心系统之一。同时,为了保证数据的高可用性和读写性能的需求,数据库集群环境逐渐成为企业的选择。本文将介绍如何配置MySQL数据库的集群环境,并提供相应的代码示例。一、环境准备在配置MySQL数据库的集群环境之前,我们需要确保以下环境准备工作已经完成:安装M

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.