目錄
安装准备
安装MySQL
初始化MySQL
管理MySQL安全性
配置Master和Slave之间的复制
首頁 資料庫 mysql教程 MySQL的Master/Slave集群安装和配置_MySQL

MySQL的Master/Slave集群安装和配置_MySQL

Jun 01, 2016 pm 01:02 PM
叢集

本文讲述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上。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

節點從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高並發環境下資料庫的最佳化方法,並給出對應的程式碼範例。使用連線池在高並發環境下,頻繁地建立和銷毀資料庫連線可能會導致效能瓶頸。因此,使用連接池可以

如何使用Docker進行多節點叢集的管理與擴充 如何使用Docker進行多節點叢集的管理與擴充 Nov 07, 2023 am 10:06 AM

在當今雲端運算時代,容器化技術已成為開源界最受歡迎的技術之一。 Docker的出現使得雲端運算變得更加便利、高效,成為了開發人員、維運人員不可或缺的工具。而多節點叢集技術的應用更是在Docker的基礎上被廣泛使用。透過多節點叢集部署,我們可以更有效地利用資源,提高可靠性和可擴展性,同時也能更靈活地進行部署和管理。接下來,我們將為大家介紹如何使用Docker進

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伺服器等等。

如何使用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資料庫的叢集環境? Jul 12, 2023 pm 02:52 PM

如何配置MySQL資料庫的叢集環境?引言:隨著網路的發展和資料量的不斷增長,資料庫成了每個企業都必備的核心系統之一。同時,為了確保資料的高可用性和讀寫效能的需求,資料庫叢集環境逐漸成為企業的選擇。本文將介紹如何設定MySQL資料庫的叢集環境,並提供對應的程式碼範例。一、環境準備在設定MySQL資料庫的叢集環境之前,我們需要確保以下環境準備工作已經完成:安裝M

MySQL叢集部署與維護專案經驗總結 MySQL叢集部署與維護專案經驗總結 Nov 02, 2023 pm 01:33 PM

MySQL叢集部署與維護專案經驗總結MySQL是網路應用開發中最常用的資料庫之一,隨著業務規模不斷擴大,單機的MySQL已經無法滿足需求,因此需要考慮採用MySQL叢集方案來擴展資料庫的效能與容量。本文總結了在MySQL叢集部署與維護過程中的經驗與教訓,希望能對大家的MySQL叢集部署與維護工作有所幫助。一、MySQL叢集的部署與架構設計MySQL叢集的

See all articles