Linux MySQL 集群搭建

MySQL 集群搭建

MySQL 主从复制的方式
MySQL5.6 开始主从复制有两种方式:基于日志(binlog)、基于 GTID(全局事务标示符)。 本教程主要讲基于日志(binlog)的复制。
MySQL 主从复制(也称 A/B 复制)的原理
(1) Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件, 这些记录叫做二进制日志事件(binary log events);
(2) Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继日志(relay log); 

(3) Slave 重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完 成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)。

MySQL 集群搭建(2 node):

mysql-01服务器:192.168.10.253

mysql-02服务器:192.168.10.254

MySQL版本:mysql-5.6.22

 

1、上传MySQL包到两台服务器:

#mysql-01服务器
scp mysql-5.6.22.tar.gz root@192.168.10.253:
#mysql-02服务器
scp mysql-5.6.22.tar.gz root@192.168.10.254:

2、添加 集群服务IP域名映射:

#编辑本地 hosts文件
vi /etc/hosts

######## mysql ########
192.168.10.253 mysql-01
192.168.10.254 mysql-02


3、各节点间可基于密钥进行SSH通信,而无需密码

 

#产生密钥  
ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""  
#拷贝受权密钥  
cp .ssh/id_dsa.pub .ssh/authorized_keys  
#拷贝密钥到 mysql-02虚拟机  
scp -r .ssh mysql-02:  
#查看ssh 是否免密码登陆  
ssh mysql-02 -- uname -n 


4、关闭集群防火墙:

#查看防火墙的状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙是否开机启动
chkconfig --list iptables
#关闭开机启动防火墙
chkconfig iptables off

 

5、关闭 selinux

 

#修改selinux config 配置
vi /etc/selinux/config

#修改 SELINUX的值为:disabled
SELINUX=disabled


6、安装MySQL 的依赖包:

#安装MySql 依赖
yum install cmake wget gcc-c++ gcc ncurses-devel perl -y

7、解压MySQL源码包:

#把源码解压到 /usr/local/src	
tar -xvf mysql-5.6.22.tar.gz -C /usr/local/src/
#进入 /usr/local/src
cd /usr/local/src

8、安装编译MySQL源码:

#进入 mysql源码目录:  
cd mysql-5.6.22/  
#创建mysql 的数据储存目录:  
mkdir -p /usr/local/mysql/data  
#cmake 编译 指定mysql 配置  
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  
#删除 CMakeCache.txt 文件
rm -rf CMakeCache.txt
#编译源码 (编译时间比较长)
make 
#安装  
make install
-DCMAKE_INSTALL_PREFIX=dir_name设置mysql安装目录
-DMYSQL_UNIX_ADDR=file_name设置监听套接字路径,这必须是一个绝对路径名。默认为/tmp/mysql.sock
-DDEFAULT_CHARSET=charset_name设置服务器的字符集。
缺省情况下,MySQL使用latin1的(CP1252西欧)字符集。
cmake/character_sets.cmake文件包含允许的字符集名称列表。
-DDEFAULT_COLLATION=collation_name设置服务器的排序规则。
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
存储引擎选项:
MyISAM,MERGE,MEMORY,和CSV引擎是默认编译到服务器中,并不需要明确地安装。
静态编译一个存储引擎到服务器,使用-DWITH_engine_STORAGE_ENGINE= 1
可用的存储引擎值有:
ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), 
PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema)
-DMYSQL_DATADIR=dir_name设置mysql数据库文件目录
-DMYSQL_TCP_PORT=port_num设置mysql服务器监听端口,默认为3306
-DENABLE_DOWNLOADS=bool是否要下载可选的文件。例如,启用此选项(设置为1),cmake将下载谷歌所使用的测试套件运行单元测试。

9、创建mysql组 和 用户:

#创建MySQL组
groupadd mysql
#创建用户
useradd -r -g mysql mysql
#给 /usr/local/mysql 文件夹授权给MySQL用户
chown -R mysql:mysql /usr/local/mysql

10、初始化DB 数据库:

#进入脚本目录
cd /usr/local/mysql/
#初始化 db
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

11、配置MySQL环境变量:

vi /etc/profile

#mysql environment
MYSQL_HOME=/usr/local/mysql
PATH=.:$MYSQL_HOME/bin:$PATH
export MYSQL_HOME PATH

#重新加载 /etc/profile
source /etc/profile
#查看 MySQL 是否生效
echo $PATH

 

配置MySQL HA

 

12、修改MySQL配置 /etc/my.cof

#修改 /etc/my.cof
vi /etc/my.cnf

##### mysql ha #####
server_id=192.168.10.253
binlog-ignore-db=mysql
log-bin=mysql-master-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062

## 在 [mysqld] 中增加以下配置项
## 设置 server_id,一般设置为 IP server_id=192.168.10.253
## 复制过滤:需要备份的数据库,输出 binlog
#binlog-do-db=roncoo
## 复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步) binlog-ignore-db=mysql
## 开启二进制日志功能,可以随便取,最好有含义
log-bin=edu-mysql-bin
## 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。 expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致 slave_skip_errors=1062

13、授权两个文件:当前用户是Mysql,对日志文件 和 socket文件没有写权限:

#日志文件 授权 mysql 用户
chown -R mysql:mysql /var/run/mysqld/
#socket文件 授权 mysql 用户
chown -R mysql:mysql /var/lib/mysql/

14、启动MySQL:

#启动MySQL
mysqld_safe &

15、查看MySQL进程:

#查看进程:
ps -ef | grep mysql

16、登陆MySQL数据库:

#登陆MySQL
mysql -uroot -p

注意:此时报错(如下图)
在/etc/mycof配置文件下 添加client配置:

 

#编辑配置文件
vi /etc/my.cof

[client]
port=3306
socket=/var/lib/mysql/mysql.sock

17、重新登陆MySQL数据库(登陆成功、查看databases 能看到如下几个库):

 

#登陆MySQL
mysql -uroot -p

18、创建数据同步用户,并授予相应的权限:

#创建数据同步用户,并授予相应的权限
grant replication slave, replication client on *.* to 'mysql'@'192.168.0.254' identified by '123456';
# 刷新授权表信息
flush privileges;
# 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件)
show master status;
#创建 roncoo 库
create database if not exists roncoo default charset utf8 collate utf8_general_ci;
#创建 roncoo 表
CREATE TABLE `user` (
	`Id` int(11) NOT NULL AUTO_INCREMENT,
	`userName` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名', 
	`pwd` varchar(255) NOT NULL DEFAULT '' COMMENT '密码', 
	PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
#插入3条数据,用于模拟现有的业务系统数据库
INSERT INTO `user` VALUES (1,'小沈哥','123456'),(2,'张俊伟','123456'),(3,'XSG','123456');

 

配置MySQL slave

 

19、配置slave。编辑 /etc/my.cof

vi /etc/my.cnf

#### mysql ha ####
server_id=1921680254
binlog-ignore-db=mysql
log-bin=mysql-slave-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=mysql-slave-relay-bin
log_slave_updates=1
read_only=1

## 在 [mysqld] 中增加以下配置项
## 设置 server_id,一般设置为 IP
server_id=206
## 复制过滤:需要备份的数据库,输出 binlog
#binlog-do-db=roncoo
##复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步) binlog-ignore-db=mysql
## 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用 log-bin=edu-mysql-slave1-bin
## 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size = 1M
## 主从复制的格式(mixed,statement,row,默认格式是 statement) binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。 expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致 slave_skip_errors=1062
## relay_log 配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates 表示 slave 将复制事件写进自己的二进制日志 log_slave_updates=1
## 防止改变数据(除了特殊的线程) read_only=1

20、Slave 上创建相同库:

Slave 上创建相同库:
create database if not exists roncoo default charset utf8 collate utf8_general_ci; use roncoo;

21、登录 Slave 数据库,添加相关参数

#登录 Slave 数据库
mysql -uroot -p
#添加相关参数
change master to master_host='192.168.0.253', master_user='mysql', master_password='123456', master_port=3306, master_log_file='mysql-master-bin.000001', master_log_pos=0, master_connect_retry=30;

 

22、查看主从同步状态

 

# 查看主从同步状态
# 可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 还 没有开始复制过程。
show slave status\G;

 

23、开启主从同步

 

# 开启主从同步
start slave

 

24、再查看主从同步状态

 

主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常

Slave_IO_Running: Yes

Slave_SQL_Running: Yes 

# 再查看主从同步状态
show slave status\G

 

25、在 master 上,可以看到 slave 的 I/O 线程创建的连接

 

# 再查看master 状态
show processlist\G

 

26、#查看 slave 和 master 上线程的状态。在 slave 上,可以看到 master 的 I/O 线程创建的连接

 

 

# 再查看 slave 状态
show processlist\G

 

27、主从数据复制同步测试

 

# 在master 服务器上添加数据
INSERT INTO `user` VALUES (4,'张俊伟2B','123456'),(5,'张俊伟2BB 2','123456');

 

28、在slave 上查看数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值